cuda内核中的竞争条件,许多线程访问一个变量

时间:2019-01-10 22:20:12

标签: parallel-processing cuda

我正在尝试使用cuda中的并行计算来实现粒子群优化算法。我已经完成了所有代码,但是由于检查和设置总体最佳位置(由3个浮点数:x,y,值定义)中的竞争条件,程序运行之间的最终结果差异很大。

这部分内核使我很麻烦(所有线程都试图读取和写入变量):

if (value[index] < globals[2] || globals[2] == -1)
    {
        globals[0] = x[index];  
        globals[1] = y[index];
        globals[2] = value[index];
    }

此代码检查此粒子的值是否优于总体最佳值,并对其进行更新。如果许多粒子决定更新全局变量,则会发生竞争。

您是否有解决办法?

Correct answer (0,0,0)

Bad answer

0 个答案:

没有答案