numba-Ahead of time

参考文档:https://numba.pydata.org/numba-doc/latest/user/pycc.html

Compiling code ahead of time(运行之前编译代码)

虽然 numnb 主要是 Just-In-Time(运行时)编译,但也提供了 Ahead-Of-Tiem(提前编译)的工具。

优点:
  • AOT 编译提供了一个不依赖 numba 的编译扩展模块,它可以运行在没有 numba 的机器上(需要 numpy)
  • 没有运行时编译的开销(但请参阅 @jit cache 选项),也没有导入 numba 的开销
限制
  • AOT 编译只允许常规函数,不支持 ufuncs
  • 必须显式指定函数签名
  • 每个导出的函数只能有一个签名(但可以导出几个不同签名下的不同名称)
  • AOT 编译生产通用的 CPU 架构系列(例如 X86-64),而 JIT 编译生成适用于你当前 CPU 的优化代码

用法

独立使用
from numba.pycc import CC

cc = CC("my_module")


@cc.export("multf", "f8(f8,f8)")
@cc.export("multi", "i4(i4, i4)")
def mult(a, b):
    return a * b


@cc.export("square", "f8(f8)")
def square(a):
    return a**2


if __name__ == "__main__":
    cc.compile()

运行此代码,他将会生成一个名为“my_module”的扩展模块。根据用的实际的平台,它的名称可能是my_module.so, my_module.pyd, my_module.cpython-34m.so 等。
编译需要下载 Visual Studio ,如果编译有问题参阅:https://blog.csdn.net/ShuqiaoS/article/details/111053159

生成的模块有三个函数,multf, multi 和 square 。multi 是对32位整型(i4)操作,multf 和 square 是对双精度浮点数(f8)操作。

还有集成编译使用,参见上边的参考文档。

posted @ 2024-05-12 22:34  一枚码农  阅读(37)  评论(0编辑  收藏  举报