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)操作。
还有集成编译使用,参见上边的参考文档。