【问题标题】:get wrong result when caculating on GPU (python3.5+numba+CUDA8.0)在 GPU 上计算时得到错误的结果(python3.5+numba+CUDA 8.0)
【发布时间】:2017-04-01 05:33:46
【问题描述】:

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

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 说像这样依赖内核中的打印语句是危险的。

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

    ...

@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])

                     ...

【问题讨论】:

  • 我曾经告诉过你,像这样依赖内核中的打印语句是危险的。 Stack Overflow 不是免费的调试服务。请不要把它当成一个人来对待
  • numba有什么好的调试方法吗?我应该把值传给 CPU 打印看看是否正确?
  • 谢谢。 pdb 很难使用。与它的交互是困难的。也许我只是新手。我会多学习的。

标签: python cuda numba numba-pro


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多