__device__関数でメモリを割り当てる方法はCUDAにありますか? これを行う例は見つかりませんでした。CUDAは__device__関数でメモリを割り当てます
マニュアルから: B.15動的グローバルメモリ割り当て void * malloc(size_t size); void free(void * ptr); グローバルメモリ内の固定サイズのヒープから動的にメモリを割り当て、解放します。 CUDAのカーネル内のmalloc()関数は、デバイスヒープから少なくともsizeバイトを割り当て、割り当てられたメモリへのポインタを返します。要求を満たすためのメモリが不足している場合はNULLを返します。返されるポインタは、16バイトの境界にアライメントされることが保証されています。 CUDAのカーネル内free()関数は、以前のmalloc()の呼び出しによって返されたはずのptrが指すメモリを割り当て解除します。 ptrがNULLの場合、free()の呼び出しは無視されます。同じptrでfree()を繰り返し呼び出すと、定義されていない動作が発生します。 malloc()を介して与えられたCUDAスレッドによって割り当てられたメモリは、CUDAコンテキストの存続期間中、またはfree()の呼び出しによって明示的に解放されるまで割り当てられたままです。これは、その後のカーネルの起動からでも他のCUDAスレッドで使用できます。すべてのCUDAスレッドは別のスレッドによって割り当てられたメモリを解放することがありますが、同じポインタが2回以上解放されないように注意する必要があります。
あなたは動的にメモリを割り当てようとしていますか? – jmilloy
はい。私はそれが少しエキゾチックな要件だと理解していますが、私は既存のコードベースを移植しています – SparcU