我使用numba库中的装饰器@jit优化了一些python代码。但是,我想指示@jit显式地使用我的GPU设备。出发地:@cuda.jit与@jit之间的差异(target=‘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'])"我读过这样的文章:如何在GPU上运行numba.jit修饰函数?,但是解决方案没有奏效。
我希望得到一些帮助,使@jit(target=' CUDA ')不使用@cuda.jit重写代码,因为最后一个是用Python编写CUDA内核并编译和运行它。
事先非常感谢!
发布于 2022-05-22 20:30:50
AFAIK,CUDA目标不再支持 (它几年前就得到了支持。作为cuda.jit的包装器)。它是[未记录的**](https://numba.readthedocs.io/en/stable/reference/jit-compilation.html)。但是,对于numba.vectorize和numba.guvectorize有这样的参数。在Numba密码里,可以看到有一个名为target_backend的参数,它显然不再使用(?)。有一个参数调用_target,它被读取,但不打算被终端用户直接使用。另外,它最终还是会出现cuda.jit。这部分代码似乎已经死了。
如果您想要编写基于GPU的代码,那么请使用numba.vectorize numba.guvectorize 和numba.guvectorize或 cuda.jit (与第一种代码相比,最后一种代码级别相当低)。
发布于 2022-05-23 04:36:47
我遇到了一个类似的问题,并通过将target改为target_backend而度过了难关
所以,我的装饰师就像@jit(target_backend="cuda")一样
这只是一个对我有用的快速修复,我没有进一步挖掘
https://stackoverflow.com/questions/72340836
复制相似问题