tvm.instrument

跨IR变体的通用过程插装。

class tvm.instrument.PassInstrument

一个pass instrument的实现。

使用时,用户类可以直接继承PassInstrument,或者使用pass_instrument()包装器。无论哪种方式,都可以定义enter_pass_ctxexit_pass_ctxshould_runrun_before_passrun_after_pass方法来调整仪器的行为。有关每个方法的更多信息,请参阅此类定义中的无操作实现。

enter_pass_ctx()

在进入被监测的上下文时调用。

Return type:

exit_pass_ctx()

在退出被监测的上下文时调用。

Return type:

should_run(mod, info)

判断是否运行该过程。

在检测上下文处于活动状态时,每次运行pass时都会调用一次。

Parameters:
Returns:

should_run – 设为True表示执行该pass,设为False表示跳过该pass。

Return type:

bool

run_before_pass(mod, info)

在通行运行之前进行检测。

在检测上下文处于活动状态时,每次运行过程都会调用一次。

Parameters:
Return type:

run_after_pass(mod, info)

在通过运行后进行检测。

在检测上下文处于活动状态时,每次运行pass时都会调用一次。

Parameters:
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")