tvm.ir
所有IR变体共用的数据结构。
类:
属性节点,主要用于定义运算符的属性。 |
|
字典属性。 |
|
环境函数。 |
|
所有IR节点的基类。 |
|
|
源位置的标识符。 |
|
指定源代码中的位置。 |
|
源跨度的序列 |
TVM的数组容器。 |
|
TVM的映射容器。 |
|
所有表达式的基础类。 |
|
|
IR中的一个全局变量。 |
所有基本表达式的基类。 |
|
|
表示TVM中的一个范围。 |
所有非基本表达式的基类。 |
|
所有函数的基类。 |
|
|
可能的调用约定类型。 |
IR中可能出现的所有全局信息的基节点 |
|
|
|
|
包含函数和类型定义的IRModule。 |
|
IR中的原始运算符。 |
|
函数类型。 |
|
在底层TIR中使用的指针类型。 |
|
低级IR中的原始数据类型 |
|
元组值的类型。 |
所有类型的基类。 |
功能:
|
根据类型键和字段创建一个新的IR节点 |
|
断言左侧(lhs)和右侧(rhs)在结构上彼此相等。 |
|
从json_str加载tvm对象。 |
|
将tvm对象保存为JSON字符串。 |
|
检查lhs和rhs的结构是否相等。 |
|
计算节点的结构哈希值 |
|
注册算子降级函数 |
|
通过名称注册一个操作符的属性。 |
- class tvm.ir.Attrs
属性节点,主要用于定义运算符的属性。
用于在Python端注册的函数,如compute、schedule和alter_layout。 Attrs作为这些函数的第一个参数传递。
方法:
获取字段信息
keys()获取属性中的名称列表。
get_int_tuple(key)获取一个键的Python整型元组
get_int(key)获取键对应的Python整数值
get_str(key)获取键对应的Python整数值
- class tvm.ir.DictAttrs
字典属性。
方法:
keys()获取属性中的名称列表。
get(key[, default])获取一个带有默认值的元素。
items()从映射中获取项目。
- get(key, default=None)
获取一个带有默认值的元素。
- items()
从地图中获取项目。
- tvm.ir.make_node(type_key, **kwargs)
根据类型键和字段创建一个新的IR节点
- Parameters:
- Returns:
node – 对应的IR节点
- Return type:
注意
如果创建的节点是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.Node
所有IR节点的基类。
- 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 : 如果断言不成立:
另请参阅
- 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:
- 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:
另请参阅
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:
另请参阅
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()
从映射中获取项目
- 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, end) 如果end参数不为None。否则,它将创建[0, begin)。
方法:
from_min_extent(min_value, extent[, span])通过最小值和范围构造一个区间。
- class tvm.ir.RelaxExpr
所有非基本表达式的基类。
属性:
获取tvm.relax.Expr的检查类型。
获取结构体信息字段
- property checked_type
获取tvm.relax.Expr的检查类型。
- Returns:
checked_type – 被检查的类型。
- Return type:
- property struct_info: StructInfo | None
获取结构体信息字段
- Returns:
struct_info – 如果可用的话,显示结构体信息。
- Return type:
- class tvm.ir.BaseFunc
所有函数的基类。
属性:
返回函数的attrs成员。
方法:
with_attr(attr_key_or_dict[, attr_value])创建函数的新副本并更新属性。
with_attrs(attr_map)复制IRModule并为其添加给定的属性映射。
without_attr(attr_key)创建一个不带提供键属性的函数新副本。
- property attrs
返回函数的attrs成员。
- class tvm.ir.CallingConv(value)
可能的调用约定类型。
- class tvm.ir.GlobalInfo
IR中可能出现的所有全局信息的基节点
方法:
same_as(other)使用结构相等性进行重载。
- same_as(other)
使用结构相等性进行重载。
- class tvm.ir.DummyGlobalInfo
- class tvm.ir.IRModule(functions=None, attrs=None, global_infos=None)
包含函数和类型定义的IRModule。
IRModule是贯穿整个技术栈所有IR转换的基本单元。
- Parameters:
functions (可选[dict].) – 全局变量到BaseFunc的映射
方法:
按字母顺序获取self.functions.items()中的项目。
update(other)将其他模块中的函数插入到当前模块中。
update_func(var, func)更新模块中对应全局变量的函数。
update_global_info(name, global_info)更新模块中的全局信息
get_global_var(name)通过名称获取函数中的全局变量。
收集此模块中定义的所有全局变量。
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()中的项目。
- update_func(var, func)
更新模块中对应全局变量的函数。
- Parameters:
var (GlobalVar) – 全局变量。
func (tvm.ir.BaseFunc) – 要插入的函数。
- update_global_info(name, global_info)
更新模块中的全局信息
- Parameters:
name (str) – 全局信息的名称。
global_info (List[GlobalInfo]) – 需要更新的全局信息。
- get_global_var(name)
通过名称获取函数中的全局变量。
- replace_global_vars(replacements: Dict[str | GlobalVar, str | GlobalVar]) IRModule
替换模块中的GlobalVar实例
替换IRModule中的GlobalVars。由于IRModule可能包含对GlobalVar的内部引用(无论是在TIR还是在Relax中),因此在替换或重命名GlobalVar时都应使用此方法。
- static from_expr(expr, functions=None)
从独立表达式构建模块。
- get_attr(attr_key)
获取IRModule属性。
- Parameters:
attr_key (str) – 属性键。
- Returns:
attr_value – 属性值
- Return type:
任意
- with_attr(attr_key, attr_value)
复制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_attrs_type_key(key)设置操作(op)的属性类型键。
列出操作注册表中的所有操作名称。
- static get(op_name)
获取给定名称对应的操作
- get_attr(attr_name)
获取关于该运算符的附加属性。
- has_attr(attr_name)
检查操作符是否具有额外属性。
- set_attr(attr_name, value, plevel=10)
设置关于操作符的属性。
- add_argument(name, type, description)
向函数添加参数信息。
- tvm.ir.register_intrin_lowering(op_name, target, *, f=None, level=10)
注册算子降级函数
- tvm.ir.register_op_attr(op_name, attr_key, value=None, level=10)
通过名称注册一个操作符的属性。
- class tvm.ir.FuncType(arg_types, ret_type)
函数类型。
函数类型包含一组类型参数用于定义泛型函数, 一组我们暂时忽略的类型约束, 一系列参数类型,以及一个返回类型。
- Parameters:
arg_types (List[tvm.ir.Type]) – 参数类型
ret_type (tvm.ir.Type) – 返回值类型。
- class tvm.ir.PointerType(element_type, storage_scope='')
在底层TIR中使用的指针类型。
- Parameters:
element_type (tvm.ir.Type) – 指针元素的类型。
storage_scope (str) – 指针所指向的存储范围。