【发布时间】:2015-12-10 02:37:15
【问题描述】:
我们有多个线程计算结果,但需要将结果串行写入一个数组。我们在下面的示例中尝试使用 atomicCAS。在代码的某些部分它可以工作,在代码的其他部分它因为扭曲发散而挂起。线程写入结果的顺序无关紧要,但它们不应该尝试同时写入数组。
while (atomicCAS(&arrayAccess, AVAILABLE, NOT_AVAILABLE) == NOT_AVAILABLE);
arrayGlobalMemory[count] = result;
count++;
atomicExch(&arrayAccess, AVAILABLE);
下面的这个答案说这是不可能的。这是非常基本的功能。似乎对数组的并行访问应该是可序列化的?有人可以建议如何修改代码以从并行线程获取序列化数组访问,或者有人可以展示一些可以正常工作的示例代码吗?
【问题讨论】:
-
arrayGlobalMemory是什么类型? -
无符号整数 *arrayGlobalMemory;无符号整数计数 = 0;
-
串行线程。不应有 2 个或更多线程尝试写入数组中的同一元素。
-
线程可能都在一个块中。但也存在跨多个块的线程需要串行访问数组的情况。
标签: arrays serialization cuda