在GPU上计算时得到错误的结果(python3.5 + numba + CUDA8.0)

时间:2017-04-01 05:33:47

标签: python cuda numba numba-pro

我想得到数组不同部分的总和。 我运行我的代码。并从打印的内容中找出两个问题。

pro1:

详细描述here。它已经解决了。也许这不是一个真正的问题。

pro2:

在我的代码中,我给了sbuf [0,2],sbuf [1,2],sbuf [2,2]和sbuf [0,3],sbuf [1,3],sbuf [2]不同的值。 ,3]。

但是发现在cuda.syncthreads()之后,sbuf [0,2]和sbuf [0,3],sbuf [1,2]和sbuf [1,3]之间的值相同,sbuf [2, 2]和sbuf [2,3]。

它直接导致Xi_s,Xi1_s和Yi_s的值错误。

根据内核中打印的内容,这些是我的猜测。

@talonmies说依赖像这样的内核中的print语句很危险。

所以我想知道它是否有一种有用的方法来调试我的代码,而不是在内核中打印语句。

    ...

@cuda.jit
def calcu_T(D, T):
  ...

                    if bx==1 and tx==1:
                        print('5,c_x,c_y,L,c_index,bx,tx,ty,sbuf[0,ty],sbuf[1,ty],sbuf[2,ty],',c_x,',',c_y,',',L,',',c_index,',',bx,',',tx,',',ty,',',sbuf[0,ty],',',sbuf[1,ty],',',sbuf[2,ty])

                    cuda.syncthreads()

                    if bx==1 and tx==1:
                        print('1,c_x,c_y,L,c_index,bx,tx,ty,sbuf[0,ty],sbuf[1,ty],sbuf[2,ty],',c_x,',',c_y,',',L,',',c_index,',',bx,',',tx,',',ty,',',sbuf[0,ty],',',sbuf[1,ty],',',sbuf[2,ty])

                     ...

1 个答案:

答案 0 :(得分:1)

正如@talonmies所说,在内核中打印语句不是调试的好选择。如果有人遇到同样的问题,this documentation会有所帮助,您应该学习的更多内容是pdb,尤其是调试器命令,例如' p',' c&#39 ;