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>>>()