无法识别的选项:{'target'} 使用@jit(target="cuda")

Unrecognized options: {'target'} when using @jit(target="cuda")

我使用 numba 库中的装饰器 @jit 优化了一些 python 代码。但是,我想指示@jit 明确使用我的 GPU 设备。来自:,我明白我需要使用@jit(target="cuda") 来完成。

我试图通过做这样的事情来做到这一点:

from numba import jit, cuda

@jit(target='cuda')  # The code runs normally without (target='cuda')
def function(args):
    # some code

我收到以下错误:

KeyError: "Unrecognized options: {'target'}. Known options are dict_keys(['_nrt', 'boundscheck', 'debug', 'error_model', 'fastmath', 'forceinline', 'forceobj', 'inline', 'looplift', 'no_cfunc_wrapper', 'no_cpython_wrapper', 'no_rewrites', 'nogil', 'nopython', 'parallel', 'target_backend'])"

我读过这个:但是解决方案没有用。

我希望能得到一些帮助,使 @jit(target='cuda') 无需使用 @cuda.jit 重写代码即可工作,因为最后一个是用于在 Python 中编写 CUDA 内核并编译 运行 它。

非常感谢!

AFAIK,CUDA 目标不再支持 jitnjit(无论如何最后 it was supported few years ago as a wrapper to cuda.jit). It is not documented. There is however such parameter for numba.vectorize and numba.guvectorize. In the Numba code, one can see that there is a parameter called target_backend which is obviously not used (anymore?). There is a parameter call _target which is read but not meant to be used directly by end-users. Additionally, it calls cuda.jit。这部分代码似乎已经死了。

如果要编写GPU-based代码,那么请使用numba.vectorizenumba.guvectorizecuda.jit(与前两个相比,最后一个 low-level。

我遇到了类似的问题,通过将 target 更改为 target_backend

来解决

所以,我的装饰器就像 @jit(target_backend="cuda")

这只是对我有用的quick-fix,我没有进一步挖掘