Как разместить массивы внутри ядра, используя numba? - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь выделить несколько массивов внутри for l oop внутри ядра. Ядро выглядит так:

@cuda.jit
def forcecudatiling(p_num,d_num,r,force):
    threadsInBlock=cuda.blockDim.x
    threadsInGrid=threadsInBlock*cuda.gridDim.x
    tid=cuda.threadIdx.x + cuda.blockIdx.x*cuda.blockDim.x
    tiles=p_num/cuda.blockDim.x + 1
    shared_p_mx = cuda.shared.array(0,dtype=np.float32)
    shared_p_my = cuda.shared.array(0,dtype=np.float32)
    alpha=(1.5)
    rho=(1.0)
    beta=(1.5*(1.0+alpha))
    for k in range(tid,p_num,threadsInGrid):
        r_k=cuda.device_array((d_num,p_num))
        forcetemp=cuda.device_array((d_num,p_num))
        r_k[0,k]=r[0,k]
        r_k[1,k]=r[1,k]
        forcetemp[0,k]=0.0
        forcetemp[1,k]=0.0

Массивы, которые я пытаюсь выделить: r_k и forcetemp, но с приведенным выше кодом я получаю следующую ошибку:

TypingError: Ошибка в конвейере без python (шаг: внешний интерфейс nopython) Неизвестный атрибут 'device_array' типа Module ()

File "", строка 117: принудительное принудительное определение def (p_num, d_num, r, сила): для k в диапазоне (tid, p_num, threadsInGrid): r_k = cuda.device_array ((d_num, p_num))

1 Ответ

1 голос
/ 28 марта 2020

Я пытаюсь выделить несколько массивов внутри для l oop, который находится внутри ядра

Вы не можете этого сделать. Выделение памяти или создание массива не поддерживается в ядрах Numba CUDA.

...