2017-04-01 6 views
-1

配列の異なる部分の合計を取得したいと思います。 私のコードを実行します。印刷されたものから2つの問題を見つけます。GPUでcaculatingすると間違った結果になる(python3.5 + numba + CUDA8.0)

PRO1:詳細hereに説明

。それは解決されました。たぶんそれは本当の問題ではない。

PRO2:私のコードで

、Iは[1,2] SBUF [2,2] SBUF、[0,2] SBUFする異なる値をgived及び[0,3]、SBUFを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]) 

        ... 
+0

このようなカーネル内の印刷文に頼ることは危険であると私はすでに言いました。 [SO]は無料のデバッグサービスではありません。 – talonmies

+0

numbaがデバッグする良い方法はありますか?それが正しいかどうかを確認するために、値をCPUに転送する必要がありますか? – glen

+0

http://numba.pydata.org/numba-doc/dev/cuda/simulator.html# – talonmies

答えて

1

@talonmiesによると、カーネル内のステートメントの印刷は、デバッグには適していません。誰かが同じ問題を抱えている場合は、this documentationが役に立ちます。さらに詳しく知りたい方はpdbです。特に、 'p'、 'c'などのデバッガコマンドがあります。