python - 从 @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 的新手,所以如果在这里理解有一些根本性的错误,请原谅我。
解决方案
Numba 的 cuda.jit 如何处理这个问题?
它没有。如果你尝试,你会得到一个错误
编译期间函数是否内联?
不。
bar需要jitted吗?
是的。它需要装饰@cuda.jit(device=True)
如果是这样,它将调用其他线程,我发现这对于仅超过 3 个元素的计算来说太过分了......
不,设备功能和内核不是一回事。设备功能的代码被编译和发出,它是“单线程”的。
我也认为 cuda 内核也不能调用其他 cuda 内核。
它可以,但 Numba 目前不支持它。
推荐阅读
- javascript - 如果数组在对象中并且对象在下一个数组中,如何在数组中的对象中获取值?
- amazon-web-services - 如何在 Terraform 的 EMR 集群中将 JSON 文件分配为 STEP?
- javascript - 将给定的百分比金额减去一个值
- excel - 创建三个 csv 文件的 VBA 宏
- f# - 我是否正确使用 Deedle Series.map?
- python - 从标头中删除索引并重新索引数据以从 0 开始
- sql - 在连接中使用 t-sql REPLACE() 是否安全?
- sql - 我们可以使用 SELECT 作为 REGEXP_LIKE 的参数吗?
- typescript - 使用 karma 和 bazel 运行打字稿测试时如何测量覆盖率?
- python - “str”对象没有属性“as_widget”