从@cuda.jit numba 函数中调用其他函数

Rou*_*cha 2 python jit cuda numba

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

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

def bar(x):
  # Some routine
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

tal*_*ies 5

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

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

编译期间函数是否内联?

不。

酒吧需要jitt吗?

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

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

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

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

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