2017-04-01 63 views
-1

我想獲得數組的不同部分的總和。 我運行我的代碼。並從打印的內容中發現兩個問題。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]) 

        ... 
+0

我已經告訴過你,像這樣的內核中依賴打印語句是危險的。 [SO]不是免費的調試服務。請不要把它當作一個 – talonmies

+0

是否有一個好的方法讓numba進行調試?我應該將值轉移到CPU進行打印以查看它是否正確? – glen

+0

http://numba.pydata.org/numba-doc/dev/cuda/simulator.html# – talonmies

回答

1

正如@talonmies所說,在內核中打印語句不是調試的好選擇。如果有人有同樣的問題,this documentation是有幫助的,你應該學習的更多的是pdb,尤其是調試器命令,如'p','c'。