混合前端开发人员指南
如果您是开发人员:
1.正在尝试编写一些TVM尚不支持的基本模式,也许“ 混合前端语言参考”对您来说是一个更好的地方。
2.想知道这个模块的实现细节,您就在这里!
特点
软件仿真
在软件仿真中,最有趣的是装饰器【tvm.hybrid.script
】。这个装饰器可以帮助两件事:
-
导入运行时变量
-
根据传递的参数重载函数
如果我错了,请纠正我:我相信如何实现1.是危险的,但是我别无选择。我所做的是将这些名称添加到python字典【func.__global__
】中,并在调用func
完成后将这些名称清除。
重载很简单:修饰器检查参数的类型并确定实际应调用的函数。
后端编译
编译是一个很大的模块,您可以查看【python/tvm/hybrid/var_decl.py
】和【python/tvm/hybrid/parser.py
】 了解更多详细信息。第一阶段确定用法,或更准确地说是每个变量的声明,第二阶段确定实际的IR生成。
属性
到目前为止,仅支持张量的shape属性。您可以【python/tvm/hybrid/parser.py
】中查看更多【visit_Subscript
】的详细信息。这是一个骇人的解决方案,我只检查下标时的属性。
循环
在HalideIR,循环总共有4种类型:【serial
】,【unrolled
】,【parallel
】,和【vectorized
】。
注意
与HalideIR中的不同,在【loop_type(a, b)
】中【a
】是起点,并且【b
】是迭代的行程数。这里【loop_type(a, b)
】表示【[a, b)
】。因此,将其降低到HalideIR时,我们需要执行【start, extent = a, b - a
】
注意
在HalideIR中,这些是枚举,它们是被动形式。在这里,我们使用活动形式来注释循环,因为它们已经准备好运行。
变量
由于中没有变量HalideIR
,因此所有可变变量都将降为大小为1的数组。它将变量的第一个存储作为其声明。
数学内在
到目前为止,这些数学内部函数,【log
】,【exp
】,【sigmoid
】,【tanh
】,【power
】和【popcount
】,都支持。数学内在函数将由装饰器导入。除【popcount
】和【sigmoid
】外,大多数内在函数都是借用的库实现。我手动实现了它们。