ここでopenCLに変換したいループがあります。openCL reduce、2d arrayを渡す
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
プログラムを2つの別々のカーネル(順番に実行される)に分割することを考えましたか?内側のループ用と外側のループ用です。 – vocaro