这是驱动程序错误,还是在返回全局之前需要复制到本地内存?损坏的版本在每个输出中都有相同的字节位置被破坏。
__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:
答案 0 :(得分:0)
好吧,问题是,将所有全局范围变量声明为__constant我超过了可能的__constant变量的最大数量,当发生这种情况时,__常量变量的内容将是随机的......
简单来说,你必须统计你使用的所有时间 * .cl源文件中的__constant关键字,此数字必须小于可能的__constant变量的最大数量 由使用中的设备支持。