为什么这个numba.cuda查找表实现失败?

时间:2018-03-04 06:27:38

标签: python cuda numba

我试图实现一个转换,它在某个阶段有一个查找表< 1K大小。在我看来,它似乎不应该对现代显卡造成问题。

但是下面的代码失败并出现未知错误:

from numba import cuda, vectorize
import numpy as np

tmp = np.random.uniform( 0, 100, 1000000 ).astype(np.int16)
tmp_device = cuda.to_device( tmp )

lut = np.arange(100).astype(np.float32) * 2.5
lut_device = cuda.to_device(lut)

@cuda.jit(device=True)
def lookup(x):
    return lut[x]

@vectorize("float32(int16)", target="cuda")
def test_lookup(x):
    return lookup(x)

test_lookup(tmp_device).copy_to_host() # <-- fails with cuMemAlloc returning UNKNOWN_CUDA_ERROR

我在反对numba.cuda的精神做什么?

即使用以下简化代码替换lookup也会导致相同的错误:

@cuda.jit(device=True)
def lookup(x):
    return x + lut[1]

一旦发生此错误,我基本上无法再使用cuda上下文了。例如,通过cuda.to_device分配新数组会产生:

numba.cuda.cudadrv.driver.CudaAPIError: [719] Call to cuMemAlloc results in UNKNOWN_CUDA_ERROR

运行于:4.9.0-5-amd64#1 SMP Debian 4.9.65-3 + deb9u2(2018-01-04)

驱动程序版本:390.25

numba:0.33.0

0 个答案:

没有答案