2017-04-01 14 views
-1

배열의 서로 다른 부분을 합치고 싶습니다. 코드를 실행합니다. 인쇄 된 것으로부터 두 가지 문제점을 발견 할 수 있습니다.GPU에서 caculating 할 때 잘못된 결과가 발생합니다 (python3.5 + numba + CUDA8.0)

pro1 :

here 상세히 설명하면. 그것은 해결되었습니다. 아마 그것은 진짜 문제가 아닙니다.

PRO2 : 코드 내에서

, 난 [2,2] 및 SBUF [0,3] SBUF [1,2] SBUF [0,2] SBUF 상이한 값 gived, 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는 커널 내부의 인쇄 문에 의존하는 것이 위험하다고 전했다.

커널 안에 문장을 출력하는 대신 내 코드를 디버깅하는 유용한 방법이 있는지 알고 싶습니다.

... 

@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'와 같은 디버거 명령을 배워야합니다.