我想獲得數組的不同部分的總和。 我運行我的代碼。並從打印的內容中發現兩個問題。GPU上計算得到錯誤的結果(python3.5 + numba + CUDA8.0)
PRO1:
詳細介紹here。它已經解決了。也許這不是一個真正的問題。
PRO2:
在我的代碼,我紅粉不同的值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])
...
我已經告訴過你,像這樣的內核中依賴打印語句是危險的。 [SO]不是免費的調試服務。請不要把它當作一個 – talonmies
是否有一個好的方法讓numba進行調試?我應該將值轉移到CPU進行打印以查看它是否正確? – glen
http://numba.pydata.org/numba-doc/dev/cuda/simulator.html# – talonmies