我已经了解了平行求和约简技术。但是,我想知道是否可以将来自不同线程的不同值添加到同一个__global变量中,如下所示:
float a = ...;//为每个线程分配不同的 a 值
Gvar[1] += a;//同时对同一个全局变量索引求和
谢谢
要从不同的工作组更新相同的全局内存位置,您将需要使用原子函数。
可以从同一组中的不同工作项执行此操作,但这通常是一个坏主意。在组内执行本地内存缩减并且在每个工作组中仅更新一次全局内存位置几乎总是更有效。
请注意,大多数原子函数不适用于浮点数据类型,因此您需要使用整数类型或其他方法来解决问题。