배열의 서로 다른 부분을 합치고 싶습니다. 코드를 실행합니다. 인쇄 된 것으로부터 두 가지 문제점을 발견 할 수 있습니다.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])
...
커널 안에있는 인쇄 문에 의존하는 것이 위험하다는 것을 이미 한 번 말씀 드렸습니다. [SO]는 무료 디버깅 서비스가 아닙니다. 제발 하나처럼 취급하지 마십시오 – talonmies
numba가 디버깅하는 좋은 방법이 있습니까? 그것이 옳은지 확인하기 위해 인쇄용 값을 CPU로 전송해야합니까? – glen
http://numba.pydata.org/numba-doc/dev/cuda/simulator.html# – talonmies