【发布时间】:2013-02-18 11:00:19
【问题描述】:
我是 OpenCL 的新手。但是,我了解 C/C++ 基础知识和 OOP。 我的问题如下:是否可以并行运行求和计算任务?理论上可行吗?下面我将描述我尝试做的事情:
任务是,例如:
double* values = new double[1000]; //let's pretend it has some random values inside
double sum = 0.0;
for(int i = 0; i < 1000; i++) {
sum += values[i];
}
我在 OpenCL 内核中尝试做的事情(我觉得这是错误的,因为它可能同时从不同的线程/任务访问相同的“sum”变量):
__kernel void calculate2dim(__global float* vectors1dim,
__global float output,
const unsigned int count) {
int i = get_global_id(0);
output += vectors1dim[i];
}
此代码错误。如果有人回答我是否理论上可以并行运行这些任务,如果可以的话,我将非常感激 - 如何!
【问题讨论】:
-
这是一个经典的归约问题。查看here 逐步解释为多核架构优化此过程(它是CUDA,但原理完全相同,可能除了关于模板的部分)。尽管有关该主题的更多介绍性材料可能会更有帮助,但我将其留给正确的答案。
-
非常感谢!现在我知道这是一个普遍的问题,并且会学习如何解决它!
标签: c++ c parallel-processing opencl