tvm.ir

所有IR变体共用的数据结构。

类:

Attrs

属性节点,主要用于定义运算符的属性。

DictAttrs

字典属性。

EnvFunc

环境函数。

Node

所有IR节点的基类。

SourceName(name)

源位置的标识符。

Span(source_name, line, end_line, column, ...)

指定源代码中的位置。

SequentialSpan(spans)

源跨度的序列

Array

TVM的数组容器。

Map

TVM的映射容器。

BaseExpr

所有表达式的基础类。

GlobalVar(name_hint[, type_annot])

IR中的一个全局变量。

PrimExpr

所有基本表达式的基类。

Range(起始位置[, 结束位置, 范围])

表示TVM中的一个范围。

RelaxExpr

所有非基本表达式的基类。

BaseFunc

所有函数的基类。

CallingConv(value)

可能的调用约定类型。

GlobalInfo

IR中可能出现的所有全局信息的基节点

DummyGlobalInfo()

VDevice([目标设备, 虚拟设备ID, 内存作用域])

IRModule([函数, 属性, 全局信息])

包含函数和类型定义的IRModule。

Op()

IR中的原始运算符。

FuncType(arg_types, ret_type)

函数类型。

PointerType(element_type[, storage_scope])

在底层TIR中使用的指针类型。

PrimType(dtype)

低级IR中的原始数据类型

TupleType(fields)

元组值的类型。

Type

所有类型的基类。

功能:

make_node(type_key, **kwargs)

根据类型键和字段创建一个新的IR节点

assert_structural_equal(lhs, rhs[, ...])

断言左侧(lhs)和右侧(rhs)在结构上彼此相等。

load_json(json_str)

从json_str加载tvm对象。

save_json(node)

将tvm对象保存为JSON字符串。

structural_equal(lhs, rhs[, map_free_vars])

检查lhs和rhs的结构是否相等。

structural_hash(node[, map_free_vars])

计算节点的结构哈希值

register_intrin_lowering(op_name, target, *)

注册算子降级函数

register_op_attr(op_name, attr_key[, value, ...])

通过名称注册一个操作符的属性。

class tvm.ir.Attrs

属性节点,主要用于定义运算符的属性。

用于在Python端注册的函数,如compute、schedule和alter_layout。 Attrs作为这些函数的第一个参数传递。

方法:

list_field_info()

获取字段信息

keys()

获取属性中的名称列表。

get_int_tuple(key)

获取一个键的Python整型元组

get_int(key)

获取键对应的Python整数值

get_str(key)

获取键对应的Python整数值

list_field_info()

获取字段信息

Returns:

infos – 字段信息列表

Return type:

list 属性字段信息列表

keys()

获取属性中的名称列表。

Returns:

keys – 键列表

Return type:

liststr

get_int_tuple(key)

获取一个键的python整型元组

Parameters:

(str)

Returns:

Return type:

Tupleint

get_int(key)

获取键对应的Python整数值

Parameters:

(str)

Returns:

Return type:

int

get_str(key)

获取键对应的Python整数值

Parameters:

(str)

Returns:

Return type:

int

class tvm.ir.DictAttrs

字典属性。

方法:

keys()

获取属性中的名称列表。

get(key[, default])

获取一个带有默认值的元素。

items()

从映射中获取项目。

keys()

获取属性中的名称列表。

Returns:

keys – 键列表

Return type:

liststr

get(key, default=None)

获取一个带有默认值的元素。

items()

从地图中获取项目。

tvm.ir.make_node(type_key, **kwargs)

根据类型键和字段创建一个新的IR节点

Parameters:
  • type_key (str) – 节点的类型键。

  • **kwargs (dict) – 节点的字段。

Returns:

node – 对应的IR节点

Return type:

Node

注意

如果创建的节点是AttrsNode的实例,那么创建函数还会运行属性绑定检查和默认值设置,这些功能由Attrs支持。

示例

以下代码构造了一个IntImm对象

x = tvm.ir.make_node("IntImm", dtype="int32", value=10, span=None)
assert isinstance(x, tvm.tir.IntImm)
assert x.value == 10
class tvm.ir.EnvFunc

环境函数。

这是一个可以通过名称序列化的全局函数对象。

方法:

get(name)

获取静态环境函数

static get(name)

获取一个静态环境函数

Parameters:

name (str) – 函数名称。

class tvm.ir.Node

所有IR节点的基类。

class tvm.ir.SourceName(name)

源位置的标识符。

Parameters:

name (str) – 数据源的名称。

class tvm.ir.Span(source_name, line, end_line, column, end_column)

指定源代码中的位置。

Parameters:
  • source (SourceName) – 源名称。

  • lineno (int) – 行号。

  • col_offset (int) – 该位置的列偏移量。

class tvm.ir.SequentialSpan(spans)

源跨度的序列

这个范围专属于一个表达式,该表达式是在IR转换后从多个表达式中产生的。

Parameters:

spans (Array) – 跨度数组。

tvm.ir.assert_structural_equal(lhs, rhs, map_free_vars=False)

断言左侧(lhs)和右侧(rhs)在结构上彼此相等。

Parameters:
  • lhs (Object) – 左操作数。

  • rhs (Object) – 左操作数。

  • map_free_vars (bool) – 是否将未绑定到任何定义的自由变量映射为彼此相等。

:raises ValueError : 如果断言不成立:

另请参阅

structural_equal

tvm.ir.load_json(json_str) Object

从json_str加载tvm对象。

Parameters:

json_str (str) – JSON字符串

Returns:

node – 已加载的tvm节点。

Return type:

对象

tvm.ir.save_json(node) str

将tvm对象保存为JSON字符串。

Parameters:

node (Object) – 要保存的TVM对象。

Returns:

json_str – 保存的json字符串。

Return type:

str

tvm.ir.structural_equal(lhs, rhs, map_free_vars=False)

检查lhs和rhs的结构是否相等。

结构相等性在IRNodes的有向无环图中递归定义。节点分为两种类型:

  • 图节点:左侧图中的节点只能与右侧图中的一个且唯一一个节点对应映射。

  • 普通节点:相等性递归定义,不受图节点限制。

Vars(tir::Var, relax::Var) 是图节点。

一个变量类型节点(例如tir::Var)可以在满足以下任一条件时,映射为与另一个同类型变量相等:

  • 它们出现在同一个定义点(例如函数参数)。

  • 它们通过same_as关系指向同一个VarNode。

  • 它们出现在同一个使用点,并且map_free_vars被设置为True。

var的规则用于重映射出现在函数参数和let绑定中的变量。

Parameters:
  • lhs (Object) – 左操作数。

  • rhs (Object) – 左操作数。

  • map_free_vars (bool) – 是否应将自由变量(即没有定义位置的变量)映射为彼此相等。

Returns:

result – 比较结果。

Return type:

bool

另请参阅

structural_hash, assert_strucural_equal

tvm.ir.structural_hash(node, map_free_vars=False)

计算节点的结构哈希值

结构哈希值是在IRNodes的有向无环图中递归定义的。 节点分为两种类型:

  • 普通节点:哈希值仅由其内容和类型定义。

  • 图节点:每个图节点将被分配一个唯一的索引,该索引按照首次访问的顺序排列。图节点的哈希值由其内容哈希值和索引组合而成。

structural_hash的设计目的是与structural_equal保持一致。 如果两个节点在结构上彼此相等, 那么它们的结构哈希值(使用相同的map_free_vars选项) 也应该彼此相等。

如果两个节点的结构哈希值相等, 那么这两个节点在结构上极有可能是相等的(除了罕见的哈希值冲突情况)。

Parameters:
  • node (Object) – 需要被哈希化的输入对象。

  • map_free_vars (bool) – 如果map_free_vars设置为true,我们将按照自由变量出现的顺序进行哈希计算。否则,将按照它们在内存中的指针地址进行哈希计算。

Returns:

result – 哈希结果

Return type:

int

另请参阅

structrual_equal

class tvm.ir.Array

TVM的数组容器。

您无需显式创建Array。 通常情况下,在tvm函数调用期间,Python的list和tuple会自动转换为Array。 您可能会在TVM函数调用的返回值中获得Array。

class tvm.ir.Map

TVM的映射容器。

您无需显式创建Map对象。 通常情况下,在tvm函数调用期间,python字典会自动转换为Map。 您可以使用convert方法将dict[Object->Object]转换为Map

方法:

items()

从映射中获取项目

get(key[, default])

获取一个带有默认值的元素。

items()

从映射中获取项目

get(key, default=None)

获取一个带有默认值的元素。

Parameters:
  • key (object) – 属性键。

  • default (object) – 默认对象。

Returns:

value – 结果值。

Return type:

object

class tvm.ir.BaseExpr

所有表达式的基础类。

class tvm.ir.GlobalVar(name_hint: str, type_annot: 类型 | None = None)

IR中的一个全局变量。

GlobalVar用于引用存储在IRModule中的全局函数。

Parameters:

name_hint (str) – 变量的名称。

class tvm.ir.PrimExpr

所有基本表达式的基类。

PrimExpr 用于底层代码优化和整数分析。

class tvm.ir.Range(begin: PrimExpr, end: PrimExpr | None = None, span: Span | None = None)

表示TVM中的一个范围。

您无需显式创建Range范围。 Python列表和元组将在API函数中自动转换为Range。

Parameters:
  • begin (PrimExpr) – 当end为None时表示范围的起始值,否则表示范围的长度。

  • end (可选[PrimExpr]) – 范围的结束值。

  • span (可选[Span]) – 该节点在源代码中的位置。

注意

构造函数创建范围[begin, end) 如果end参数不为None。否则,它将创建[0, begin)

方法:

from_min_extent(min_value, extent[, span])

通过最小值和范围构造一个区间。

static from_min_extent(min_value: PrimExpr, extent: PrimExpr, span: Span | None = None) 范围

通过最小值和范围构造一个区间。

这将构造一个范围 [min_value, min_value + extent)

Parameters:
  • min_value (PrimExpr) – 范围的最小值。

  • extent (PrimExpr) – 该范围的长度。

  • span (可选[Span]) – 该节点在源代码中的位置。

Returns:

rng - 构造的范围。

Return type:

Range

class tvm.ir.RelaxExpr

所有非基本表达式的基类。

属性:

checked_type

获取tvm.relax.Expr的检查类型。

struct_info

获取结构体信息字段

property checked_type

获取tvm.relax.Expr的检查类型。

Returns:

checked_type – 被检查的类型。

Return type:

tvm.ir.Type

property struct_info: StructInfo | None

获取结构体信息字段

Returns:

struct_info – 如果可用的话,显示结构体信息。

Return type:

tvm.relax.StructInfo

class tvm.ir.BaseFunc

所有函数的基类。

属性:

attrs

返回函数的attrs成员。

方法:

with_attr(attr_key_or_dict[, attr_value])

创建函数的新副本并更新属性。

with_attrs(attr_map)

复制IRModule并为其添加给定的属性映射。

without_attr(attr_key)

创建一个不带提供键属性的函数新副本。

property attrs

返回函数的attrs成员。

with_attr(attr_key_or_dict, attr_value=None) BaseFunc

创建函数的新副本并更新属性。

Parameters:
  • attr_key_or_dict (Union[str, dict]) – 要使用的属性键或包含多个键值对的字典。

  • attr_value (Object) – 新的属性值。

Returns:

func – 函数的新副本

Return type:

BaseFunc

with_attrs(attr_map: DictAttrs | Dict[str, Object]) BaseFunc

复制IRModule并为其添加给定的属性映射。 :param attr_map: 属性映射 :type attr_map: Union[DictAttrs, Dict[str, Object]]

Returns:

func – 函数的新副本

Return type:

BaseFunc

without_attr(attr_key: str) BaseFunc

创建一个不带提供键属性的函数新副本。

Parameters:

attr_key (str) – 要从属性对中删除的属性键。

Returns:

func – 函数的新副本

Return type:

BaseFunc

class tvm.ir.CallingConv(value)

可能的调用约定类型。

class tvm.ir.GlobalInfo

IR中可能出现的所有全局信息的基节点

方法:

same_as(other)

使用结构相等性进行重载。

same_as(other)

使用结构相等性进行重载。

class tvm.ir.DummyGlobalInfo
class tvm.ir.VDevice(target=None, vdevice_id: int = 0, memory_scope: str = 'global')
class tvm.ir.IRModule(functions=None, attrs=None, global_infos=None)

包含函数和类型定义的IRModule。

IRModule是贯穿整个技术栈所有IR转换的基本单元。

Parameters:

functions (可选[dict].) – 全局变量到BaseFunc的映射

方法:

functions_items()

按字母顺序获取self.functions.items()中的项目。

update(other)

将其他模块中的函数插入到当前模块中。

update_func(var, func)

更新模块中对应全局变量的函数。

update_global_info(name, global_info)

更新模块中的全局信息

get_global_var(name)

通过名称获取函数中的全局变量。

get_global_vars()

收集此模块中定义的所有全局变量。

replace_global_vars(replacements)

替换模块中的GlobalVar实例

from_expr(expr[, 函数])

从独立表达式构建模块。

get_attr(attr_key)

获取IRModule属性。

with_attr(attr_key, attr_value)

复制IRModule并为其添加一个属性。

without_attr(attr_key)

复制IRModule并移除一个属性键及其关联值。

with_attrs(attr_map)

复制IRModule并为其添加给定的属性映射。

functions_items()

按字母顺序获取self.functions.items()中的项目。

Returns:

items – 函数项。

Return type:

列表[元组[全局变量, 函数]]

update(other)

将其他模块中的函数插入到当前模块中。

Parameters:

其他 (IRModule) – 要合并到当前模块中的模块。

update_func(var, func)

更新模块中对应全局变量的函数。

Parameters:
update_global_info(name, global_info)

更新模块中的全局信息

Parameters:
  • name (str) – 全局信息的名称。

  • global_info (List[GlobalInfo]) – 需要更新的全局信息。

get_global_var(name)

通过名称获取函数中的全局变量。

Parameters:

name (str) – 全局变量的名称。

Returns:

global_var – 映射到name的全局变量。

Return type:

GlobalVar

Raises:

如果找不到对应的全局变量,则抛出tvm.error.TVMError错误

get_global_vars()

收集此模块中定义的所有全局变量。

Returns:

global_vars – 全局变量数组。

Return type:

Array[GlobalVar]

replace_global_vars(replacements: Dict[str | GlobalVar, str | GlobalVar]) IRModule

替换模块中的GlobalVar实例

替换IRModule中的GlobalVars。由于IRModule可能包含对GlobalVar的内部引用(无论是在TIR还是在Relax中),因此在替换或重命名GlobalVar时都应使用此方法。

Parameters:

replacements (Dict[Union[str, _expr.GlobalVar], Union[str, _expr.GlobalVar]]) – 一个字典,其中每个键是要被替换的GlobalVar,对应的值是用来替换它的GlobalVar。

Returns:

更新后的模块

Return type:

IRModule

static from_expr(expr, functions=None)

从独立表达式构建模块。

Parameters:
  • expr (RelaxExpr) – 起始表达式

  • global_funcs (可选[dict]) - 全局变量到函数定义的映射

Returns:

mod – 一个包含传入定义的模块, 其中expr被设置为入口点 (如有必要会包装成函数)

Return type:

模块

get_attr(attr_key)

获取IRModule属性。

Parameters:

attr_key (str) – 属性键。

Returns:

attr_value – 属性值

Return type:

任意

with_attr(attr_key, attr_value)

复制IRModule并为其添加一个属性。

Parameters:
  • attr_key (str) – 属性键。

  • attr_value (Object) – 新的属性值。

Returns:

mod – 带有该属性的IRModule新副本

Return type:

IRModule

without_attr(attr_key: str) IRModule

复制IRModule并移除指定的属性键及其关联值。 :param attr_key: 属性键。 :type attr_key: str

Returns:

mod – 不包含该属性的IRModule新副本

Return type:

IRModule

with_attrs(attr_map: DictAttrs | Dict[str, Object]) IRModule

复制IRModule并为其添加给定的属性映射。 :param attr_map: 属性映射 :type attr_map: Union[DictAttrs, Dict[str, Object]]

Returns:

mod – 带有该属性的IRModule新副本

Return type:

IRModule

class tvm.ir.Op

IR中的原始运算符。

方法:

get(op_name)

获取给定名称对应的操作

get_attr(attr_name)

获取关于该运算符的附加属性。

has_attr(attr_name)

检查操作符是否具有额外属性。

set_attr(attr_name, value[, plevel])

设置关于操作符的属性。

reset_attr(attr_name)

重置关于该操作符的属性。

add_argument(name, type, description)

向函数添加参数信息。

set_support_level(level)

设置操作的支持级别。

set_num_inputs(n)

设置操作的支持级别。

set_attrs_type_key(key)

设置操作(op)的属性类型键。

list_op_names()

列出操作注册表中的所有操作名称。

static get(op_name)

获取给定名称对应的操作

Parameters:

op_name (str) – 操作符名称

Returns:

op – 对应名称的操作符

Return type:

Op

get_attr(attr_name)

获取关于该运算符的附加属性。

Parameters:

attr_name (str) – 属性名称。

Returns:

value – 属性值

Return type:

object

has_attr(attr_name)

检查操作符是否具有额外属性。

Parameters:

attr_name (str) – 属性名称。

Returns:

value – 该操作符是否具有额外属性

Return type:

bool

set_attr(attr_name, value, plevel=10)

设置关于操作符的属性。

Parameters:
  • attr_name (str) – 属性名称

  • value (object) – 属性值

  • plevel (int) - 优先级级别

reset_attr(attr_name)

重置关于该操作符的属性。

Parameters:

attr_name (str) – 属性名称

add_argument(name, type, description)

向函数添加参数信息。

Parameters:
  • name (str) – 参数名称。

  • type (str) – 参数类型。

  • description (str) – 参数描述。

set_support_level(level)

设置操作的支持级别。

Parameters:

level (int) – 支持级别。

set_num_inputs(n)

设置操作的支持级别。

Parameters:

n (int) – 输入的数字。

set_attrs_type_key(key)

设置操作(op)的属性类型键。

Parameters:

key (str) – 类型键。

static list_op_names()

列出操作注册表中的所有操作名称。

Returns:

value – 已注册的操作名称

Return type:

列表[str]

tvm.ir.register_intrin_lowering(op_name, target, *, f=None, level=10)

注册算子降级函数

Parameters:
  • op_name (str) – 操作名称

  • target (str) – 给定内部降级函数的目标字符串

  • f (function, optional) – 要注册的函数。

  • level (int) – 优先级级别

Returns:

fregister – 如果未指定f,则注册操作降级函数。

Return type:

函数

tvm.ir.register_op_attr(op_name, attr_key, value=None, level=10)

通过名称注册一个操作符的属性。

Parameters:
  • op_name (str) – 操作符名称

  • attr_key (str) – 属性名称。

  • value (object, optional) – 要设置的值

  • level (int, optional) – 优先级

Returns:

fregister - 如果未指定值,则注册函数。

Return type:

函数

class tvm.ir.FuncType(arg_types, ret_type)

函数类型。

函数类型包含一组类型参数用于定义泛型函数, 一组我们暂时忽略的类型约束, 一系列参数类型,以及一个返回类型。

Parameters:
class tvm.ir.PointerType(element_type, storage_scope='')

在底层TIR中使用的指针类型。

Parameters:
  • element_type (tvm.ir.Type) – 指针元素的类型。

  • storage_scope (str) – 指针所指向的存储范围。

class tvm.ir.PrimType(dtype)

低级IR中的原始数据类型

Parameters:

dtype (str) – 运行时数据类型与primtype相关。

class tvm.ir.TupleType(fields)

元组值的类型。

Parameters:

fields (List[Type]) – 元组中的字段

class tvm.ir.Type

所有类型的基类。

方法:

same_as(other)

通过引用相等性比较两个TVM类型。

same_as(other)

通过引用相等性比较两个TVM类型。