CUDAの共有/ローカルメモリに関しては、まだ少しわかりません。現在、私はカーネルを持っています。カーネル内で、各スレッドはリストオブジェクトを割り当てます。このようなもの
__global__ void TestDynamicListPerThread()
{
//Creates a dynamic list (Each thread gets its own list)
DynamicList<int> dlist(15);
//Display some ouput information
printf("Allocated a new DynamicList, size=%d, got pointer %p\n", dlist.GetSizeInBytes(),dlist.GetDataPtr());
//Loops through and inserts multiples of four into the list
for (int i = 0; i < 12; i++)
dlist.InsertAtEnd(i*4);
}
私の現在の理解では、各スレッドはdlist
ローカルメモリに保存されますが、これは本当ですか?その場合、カーネルの実行の最後にdlist
(別のカーネルから)各オブジェクトを取得する方法はありますか、それとも__shared__
最初のスレッドによって割り当てられた動的リストの配列を使用する必要がありますか?
少し複雑すぎるかもしれませんが、リストを変更する必要はありません。私が達成しようとしている実行は、次のようになります。
- リストを作成する(GPUでのみ実行)
- 各リストから出力を生成します(GPUで、各スレッドによって実行され、そのスレッドに割り当てられたリストからの情報のみが必要です)。
- リストの変更/交換(GPUで引き続き実行)
- ホストでいくつかのブレーク条件が満たされるまで、2と3を繰り返します
前もって感謝します!