首页 > 解决方案 > OpenCL 内核:__global 变量中的并行求和

问题描述

我已经了解了 Parallel Sum Reduction 技术。但是,我想知道是否可以将来自不同线程的不同值添加到同一个 __global 变量中,如下所示:

浮动一个 = ...; //为每个线程分配不同的a值

Gvar[1] += a; // 同时对同一个全局变量索引求和

谢谢

标签: opencl

解决方案


要从不同的工作组更新相同的全局内存位置,您将需要使用原子函数

您可以从同一组中的不同工作项执行此操作,但这通常不是一个好主意。在组内执行减少本地内存并且在每个工作组中只更新一次全局内存位置几乎总是更有效。

请注意,大多数原子函数不适用于浮点数据类型,因此您需要使用整数类型或替代方法来解决您的问题。


推荐阅读