-1

配列のさまざまな部分の合計を取得したい。コードを実行します。印刷されたものから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])

                     ...
4

1 に答える 1