首页 > 解决方案 > 如何使用 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_kforcetemp但是使用上面的代码我得到以下错误:

TypingError:在 nopython 模式管道中失败(步骤:nopython 前端)Module() 类型的未知属性“device_array”

文件“”,第 117 行:def forcecudutiling(p_num,d_num,r,force): for k in range(tid,p_num,threadsInGrid): r_k=cuda.device_array((d_num,p_num))

标签: pythoncudanumba

解决方案


我正在尝试在内核内部的 for 循环中分配一些数组

你不能那样做。Numba CUDA 内核不支持内存分配或数组创建 。


推荐阅读