首页 > 解决方案 > 从 @cuda.jit numba 函数中调用其他函数

问题描述

我有一个添加了@cuda.jit 装饰器的函数。

@cuda.jit
def foo(x):
   bar(x[0])
   bar(x[1])
   bar(x[2])

def bar(x):
  # Some routine

我不想将 bar 复制到 foo 的主体中,因为这会使代码变得笨拙和丑陋。

Numba 的 cuda.jit 如何处理这个问题?编译期间函数是否内联?bar需要jitted吗?

如果是这样,它将调用其他线程,我发现这对于仅超过 3 个元素的计算来说太过分了......

我也认为 cuda 内核也不能调用其他 cuda 内核。

我是 numba/cuda 的新手,所以如果在这里理解有一些根本性的错误,请原谅我。

标签: pythoncudajitnumba

解决方案


Numba 的 cuda.jit 如何处理这个问题?

它没有。如果你尝试,你会得到一个错误

编译期间函数是否内联?

不。

bar需要jitted吗?

是的。它需要装饰@cuda.jit(device=True)

如果是这样,它将调用其他线程,我发现这对于仅超过 3 个元素的计算来说太过分了......

不,设备功能和内核不是一回事。设备功能的代码被编译和发出,它是“单线程”的。

我也认为 cuda 内核也不能调用其他 cuda 内核。

它可以,但 Numba 目前不支持它。


推荐阅读