0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TVM中将计算算符分成四种

电子设计 来源:电子设计 作者:电子设计 2022-02-08 14:44 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:安平博,Xilinx高级工程师;来源:AI加速微信公众号

算符融合将多个计算单元揉进一个计算核中进行,减少了中间数据的搬移,节省了计算时间。TVM中将计算算符分成四种:

1 injective。一一映射函数,比如加法,点乘等。

2 reduction。输入到输出具有降维性质的,比如sum。

3 complex-out。这是计算比较复杂的,比如卷积运算等。

4 opaque。无法被融合的算符,比如sort。

根据以上对算符的不同类型,TVM提供了三种融合规则:

pIYBAGAJ2T6AJeJJAADW3l6UdT0832.png

从一定角度看,这种融合实际上是数据计算pipeline化,即两次计算中间数据不再经历store-load的过程,而是直接给到下一个计算单元完成计算。

在走入fuse ops代码之前,还需要了解一些算法基础知识。算符融合中应用了支配树算法。在一个有向无环图中,对于一个节点n来说,从初始节点s出发到达n的所有路径都经历一个节点m,那么m就是n的支配点。而距离n最近的支配点被称作立即支配点。以r为树根,将所有立即支配点按照支配关系连接起来就形成了支配树。立即后支配点是从一个点n出发所有到终止节点的路径中通过的最近节点,形成的支配树是后支配树。

在DAG中,对于一个点,所有能到达它的点在支配树中的LCA,就是它支配树中的父亲。为什么算符融合要建立在后支配树的基础上呢?我猜测可能是因为对于两个可融合算符在DAG中位置分为两种,一种是父子关系,那么可以直接执行算符融合算法;另外一种是它们之间是后支配关系。对于具有后支配关系的两个节点(n->m),就要判断未来路径上的节点是否都能够和点m发生融合,如果可以,那么n也可以和m发生融合。比如下图:

o4YBAGAJ2XyAGjlUAAAaksTA-qU713.png

Conv2d要和elemwise add融合,必须判断它的三个op是否能和elemwise add融合。

TVM中融合流程分为三步:

1 遍历relay树,建立DAG用于后支配树分析;

2 建立后支配树;

3 应用算符融合算法。

一 建立DAG图

算符融合代码在src/relay/transforms/fuse_ops.cc中。其中算符融合也应用在常量折叠中。

首先TVM中通过如下代码来遍历relay树结构并建立DAG图。

pIYBAGAJ2buADAxoAACiH4i61bc319.png

o4YBAGAJ2hCAXqd5AAKMwZogBVY140.png

VisitExpr可以递归的调用在类IndexedforwardGraph中定义的VisitExpr_函数,通过深度优先搜索遍历relay树,并且建立DAG图。深度优先搜索是从exit节点作为根节点反向搜锁的,因此搜索树是一个后序搜索树。Outputs中保存了一个节点的输入的边,在构建后序支配树会通过这些输入边求取LCA。那么在这个搜索树基础上应用支配树算法,就能够得到一个后序支配树了。在这个类中针对不同节点类型重写visitExpr_函数,节点类型有FunctionNode,ConstantNode, CallNode, TuppleNode等。我们来看CallNode的访问函数定义:

pIYBAGAJ2lmARVsVAAbKmwPUr8I233.png

在最后还会递归调用ExprVisitor::VisitExpr_函数,最终将深度优先搜索到的节点按照叶节点起始顺序一次加入DAG图中。只有ConstantNode的访问函数中不再调用VisitExpr_,因为常量节点应该不存在叶节点了。在callNode中会将其输入加入到DAG中,同时遍历和输入以及其op连接的节点,ExprVisitor中对CallNode访问函数定义为:

o4YBAGAJ2peAYpq5AACTWGic2PA585.png

因为ExprVisitor是被IndexForwardGraph继承的,而VisitExpr_是虚拟函数,this就会指向IndexForwardGraph实例,最终就会调用这个类中定义的VisitExpr_函数,实现递归的遍历relay树。

这里要关注一下OpPatternKind,它定义了算子类型,是不同融合算法使用的依据。其定义在include/tvm/relay/op_attr_types.h文件中。

pIYBAGAJ2tuAdZhAAAHp6B7gjc0360.png

二 建立后序支配树

接下来看后序支配树的构建。构建函数是PostDom。因为根节点(DAG图的出口)在post_dfs_order中最后,所以从根节点开始寻找每个节点出点的LCA,这个LCA就是后序支配点。

o4YBAGAJ2xqAM6QfAADdIrgDoKQ847.png

GetNode函数是获得支配点,构建支配树。在GetNode中,首先初始化根节点,然后求每个节点的输入节点的LCA,即是这个节点的支配点。

pIYBAGAJ21mAScbsAAEpUSdPj2c136.png

LeastComonAncestor函数中主要代码是:

pIYBAGAJ25mABK65AAF2UY5KmQs700.png

通过两两求节点的LCA,来求取所有节点的LCA。程序会将计算图中的末节点深度设置为1。然后向上逐层增加,那么LCA的共同祖先是相同的,深度也一定是一致。遍历所有的节点,就得到一个后向支配树。节点的pattern指向他的LCA。在计算支配点的pattern的时候,会依据pattern的定义,选择pattern值最大的作为LCA的pattern。这块不是太深入理解。可能是其定义的从最小值到最大值pattern可以向下进行融合,比如kElemWise=0, kInjective=2, 那么前者就能融合到KInjective中。

三 融合

完成了DAG和postDominator tree构建后,就开始融合操作。TVM中定义了group结构体,用于表示融合后的图结构。Group结构体如下:

pIYBAGAJ29eAK44AAAEOJLVDA3c904.png

如果某些算符可以融合,那么就通过这个结构体中的parent,master_ref将这些节点建立连接关系。Group首先进行初始化和DAG相同的图。然后分别遍历dag,postDominator tree,以及group图中节点,来判断算符是否能被融合。Dag中和postDom中对应相同index的节点分别是被支配点和支配点。主要融合函数是以下两个函数:

pIYBAGAJ3BaAGxgUAAD5TKkTU2I760.png

pIYBAGAJ3F2ATjJUAAPdJjrvDa0392.png

在runFuse中,有几种情况是不进行算符融合的:

1 算符类型是Kopaque的。

2 该节点不存在支配点。

3 能够融合的节点超过了一定数量。

融合操作算法基本上是考察当前节点到其支配点所有路径上的节点是否都符合融合规则,如果符合就进行融合,不符合就不融合。函数CheckPath就是用于考察src到sink路径是否能够融合的。

融合分成了三个phase,每个phase处理不同可融合类型。这里我没有深入研究。当判断支配树的前后节点可以融合后,就通过函数commitFuse执行融合操作。

完成融合之后,会遍历节点创建新的graph。

审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TVM
    TVM
    +关注

    关注

    0

    文章

    19

    浏览量

    3926
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    WTK6900FC鼾声识别芯片在四种助眠场景中的应用

    WTK6900FC鼾声识别芯片在四种助眠场景中的应用 “跟你说个搞笑的事情,我刚才午睡的时候被我自己的呼噜声吵醒了...”这是真实发生在身边的事情。 ​ 过去对于打呼噜这件事情,大家的态度就是“累了
    的头像 发表于 12-02 16:40 429次阅读
    WTK6900FC鼾声识别芯片在<b class='flag-5'>四种</b>助眠场景中的应用

    一图看懂绿电直连的四种玩法

    通过 “总览框架 + 分模式图解” 的形式,用可视化逻辑拆解绿电直连的四种核心模式,涵盖每种模式的核心特征、适用场景、参与主体三大关键信息,帮你快速区分不同 “玩法” 的差异与适配性。
    的头像 发表于 10-15 10:18 747次阅读
    一图看懂绿电直连的<b class='flag-5'>四种</b>玩法

    从入门到精通:基于开源代码的BLE四种模式开发详解

    通过分析BLE低功耗蓝牙的四种核心工作模式,结合可下载、可修改的开放源码,本教程为开发者提供一套系统、实用的开发学习路径。 BLE(Bluetooth Low Energy): 也称为
    的头像 发表于 10-09 18:00 233次阅读
    从入门到精通:基于开源代码的BLE<b class='flag-5'>四种</b>模式开发详解

    全网最全CSA3412,BCT4340,VL162,MCU/ USB3.1 正反插10G bps四种解决方案

    CSA3412,BCT4340,VL162,MCU/ USB3.1 全网最全正反插10G bps四种解决方案
    的头像 发表于 09-25 03:06 417次阅读
    全网最全CSA3412,BCT4340,VL162,MCU/ USB3.1 正反插10G bps<b class='flag-5'>四种</b>解决方案

    SC、LC、FC和ST四种类型中哪类价格最贵

    在SC、LC、FC和ST四种类型的光纤跳线中,FC类型的光纤跳线通常价格相对较高,具体分析如下: FC类型的光纤跳线: 特点:采用金属螺纹套筒连接,具有较高的稳定性和抗拉强度,适用于高振动环境或需要
    的头像 发表于 07-25 10:16 761次阅读

    RDMA简介3之四种子协议对比

    RDMA协议共有四种子协议,分别为InfiniBand、iWARP、RoCE v1和RoCE v2协议。这四种协议使用统一的RDMA API,但在具体的网络层级实现上有所不同,如图1所示,接下来将
    发表于 06-04 16:05

    变频器主要支持哪四种模式?有什么区别?

    变频器作为现代工业自动化领域中的关键设备,其控制模式的多样性和灵活性对于满足不同应用场景的需求至关重要。变频器主要支持四种控制模式:无PG的V/F模式、有PG的V/F模式、无PG的矢量控制模式以及有
    的头像 发表于 04-16 18:22 1762次阅读
    变频器主要支持哪<b class='flag-5'>四种</b>模式?有什么区别?

    芯片封装中的四种键合方式:技术演进与产业应用

    自动键合和混合键合四种主流技术,它们在工艺流程、技术特点和应用场景上各具优势。本文将深入剖析这四种键合方式的技术原理、发展现状及未来趋势,为产业界提供技术参考。
    的头像 发表于 04-11 14:02 2377次阅读
    芯片封装中的<b class='flag-5'>四种</b>键合方式:技术演进与产业应用

    四种常用的最大功率点跟踪MPPT技术介绍

    太阳能电池低转换效率限制了其广泛使用,因此需要一具有最大功率点跟踪(MPPT)容量的功率转换器与太阳能电池相结合。四种常用的最大功率点跟踪MPPT技术:CV、ARV、P&O、IC,「美能光
    的头像 发表于 02-06 14:00 3308次阅读
    <b class='flag-5'>四种</b>常用的最大功率点跟踪MPPT技术介绍

    四种常见ADC的特性和应用

    模拟-数字转换器(ADC)在现代电子系统中扮演着至关重要的角色,它们负责将连续的模拟信号转换为离散的数字信号。这一转换过程对于信号处理、通信、控制等多个领域都至关重要。本文将深入探讨四种常见的ADC
    的头像 发表于 02-02 13:52 2760次阅读

    先进封装Underfill工艺中的四种常用的填充胶CUF,NUF,WLUF和MUF介绍

    今天我们再详细看看Underfill工艺中所用到的四种填充胶:CUF,NUF,WLUF和MUF。 倒装芯片的底部填充工艺一般分为三:毛细填充(流动型)、无流动填充和模压填充,如下图所示, 目前看来
    的头像 发表于 01-28 15:41 3656次阅读
    先进封装Underfill工艺中的<b class='flag-5'>四种</b>常用的填充胶CUF,NUF,WLUF和MUF介绍

    MSP430F4250的四种模式分别是在什么情况下使用呢?

    我是一名初学者,看了书知道MSP430F4250的AD转换模式有四种,我想知道这四种转化模式有什么区别,分别应该在什么情况下使用。各位高手能否为我解答哈,在下不胜感激。因为是初学者,有很多东西都不知道,能尽量详细就尽量哈,谢谢了。
    发表于 01-06 06:16

    私藏技术大公开!四种常见供电方案

    在现代生活中,供电问题直接关系到我们的生活质量与工作效率。以下是四种超实用的供电方案,无论是在家庭生活还是工作场景中,都能为你提供稳定可靠的电力支持。 常见的物联网应用场景下,供电方式有四种
    的头像 发表于 12-31 14:28 2779次阅读
    私藏技术大公开!<b class='flag-5'>四种</b>常见供电方案

    被问爆的四种供电方式,来啦~

    4G模组的外部电源供电设计十分重要,对系统稳定、射频性能都有直接影响。 常见的物联网应用场景下,供电方式有四种: LDO供电方式 DCDC供电方式 锂电池供电以及充电方式 不可充电锂亚/锂锰电池供电
    的头像 发表于 12-30 15:40 1498次阅读
    被问爆的<b class='flag-5'>四种</b>供电方式,来啦~

    烙铁焊,回流焊,波峰焊和激光锡焊四种工艺的比较

    在现如今精密电子行业自动化生产电子元器零部件时,一般会用到的焊接工艺有烙铁焊,回流焊,波峰焊和激光锡焊这四种。下面将聊下这四种工艺的比较。 烙铁焊接工艺原理特性 烙铁焊工艺图示 采用电烙铁作为加热
    的头像 发表于 12-22 15:04 3348次阅读
    烙铁焊,回流焊,波峰焊和激光锡焊<b class='flag-5'>四种</b>工艺的比较