Vla*_*mir 6 c c++ parallel-processing opencl
我是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];
}
Run Code Online (Sandbox Code Playgroud)
我在OpenCL内核中尝试做的事情(我觉得这是错误的,因为它可能同时从不同的线程/任务访问相同的"sum"变量):
__kernel void calculate2dim(__global float* vectors1dim,
__global float output,
const unsigned int count) {
int i = get_global_id(0);
output += vectors1dim[i];
}
Run Code Online (Sandbox Code Playgroud)
这段代码错了.如果理论上有可能并行运行这样的任务,如果有的话,我会非常感谢有人回答我 - 如何!
如果您想以并行方式对数组的值求和,则应确保减少争用并确保线程之间不存在数据依赖性。
数据依赖性将导致线程必须相互等待,从而产生争用,这是您要避免获得真正并行化的情况。
一种方法是将数组拆分为 N 个数组,每个数组包含原始数组的某些部分,然后使用每个不同的数组调用 OpenCL 内核函数。
最后,当所有内核都完成了艰苦的工作后,您可以将每个数组的结果总结为一个。这个操作可以很容易地由CPU完成。
关键是每个内核中完成的计算之间不存在任何依赖性,因此您必须相应地分割数据和处理。
我不知道您的数据是否与您的问题有任何实际的依赖关系,但这需要您自己弄清楚。