這是我想要轉換爲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