这是我想要转换为openCL的循环。openCL减少,并传递2d数组
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”)。 – vocaro 2012-01-06 19:56:22
你有没有考虑将程序分成两个独立的内核(顺序执行),一个用于内部循环,另一个用于外部循环? – vocaro 2012-01-06 19:59:06