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

Calling other functions from within a @cuda.jit numba function

我有一个添加了@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 的新手,所以请原谅我理解这里的一些基本错误。

How does Numba's cuda.jit handle this?

没有。如果你尝试

,你会得到一个错误

Is the function inline during compilation?

没有

Does bar need to be jitted?

是的。需要用@cuda.jit(device=True)

装饰

If so, it's going to call other threads and I find that is overkill for a computation over 3 elements only...

没有。设备功能和内核不是一回事。编译并发出设备函数的代码,即 "single threaded".

I also think a cuda kernel cannot call other cuda kernels as well.

可以,但 Numba 目前不支持。