1
GPUにグローバルメモリを割り当てる次のコードがあります。グローバルメモリの割り当て
__global__ void mallocTest()
{
char* ptr = (char*)malloc(123);
//....
free(ptr);
}
すべてのスレッドは、別々のptrにメモリを割り当てますか?
もし10個のスレッドで2つのブロックがあれば、20個の配列が割り当てられます(つまり、すべてのスレッドがそれ自身のメモリを割り当てます)? スレッドごとにではなく、ブロックごとにのみメモリを割り当てることはできますか? つまり、2つのブロックと10のスレッドがある場合、2つの配列しか割り当てられません。 これは可能ですか?
これは言及しておくべきですが、配列のサイズが共有メモリに収まらない場合... – scatman
ブロックあたり1つのスレッドでmalloc/newでヒープ内のメモリを割り当て、**アドレス**を保存してください各スレッドがそれを読み取ることができる共有メモリ内の割り当て次に、ブロック内の各スレッドはメモリを使用できます。 – talonmies
Scatman:すべてのスレッドが同じサイズのメモリを割り当てる必要がある場合、ホストコード(cudaMalloc)内のすべてのスレッドに割り当てる必要はなく、カーネルに渡して各スレッドがそのメモリにアクセスできるようにします。 –