配列のさまざまな部分の合計を取得したい。コードを実行します。印刷されたものから2つの問題を見つけます。
プロ1:
ここで詳しく説明します。解決しました。多分それは本当の問題ではありません。
プロ2:
私のコードでは、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])
...