OpenCL:从常量内存直接复制到全局输出会破坏数据

时间:2013-11-25 00:00:59

标签: opencl

这是驱动程序错误,还是在返回全局之前需要复制到本地内存?损坏的版本在每个输出中都有相同的字节位置被破坏。

    __kernel void test(__constant item_t items[], __constant uint *xs, uint stride, __global ushort8 *output)
    {
        ushort8 stats;
        size_t id = get_global_id(0);

        xs += id * stride;

        //stats = items[xs[0]].stats; output[id] = stats;  -- this works
        output[id] = items[xs[0]].stats;                   // this doesn't.
    }

在Geforce GTX 280上测试,驱动程序331.82,Windows 8.1 64位。

编辑: 毫无疑问,将本地复制到“统计数据”并不能解决问题。

EDIT2:

  • __ constant ushort8输入提供了损坏的结果。
  • __ global ushort8输入给出了OK结果。
  • __ constant ushort [8] - >行。
  • __ global ushort [8] - >行。

1 个答案:

答案 0 :(得分:0)

https://devtalk.nvidia.com/default/topic/470881/use-of-constant-memory-breaks-with-opencl-1-1-constant-memory-worked-fine-in-1-0-but-fails-in-1-1/

  

好吧,问题是,将所有全局范围变量声明为__constant我超过了可能的__constant变量的最大数量,当发生这种情况时,__常量变量的内容将是随机的......

     

简单来说,你必须统计你使用的所有时间   * .cl源文件中的__constant关键字,此数字必须小于可能的__constant变量的最大数量   由使用中的设备支持。