numba用户手册8. 提前编译代码AOT

numba用户手册

1.numba基础

2.@jit

3.使用自动并行化@jit

4.性能提升

5.创建ufunc

6.@jitclass

7.@cfunc

8.提前编译代码AOT

9.numba线程

10.调试

提前编译代码AOT



--------------------------------------------------------------------------------------------------------------  



6.1.说明:

1)Numba的主要用例是即时编译,还提供提前编译(AOT)的功能.

2)AOT编译生成一个不依赖于Numba已编译扩展模块:可在未装Numba的计算机上分发该模块(需Numpy)

3)运行时没有编译开销



6.2.局限性

1)AOT编译仅允许使用常规功能,而不能使用ufuncs;必须明确指定功能签名.

2)每个导出的函数只能有一个签名(但是您可以使用不同的名称导出几个不同的签名)

3) AOT编译为CPU体系结构系列生成通用代码,JIT编译为特定CPU模型生成优化的代码

--------------------------------------------------------------------------------------------------------------   

# 实例1:



from numba.pycc import CC



cc = CC('my_module')

cc.verbose = True                   # 取消注释以下行,以打印出编译步骤



@cc.export('multf', 'f8(f8, f8)')   # 双精度浮点

@cc.export('multi', 'i4(i4, i4)')   # 32位整数

def mult(a, b):

    return a * b



@cc.export('square', 'f8(f8)')

def square(a):

    return a ** 2



if __name__ == "__main__":          # 生成名为的扩展模块 my_module.pyd

    cc.compile()



测试:

import my_module

my_module.multi(3, 4)#12

my_module.square(1.414)             # 1.9993959999999997



--------------------------------------------------------------------------------------------------------------  

6.2.Distutils集成

# setup.py用distutils或setuptools 将扩展模块编译步骤集成到脚本中:

# 实例2:

from distutils.core import setup

from source_module import cc



setup(..., ext_modules=[cc.distutils_extension()])#source_module是定义模块cc对象.



--------------------------------------------------------------------------------------------------------------  



6.3.签名语法# 导出的签名的语法与@jit 装饰器中的语法相同.

# 实例3:

@cc.export('centdiff_1d', 'f8[:](f8[:], f8)')#'(f8[:], f8)'省略返回类型由Numba推断出来

def centdiff_1d(u, dx):             #导出在一维数组上二阶差

    D = np.empty_like(u)

    D[0] = 0

    D[-1] = 0

    for i in range(1, len(D) - 1):

        D[i] = (u[i+1] - 2 * u[i] + u[i-1]) / dx**2

    return D

--------------------------------------------------------------------------------------------------------------   

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值