当谈到 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,直到在主机上满足某些中断条件
提前致谢!