我正在尝试使用cuda中的并行计算来实现粒子群优化算法。我已经完成了所有代码,但是由于检查和设置总体最佳位置(由3个浮点数:x,y,值定义)中的竞争条件,程序运行之间的最终结果差异很大。
这部分内核使我很麻烦(所有线程都试图读取和写入变量):
if (value[index] < globals[2] || globals[2] == -1)
{
globals[0] = x[index];
globals[1] = y[index];
globals[2] = value[index];
}
此代码检查此粒子的值是否优于总体最佳值,并对其进行更新。如果许多粒子决定更新全局变量,则会发生竞争。
您是否有解决办法?