我正在处理这个简单的代码片段顺便说一句,我用 0 初始化了 c 数组的所有元素。
#pragma acc kernels copyin(a[0:n],b[0:n]), copyout(c[0:n])
{
c[0]=11;
for(i=0; i<n; i++) {
if(c[i]==11) c[i]=123;
c[i] = a[i] + b[i];
}
}
当我查看生成的小码时,我看到在主机代码段(CPU)上分配了 c[0]。这意味着迭代适用于旧的 c 值(初始化值为 0)。因此迭代从未进入 c[i]=123 赋值。我的意思是代码返回了错误的结果:(你遇到过类似的事情吗?