デバイス側の関数でメモリを動的に割り当てる 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 スレッドは、別のスレッドによって割り当てられたメモリを解放できますが、同じポインターが複数回解放されないように注意する必要があります。