跳到主要内容
版本:0.21.0

tvm.instrument

IR 变体的通用 pass 工具。

classtvm.instrument.PassInstrument

pass 工具的实现。

要使用 PassInstrument,用户类可以直接从 PassInstrument 继承子类,也可以应用pass_instrument()包装器。无论哪种情况,都可以定义 enter_pass_ctx、exit_pass_ctx、should_run、 run_before_pass 和 run_after_pass 方法来调整工具的行为。有关每个方法的更多信息,请参阅此类定义中的无操作实现。

enter_pass_ctx()

进入检测上下文时调用。

  • 返回类型: 无。

exit_pass_ctx()

退出检测上下文时调用。

  • 返回类型: 无。

should_run(mod, info)

确定是否运行 pass。

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

run_before_pass(mod, info)

pass 运行前的工具。

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

run_after_pass(mod, info)

pass 后的工具运行。

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

class tvm.instrument.PassPrintingInstrument(print_before_pass_names, print_after_pass_names)

一个 pass 工具,用于在制定 pass 的每个步骤前后打印 IR。

classtvm.instrument.PassTimingInstrument

用 C++ 实现的用于创建 pass 时间工具的包装器

static render()

检索渲染的时间配置文件结果:返回: string – 时间分析结果的渲染字符串:返回类型:string

示例

timing_inst = PassTimingInstrument()
with tvm.transform.PassContext(instruments=[timing_inst]):
relax_mod = relax.transform.FuseOps()(relax_mod)
# 在退出前得到分析结果
profiles = timing_inst.render()

classtvm.instrument.PrintAfterAll(*args, ***kwargs)

仅在 Pass 执行后才打印 Pass 的名称、IR。

classtvm.instrument.PrintBeforeAll(*args, ***kwargs)

仅在执行 pass 之前打印 pass 的名称、IR。

tvm.instrument.pass_instrument(pi_cls=None)

装饰 pass 工具。

  • 参数:pi_class (class) – 工具类,见下例。

示例

@tvm.instrument.pass_instrument
class SkipPass:
def __init__(self, skip_pass_name):
self.skip_pass_name = skip_pass_name

# 取消注释以实现自定义。
# def enter_pass_ctx(self):
# pass

# 取消注释以实现自定义。
# def exit_pass_ctx(self):
# pass

# 如果Pass名称包含关键词则跳过(返回False),否则不跳过(返回True)。
def should_run(self, mod, pass_info)
if self.skip_pass_name in pass_info.name:
return False
return True

# 取消注释以实现自定义。
# def run_before_pass(self, mod, pass_info):
# pass

# 取消注释以实现自定义。
# def run_after_pass(self, mod, pass_info):
# pass

skip_annotate = SkipPass("AnnotateSpans")
with tvm.transform.PassContext(instruments=[skip_annotate]):
tvm.compile(mod, "llvm")