1
我想修复程序中的错误,并将其指向真正的小区域。从私有内存复制到全局OpenCL无效命令队列错误
每当我试图将数据从设备的私有内存复制到全局内存时,命令队列会失效,并且clFinish()返回一个错误。
举一个简单的例子:
kernel void example(global int *data, const int width) {
int id = get_global_id(0);
if (id == 0) {
int copy[width]; // private memory?
for (int i = 0; i < width; i++) {
copy[i] = data[i]; // works
data[i] = copy[i]; // works
}
// whenever this loop is here
// i get invalid command queue from clFinish
for (int i = 0; i < width; i++) {
data[i] = copy[i];
}
}
}
这样可以为什么,之所以有人给我解释一下?
谢谢
第一个循环中的第二个语句和第二个循环中的语句基本上做同样的事情。为什么?。我在想编译器在这里扮演一些角色。你使用什么卡? NVIDIA或AMD ?.你可以看一看PTX(如果是NVIDIA),看它是否代表相同的代码 – nouveau 2012-02-12 14:00:02
尝试编译内核会带来:'错误:openCL不支持可变长度数组 int copy [width];' – rdoubleui 2012-02-12 20:15:32
可变长度根据规范不支持数组。在1.2规范中,您可以在6.9节中找到它。 – James 2012-02-14 00:23:47