Как разместить массивы внутри ядра, используя numba?

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

@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: Ошибка в конвейере режима nopython (шаг: внешний интерфейс nopython) Неизвестный атрибут 'device_array' типа Module ()

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

Всего 1 ответ


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

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


Есть идеи?

10000