没有共享内存的openCL中的多维数组?

Multidimensional array in openCL with no shared memory?

你好,我是 openCL 的新手,在尝试索引我的多维数组时遇到了问题。据我了解,不可能将多维数组存储在全局内存中,但可以在本地内存中存储。但是,当我尝试访问我的 2D 本地数组时,它总是返回,因为 0.I 在 http://www.notebookcheck.net/NVIDIA-GeForce-GT-635M.66964.0.html 查看了我的 gpu 并发现我有 0 个共享内存,这可能是原因吗? 0 共享内存还会给我的编程体验带来哪些其他限制? 我已经发布了一个关于我面临的问题的简单小程序。 输入是 = [1,2,3,4],我想将其存储在我的二维数组中。

    __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?
     }
__local float 2Darray[1][1];

是 1 个元素宽,1 个元素高。

2Darray[1][1]

是不存在的第二行第二列。

即使它让您拥有本地内存而没有错误,它也会溢出到全局内存并变得与 vram 带宽一样慢(如果它不适合本地内存 space)。

竞争条件:

output[0]=2Darray[1][1];

每个核心都试图写入相同的 (0) 索引。添加

barrier(CLK_LOCAL_MEM_FENCE | CLK_GLOBAL_MEM_FENCE);
if(idx==0 && idy==0)

在它之前,所以只有 1 个线程写入它。不过这之前还需要同步指令。