程序不稳定

我的程序怎么每次运行都会出现不同的结果?难道是我的kernel程序访问到了超出范围的地址空间?
各位遇到过这种情况吗?怎么解决的啊?

顶顶。。。。。。。。。

具体的代码什么的贴出来,否则大家也帮不了你

终于找到了出错的 kernel 函数,但是却始终找不到这几行代码哪儿错了:
global void
rowsubtract(cuFloatComplex *A, int k)

{
int bx=blockIdx.x;
int tx=threadIdx.x;
if (tx==0&&bx>0)

{
A[(k+bx)W+k]=cuCdivf( A[(k+bx)W+k] , A[k(W+1)] ); //计算第k列中的l,A大小为 WW

[b] __syncthreads();
}

[/b]
if (bx>0&&tx>0)
A[(bx+k)*W+tx+k]=cuCsubf(A[(bx+k)W+tx+k],cuCmulf(A[kW+k+tx],A[(k+bx)*W+k]));
// bx+k 为行号,tx+k 为列号
}

这是LU分解紧凑格式程序的一部分,

lu分解紧凑格式:
[attach]920[/attach]

矩阵为W阶, 主程序中调用为:
for(int k=0;k<W-1;k++)
{
rowexchange<<< 1,W-k >>>(d_A,k);//采取列选主元,此程序作用是找到列中最大值所在行并与第一行交换
rowsubtract<<< W-k, W-k >>>(d_A,k);// 此程序作用是实现第k行以下的各行元素与第k行元素相减

}

我把每次循环过后的矩阵值都拷到内存中检查了,列选主元和换行总能实现,所以第一个函数没错,问题出在第二个函数。当循环到第k次(每次运行时k可能都不一样,一般都是循环到十几次的时候),部分block中的某几个相同线程号的线程计算结果开始出错。比如K=15,此时矩阵阶数降为W-15,本次计算完成后,第17、19行中的第46,47个元素是错的(且值不确定),应该是说明 block 2和 block 4中的线程31、32号线程算错了吧?