Cuda @jit(device=True)返回';DeviceFunctionTemplate';对象不可调用

Cuda @jit(device=True)返回';DeviceFunctionTemplate';对象不可调用,cuda,numba,Cuda,Numba,我正在研究数学方法,为了减少执行时间,我使用了一个修饰符 @numba.jit(nopython=True,nogil=True,cache=True) def analize_tick(数据:np.array,索引:int,结果信号:np.array)->无: ##我在这里执行一个操作,然后返回结果 结果[0]=1 它工作正常,但当我将装饰器从@numba.jit(nopython=True,nogil=True,cache=True)更改为@cuda.jit(device=True)时,我

我正在研究数学方法,为了减少执行时间,我使用了一个修饰符

@numba.jit(nopython=True,nogil=True,cache=True)
def analize_tick(数据:np.array,索引:int,结果信号:np.array)->无:
##我在这里执行一个操作,然后返回结果
结果[0]=1
它工作正常,但当我将装饰器从
@numba.jit(nopython=True,nogil=True,cache=True)
更改为
@cuda.jit(device=True)
时,我得到了一个错误:“DeviceFunctionTemplate”对象不可调用 你能告诉我如何解决这个问题吗? 顺便说一句,该方法接收三个参数:

  • numpy二维浮点数组
  • 整数索引
  • numpy返回结果的一维整数数组

更新以添加代码示例:

导入单元测试
作为pd进口熊猫
将numpy作为np导入
进口麻木
来自numba import cuda
@jit(nopython=True,nogil=True,cache=True)
#@cuda.jit(device=True)
def计算(数据:np.array,索引:int,选项:np.array,结果信号:np.array)->无:
i=数据[0]
b=数据[1]
结果_信号[0]=i+b
@jit(nopython=True,nogil=True,cache=True)
#@cuda.jit(device=True)
每个_的定义(数据:np.array,选项:np.array,结果:np.array)->无:
对于索引,枚举中的r(数据):
计算(r、指数、选项、结果)
#打印(结果[0])
cuda_类测试(unittest.TestCase):
def测试编号呼叫(自我):
df=pd.DataFrame([[1,1],[2,2]],列=['c0','c1'])
data=df.to_numpy()
结果=np.数组([0],dtype=float)
options=np.array([0],dtype=float)
对于范围(0、10、1)内的西格玛:
选项[0]=西格玛
对于每个(数据、选项、结果)
你能告诉我如何解决这个问题吗

没有办法解决这个问题。你想做的事是不可能的

当您装饰这样的功能时:

@cuda.jit(device=True)
def for_each(data:np.array,options:np.array, result:np.array) -> None:            
    for index, r in enumerate(data):        
        calculate(r, index, options, result)

你是。您没有在CUDA内核或设备函数中调用它。无法更改此行为,这是语言的一个限制。

如果将其转换为设备函数,则只能从另一个
@cuda.jit
函数内部调用。如果您发布了一个完整的示例,而不是它的描述,那么会简单得多。你认为重要或不重要的都不是必要的帮助你需要什么hi@talonmies谢谢你的回答,我刚刚在帖子中添加了代码,并尽可能简单地做了。谢谢你的回答-我想我明白了