有几个与此类似的问题,但在这种情况下,它有点奇怪;NVCC 3.1 不喜欢这样,但 3.2 和 4.0RC 喜欢;
float xtmp[MAT1];
for (i=0; i<MAT1; i++){
xtmp[i]=x[p[i]]; //value that should be here
}
其中 p 通过引用传递给来自...的函数 (int *p)
int p_pivot[MAT1],q_pivot[MAT1];
为了添加一些上下文,在 p 到达“顶部”函数之前,它们被填充(为了清楚起见,我尽可能多地删除不相关的代码)
...
for (i=0;i<MAT1;i++){
...
p_pivot[i]=q_pivot[i]=i
...
}
...
除此之外,枢轴上的唯一操作是具有整数临时值的 3 步交换。
毕竟 p_pivot 通过 (&p_pivot[0]) 传递给“顶部”函数
对于任何寻找更多细节的人,代码在这里,唯一需要在 3.2/4.0 之间切换到更早的更改是更改 cudaDeviceSynchronise(); 到 cudaThreadSynchronize();。这是我肮脏肮脏的实验代码所以请不要评判我!:D
如前所述,以上所有功能在更高版本的 NVCC 中都可以正常工作,我正在努力将它们放到有问题的机器上,但我很想看看我缺少什么。
一定是导致问题的数组查找索引,但我不明白为什么?