我们有多个线程计算结果,但需要将结果串行写入一个数组。我们在下面的例子中尝试使用atomicCAS。在代码的某些部分中,它在代码的其他部分因为翘曲发散而挂起。线程写入结果的顺序并不重要,但它们不应该尝试同时写入数组。如何让CUDA并行线程串行写入数组?
while (atomicCAS(&arrayAccess, AVAILABLE, NOT_AVAILABLE) == NOT_AVAILABLE);
arrayGlobalMemory[count] = result;
count++;
atomicExch(&arrayAccess, AVAILABLE);
下面的答案说这是不可能的。这是非常基本的功能。并行访问数组似乎应该是可序列化的?有人可以建议如何修改代码以获得并行线程的序列化数组访问权限,还是有人可以显示一些正确工作的示例代码?
'arrayGlobalMemory'是什么类型? – talonmies
unsigned int * arrayGlobalMemory; unsigned int count = 0; – roger1994
串行线程。没有2个或更多线程应该尝试写入数组中的相同元素。 – roger1994