7.10。关于自定义管道的注意事项

原文: 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类的实现者可用的常用方法:

  1. class numba.compiler.BasePipeline(typingctx, targetctx, library, args, return_type, flags, locals)

存储和管理编译器管道的状态

  1. add_cleanup_stage(pm)

添加清理阶段以删除中间结果。

  1. add_lowering_stage(pm)

为 nopython-mode 添加降低(代码生成)阶段

  1. add_optimization_stage(pm)

添加优化阶段。

  1. add_pre_typing_stage(pm)

添加类型推断之前的所有阶段。当前阶段包含类型不可知的重写过程。

  1. add_preprocessing_stage(pm)

添加分析字节码的预处理阶段以准备 Numba IR。

  1. add_typing_stage(pm)

添加 nopython 模式所需的类型推断阶段。

  1. define_interpreted_pipeline(pm, name='interp')

将解释模式(回退)管道添加到管道管理器

  1. define_nopython_pipeline(pm, name='nopython')

将 nopython-mode 管道添加到管道管理器

  1. define_objectmode_pipeline(pm, name='object')

将对象模式管道添加到管道管理器