[翻译]混合前端开发人员指南— tvm 0.6.0文档
# 混合前端开发人员指南
如果您是开发人员:
- 尝试编写一些TVM尚不支持的模式,请参考“混合前端语言参考”。
功能
软件仿真
在软件仿真中,最有趣的是装饰器tvm.hybrid.script
。这个装饰器可以帮助两件事:- 导入运行时变量
- 根据传递的参数重载函数
如果我错了,请纠正我:我相信如何实施1.是危险的,但是我别无选择。我所做的是将这些名称添加到python dict中,
func.__global__
并在调用func
完成后将这些名称清除。重载很简单:修饰器检查参数的类型并确定应实际调用的函数。### 后端编译 编译是一个很大的模块,您可以查看python/tvm/hybrid/var_decl.py
和python/tvm/hybrid/parser.py
了解更多详细信息。第一阶段确定用法,或更准确地说是每个变量的声明,第二阶段确定实际的IR生成。### 属性 到目前为止,仅支持张量的shape属性。您可以查看python/tvm/hybrid/parser.p
中的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中,这些是枚举,它们是被动形式()。在这里,我们使用活动形式(active form)来注释循环,因为它们已经准备好运行。### 变量 因为HalideIR中没有变量。### 数学内部函数 到目前为止,支持这些数学内部函数,log
,exp
,sigmoid
,tanh
,power
,和popcount
。数学内在函数将由装饰器导入。除popcount
和sigmoid外,大多数内在函数都是通过库实现的,我手动实现了它们。