原文: http://numba.pydata.org/numba-doc/latest/developer/custom_pipeline.html
警告
自定义管道功能仅供专家使用。修改编译器行为可能会使 numba 源代码中的内部假设无效。
对于寻找扩展或修改编译器行为的方法的库开发人员,可以通过继承numba.compiler.BasePipeline
来定义自定义编译器管道。默认的 numba 管道被定义为numba.compiler.Pipeline
,实现了.define_pipelines()
方法,它增加了 nopython-mode ,_ 对象模式 _ 和 _ 解释模式 _ 管道。这三条管道分别通过.define_nopython_pipeline
,.define_objectmode_pipeline
和.define_interpreted_pipeline
方法在BasePipeline
中定义。
要使用BasePipeline
的自定义子类,请将其作为@jit
关键字参数提供给@jit
和@generated_jit
装饰器。通过这样做,自定义管道的效果仅限于正在装饰的功能。
以下是BasePipeline
类的实现者可用的常用方法:
class numba.compiler.BasePipeline(typingctx, targetctx, library, args, return_type, flags, locals)
存储和管理编译器管道的状态
add_cleanup_stage(pm)
添加清理阶段以删除中间结果。
add_lowering_stage(pm)
为 nopython-mode 添加降低(代码生成)阶段
add_optimization_stage(pm)
添加优化阶段。
add_pre_typing_stage(pm)
添加类型推断之前的所有阶段。当前阶段包含类型不可知的重写过程。
add_preprocessing_stage(pm)
添加分析字节码的预处理阶段以准备 Numba IR。
add_typing_stage(pm)
添加 nopython 模式所需的类型推断阶段。
define_interpreted_pipeline(pm, name='interp')
将解释模式(回退)管道添加到管道管理器
define_nopython_pipeline(pm, name='nopython')
将 nopython-mode 管道添加到管道管理器
define_objectmode_pipeline(pm, name='object')
将对象模式管道添加到管道管理器