【发布时间】:2014-01-03 23:12:54
【问题描述】:
我想对我的这段内核代码(一维数据)应用减少:
__local float sum = 0;
int i;
for(i = 0; i < length; i++)
sum += //some operation depending on i here;
我希望有 n 个线程(n = 长度),而不是只有 1 个线程来执行此操作,最后有 1 个线程来计算总和。
在伪代码中,我希望能够写出这样的东西:
int i = get_global_id(0);
__local float sum = 0;
sum += //some operation depending on i here;
barrier(CLK_LOCAL_MEM_FENCE);
if(i == 0)
res = sum;
有办法吗?
我在 sum 上有一个竞争条件。
【问题讨论】:
-
这叫并行归约,查一下。它不像你的sn-p那么容易,但也不是非常难。只是需要更多的工作。
标签: multithreading parallel-processing opencl race-condition reduction