tvm.instrument
跨IR变体的通用过程插装。
- class tvm.instrument.PassInstrument
一个pass instrument的实现。
使用时,用户类可以直接继承PassInstrument,或者使用
pass_instrument()包装器。无论哪种方式,都可以定义enter_pass_ctx、exit_pass_ctx、should_run、run_before_pass和run_after_pass方法来调整仪器的行为。有关每个方法的更多信息,请参阅此类定义中的无操作实现。- enter_pass_ctx()
在进入被监测的上下文时调用。
- Return type:
无
- exit_pass_ctx()
在退出被监测的上下文时调用。
- Return type:
无
- should_run(mod, info)
判断是否运行该过程。
在检测上下文处于活动状态时,每次运行pass时都会调用一次。
- Parameters:
mod (tvm.ir.module.IRModule) – 正在运行优化过程的模块。
info (tvm.transform.PassInfo) – 该转换过程的信息。
- Returns:
should_run – 设为True表示执行该pass,设为False表示跳过该pass。
- Return type:
- run_before_pass(mod, info)
在通行运行之前进行检测。
在检测上下文处于活动状态时,每次运行过程都会调用一次。
- Parameters:
mod (tvm.ir.module.IRModule) – 正在运行优化过程的模块。
info (tvm.transform.PassInfo) – 该pass的信息。
- Return type:
无
- run_after_pass(mod, info)
在通过运行后进行检测。
在检测上下文处于活动状态时,每次运行pass时都会调用一次。
- Parameters:
mod (tvm.ir.module.IRModule) – 正在运行优化过程的模块。
info (tvm.transform.PassInfo) – 该转换过程的信息。
- Return type:
无
- class tvm.instrument.PassPrintingInstrument(print_before_pass_names, print_after_pass_names)
一个用于打印的pass工具,可以在命名pass的每个元素之前或之后打印。
- class tvm.instrument.PassTimingInstrument
一个用于创建在C++中实现的计时工具的封装器
- static render()
获取渲染后的时间分析结果 :returns: string – 时间分析结果的渲染字符串 :rtype: string
示例
timing_inst = PassTimingInstrument() with tvm.transform.PassContext(instruments=[timing_inst]): relax_mod = relax.transform.FuseOps()(relax_mod) # before exiting the context, get profile results. profiles = timing_inst.render()
- class tvm.instrument.PrintAfterAll(*args, **kwargs)
仅在执行完pass后打印pass名称和IR。
- class tvm.instrument.PrintBeforeAll(*args, **kwargs)
打印通行证名称、IR(中间表示),仅在通行证执行前显示。
- tvm.instrument.pass_instrument(pi_cls=None)
装饰一个pass instrument。
- Parameters:
pi_class (class) – 仪器类别。请参阅下方示例。
示例
@tvm.instrument.pass_instrument class SkipPass: def __init__(self, skip_pass_name): self.skip_pass_name = skip_pass_name # Uncomment to customize # def enter_pass_ctx(self): # pass # Uncomment to customize # def exit_pass_ctx(self): # pass # If pass name contains keyword, skip it by return False. (return True: not skip) def should_run(self, mod, pass_info) if self.skip_pass_name in pass_info.name: return False return True # Uncomment to customize # def run_before_pass(self, mod, pass_info): # pass # Uncomment to customize # def run_after_pass(self, mod, pass_info): # pass skip_annotate = SkipPass("AnnotateSpans") with tvm.transform.PassContext(instruments=[skip_annotate]): tvm.compile(mod, "llvm")