0

cuda fortran をビルドしていますが、奇妙な動作が発生します。私のコードがこのように実行される理由がよくわかりません。助けていただければ幸いです。

値 0 が割り当てられることはなく、ループでさえ境界を越えて実行されるようです。

ループの後に if 条件を入れようとしましたが、どちらも役に立ちませんでした。ご協力ありがとうございました

    real, shared :: s_d_aaa_adk(0:15,0:15)
    real, shared :: s_d_bbb_adk(0:15,0:15)
    real, shared :: s_d_ccc_adk(0:15,0:15)

    d_k = (blockIdx%x-1)
    s_d_j = threadIdx%x-1
    s_d_l = threadIdx%y-1   

    if(d_k == kmax-1)then
        s_d_aaa_adk(s_d_j,s_d_l)  = 0 
        s_d_bbb_adk(s_d_j,s_d_l) = 0
        s_d_ccc_adk(s_d_j,s_d_l)  = 0       
    endif

    do d_k = 0, kmax-2              
        s_d_bbb_adk(s_d_j,s_d_l) = d_bbb(s_d_j,d_l,d_k+1)
        s_d_ccc_adk(s_d_j,s_d_l)  = d_ccc(d_j,s_d_l,d_k+1) 
        s_d_aaa_adk(s_d_j,s_d_l) = d_aaa(d_j,s_d_l,d_k+1)               
    end do  `

すべてのグローバル メモリ配列のサイズを (16,16, kmax) に設定し、グリッドを (128,1,1)、ブロックを (16,16,1) に設定し、カーネルを次のように起動します。 testkernell<<<grid,block>>>()

4

1 に答える 1