一个常见的编译失败原因(尤其是nopython模式)就是类型推导失败,numba不能确定代码中所有变量的类型。
如果传入一个元组和一个数字,numba不能得到数字和元组求和的结果,就会触发编译报错:
原因:变量类型不统一
举例:
c = 10
d_c = cuda.to_device(c) #尝试将一个int常数传入GPU中,d_c的类型类似于矩阵
·····
@cuda.jit
def func_gpu(d_c,·····):····if row % d_c == 0:#尝试将一个常数与一个矩阵比较,类型不对
后来自己将需要传输的int型变量定义成(1,1)型的矩阵
c=10
c_arr = np.zeros(1, dtype=np.uint8) #常数转矩阵
c_arr[0] = c #赋值
d_c = cuda.to_device(c_arr) #传矩阵
·····
@cuda.jit
def func_gpu(d_c,·····):····if row % d_c[0] == 0:#类型匹配,不会报错