从 @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 目前不支持。
我有一个添加了@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 目前不支持。