0
我在OpenACC中做了一个非常简单的向量添加内核。我想知道这是否与我使用的编译器有关(与OpenCL一起使用)有问题,因为我遇到问题,似乎将数据从设备复制回主机。所有的结果都是正确的但是结果[0]。例如。下面的代码:OpenACC边界问题
for (i=0; i<VEC_SIZE; i++) {
a[i] = i;
b[i] = VEC_SIZE-i;
result[i]=0;
}
#pragma acc kernels copyin(a,b) copy(result)
for (i=0; i<VEC_SIZE; i++) {
result[i] = a[i]+b[i];
}
// verify result
for (i=0; i<VEC_SIZE; i++) {
if ((a[i] + b[i]) != result[i]) {
fprintf(stderr, "Incorrect results id %d val: %d \n", i, result[i]);
}
}
返回如下:
Incorrect results id 0 val: 0
这意味着所有的结果,但在索引0是正确的,它好像reuslt索引零时,无法从设备复制了一个。
这是一个编译器/运行时错误还是我错过了我的编码方面的东西?
该代码看起来对我很好。我围绕你在这里展示的内容构建了一个完整的代码和测试用例,并使用PGI 14.9工具对其进行编译,并且它似乎工作正常。例子是[here](http://pastebin.com/jXKGWVAC) – 2014-11-08 16:41:25
太棒了,它看起来非常像我的accULL中的一个bug。非常感谢您的确认。如果你想,你可以发布并答复我可以接受。 – AzaraT 2014-11-08 16:53:32
也许更好,当你发现修复是什么的时候,回来回答这个问题。这对未来的读者会更有用。或者也许别人会来为你排序。你正在使用最新版本的accull?它似乎是0.3,但似乎你也可以从[主分支](https://bitbucket.org/ruyman/accull/)下载,它可能会给你“0.3.1”似乎还有一个[accull支持邮件列表](https://groups.google.com/forum/#!forum/accull)。 – 2014-11-08 17:18:24