こんにちは私はopenCLにかなり新しく、多次元配列のインデックスを作成しようとすると問題が発生しました。私が理解するところでは、グローバルメモリに多次元配列を格納することはできませんが、ローカルメモリで可能です。しかし、私は2Dのローカル配列にアクセスしようとすると常に0に戻ってきます。私はhttp://www.notebookcheck.net/NVIDIA-GeForce-GT-635M.66964.0.htmlで私のGPUを見て、私は0の共有メモリを持っていたことがわかりました。私のプログラミング経験で共有メモリの他の制限は0になりますか? 私は直面している問題の小さな簡単なプログラムを投稿しました。 入力は= [1,2,3,4]であり、これを2D配列に保存したいと思います。共有メモリを持たないopenCLの多次元配列ですか?
__kernel void kernel(__global float *input, __global float *output)
{//the input is [1,2,3,4];
int size=2;//2by2 matrix
int idx = get_global_id(0);
int idy = get_global_id(1);
__local float 2Darray[2][2];
2Darray[idx][idy]=input[idx*size+idy];
output[0]=2Darray[1][1];//this always returns 0, but should return 4 on the first output no?
}
ノートブックのリンクで参照されている共有メモリは、NVIDIA GPUの計算のコンテキストでは「共有メモリ」とは関係ありません。あなたのGT-635Mは確かに "共有メモリ"、すなわちOpenCL *ローカルメモリ*を持っています。これをOpenCL呼び出しで確認して、[clGetDeviceInfo()](https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetDeviceInfo.html)などのデバイスプロパティを取得することができます。 )on 'CL_DEVICE_LOCAL_MEM_SIZE' –