【发布时间】:2012-02-04 11:12:28
【问题描述】:
这是我要转换为 openCL 的循环。
for(n=0; n < LargeNumber; ++n) {
for (n2=0; n2< SmallNumber; ++n2) {
A[n]+=B[n2][n];
}
Re+=A[n];
}
这是我目前所拥有的,不过,我知道它不正确并且遗漏了一些东西。
__kernel void openCL_Kernel( __global int *A,
__global int **B,
__global int *C,
__global _int64 Re,
int D)
{
int i=get_global_id(0);
int ii=get_global_id(1);
A[i]+=B[ii][i];
//barrier(..); ?
Re+=A[i];
}
我完全是这种类型的初学者。首先,我知道我不能将全局双指针传递给 openCL 内核。如果可以的话,请在发布解决方案之前等待几天左右,我想自己解决这个问题,但如果你能帮助我指出正确的方向,我将不胜感激。
【问题讨论】:
-
“我不能将全局双指针传递给 openCL 内核” 你的措辞让我很困惑。您可以传递一个双指针(例如“__global double *A”)。您不能传递 2D 指针(例如“__global int **B”)。
-
您是否考虑过将程序分成两个独立的内核(按顺序执行),一个用于内循环,一个用于外循环?
标签: parallel-processing opencl reduction