デバイス側の関数でメモリを動的に割り当てる CUDA の方法はありますか? これを行う例は見つかりませんでした。
CUDA Cプログラミングマニュアルから:
B.15 動的グローバル メモリ割り当て
void* malloc(size_t size); void free(void* ptr);
グローバル メモリ内の固定サイズのヒープからメモリを動的に割り当ておよび解放します。
CUDA カーネル内
malloc()
関数は、デバイス ヒープから少なくとも size バイトを割り当て、割り当てられたメモリへのポインターを返すか、要求を満たすのに十分なメモリが存在しない場合は NULL を返します。返されたポインターは、16 バイト境界に位置合わせされていることが保証されています。CUDA カーネル内
free()
関数は、 が指すメモリの割り当てを解除します。ptr
これは、 への以前の呼び出しによって返されたものでなければなりませんmalloc()
。の場合、free() の呼び出しptr
はNULL
無視されます。同じ ptr で free() を繰り返し呼び出すと、動作が未定義になります。を介して特定の CUDA スレッドによって割り当てられたメモリ
malloc()
は、CUDA コンテキストの存続期間中、または への呼び出しによって明示的に解放されるまで、割り当てられたままになりfree()
ます。後続のカーネル起動からでも、他の CUDA スレッドで使用できます。CUDA スレッドは、別のスレッドによって割り当てられたメモリを解放できますが、同じポインターが複数回解放されないように注意する必要があります。