Numbapro를 사용하여 크기가 41724 인 두 배열의 내용을 제곱하고 서로 더하고 다른 배열에 저장하는 간단한 커널을 작성하는 코드 조각이 있습니다. 모든 배열은 같은 크기이고 float32입니다. 코드는 다음과 같습니다 :Numbapro jit 계산 결과가 잘못됨
import numpy as np
from numba import *
from numbapro import cuda
@cuda.jit('void(float32[:],float32[:],float32[:])')
def square_add(a,b,c):
tx = cuda.threadIdx.x
bx = cuda.blockIdx.x
bw = cuda.blockDim.x
i = tx + bx * bw
#Since the length of a is 41724 and the total
#threads is 41*1024 = 41984, this check is necessary
if (i>len(a)):
return
else:
c[i] = a[i]*a[i] + b[i]*b[i]
a = np.array(range(0,41724),dtype = np.float32)
b = np.array(range(41724,83448),dtype=np.float32)
c = np.zeros(shape=(1,41724),dtype=np.float32)
d_a = cuda.to_device(a)
d_b = cuda.to_device(b)
d_c = cuda.to_device(c,copy=False)
#Launch the kernel; Gridsize = (1,41),Blocksize=(1,1024)
square_add[(1,41),(1,1024)](d_a,d_b,d_c)
c = d_c.copy_to_host()
print c
print len(c[0])
나는 작업 (배열 C)의 결과를 인쇄 할 때 내가 점점 오전 값은 내가 파이썬 터미널에서 동일한 일을 할 때에 비해 완전히 다른 것입니다. 내가 뭘 잘못하고 있는지 모르겠다.
감사합니다 ... 나는 numbapro를 사용할 계획을 포기 했으므로 대신 CUDA를 사용했습니다. 어느 시점에서 시도해보십시오. :) – Ravin