Hybrid 前端开发指南
导航
Hybrid 前端开发指南#
如果你是开发者:
1. who is trying writing some preliminary patterns that have not been supported by TVM yet, maybe Hybrid 前端语言参考 is a better place for you.
想知道这个模块的实现细节,就在这里!
特性#
软件仿真#
在软件仿真中,最有趣的是装饰器 tvm.te.hybrid.script
。此装饰师帮助了两件事:
导入运行时变量
根据传递的参数重载函数
如果我错了请纠正我:我相信:1. 执行是危险的,但我别无选择。我所做的就是将这些名字添加到 Python 字典 func.__global__
中,并在调用 func
完成后,这些名称将被清除。
重载很简单:装饰器检查参数的类型,并确定应该实际调用哪个函数。
后端编译#
编译是很大的模块,你可以查看 python/tvm/te/hybrid/
了解更多细节。第一阶段决定使用,或者更准确地说,每个变量的声明,第二阶段实际生成 IR。
属性#
到目前为止,只支持张量的 shape 属性。你可以在 python/tvm/te/hybrid/parser.py
中查看 visit_Subscript
了解更多细节。这是很糟糕的解决方案,我只检查下标时的属性。
循环#
在 HalideIR 中,循环总共有 4 种类型:serial
、 unrolled
、 parallel
和 vectorized
。
备注
不像在 HalideIR 中那样,在 loop_type(a, b)
中,a
是起点,b
是迭代次数。这里 loop_type(a, b)
表示 [a, b)
。因此,当 lower 到 HalideIR 时,则为 start, extent = a, b - a
备注
在 HalideIR,这些是枚举,它们是 passive 形式。这里我们使用 active 形式来注释循环,因为它们已经准备好运行了。
变量#
因为 HalideIR
中没有变量,所有的可变变量都将 lower 大小为 1 的数组。它将变量的第一个存储区作为它的声明。
数学指令#
到目前为止,这些数学指令,log
, exp
, sigmoid
, tanh
, power
和 popcount
是支持的。装饰器将导入数学指令。除了 popcount
和 sigmoid
外,大多数指令都被库的实现所借用。我手动执行它们。
Casting#
可以把值通过使用关键字 uint8
, uint16
uint32
, uint64
, int8
, int16
, int32
, int64
, float16
, float32
, float64
cast。