TVM图级优化按照优化范围,可分为局部优化全局优化

局部优化是TVM图级优化的重点,其中算子融合是AI编译器必不可少的优化方法。

算子融合核心思想就是将多个算子合并成一个内核,因而无需将中间结果写回全局内存,减少了中间变量的分配,也减少了片上缓存和片外存储之间的数据传输。

那算子融合也是有条件的,不能各算子谁想和谁融合就能融合的

不同算子能融合在一起的前提条件就是:某个算子访问的数据是其他算子在其共享存储资源内生成的数据,即算子间应满足访存的局部性

好处有哪些呢?

通过算子融合(如合并循环嵌套)可以为进一步优化创造条件,还可以减少启动和同步开销,更好的共享计算资源。

虽然就单个算子而言,融合后的算子可能会增加存储资源的开销,但考虑到整体性能的提升,这中开销是值得的。

不好的地方呢?

融合后的算子可能破坏后续算子之间的并行执行,即在融合前,某个算子的后续算子是并行执行的,但在将该算子和其他算子融合后有些后续算子只能在融合算子执行结束后开始执行,这显然会影响性能。

局部优化还有什么?

局部优化中还包括经典的代数简化。代数简化考虑的是一系列节点,利用不同类型节点的交换律、结合律和分配律来简化计算。如强度消减、常量折叠等。

  • 强度消减:可以用开销小的算子代替开销大的算子。
  • 常数折叠:通过常数折叠,可以预先计算出可静态确定的图,用常量值替换常量表达式,从而节省执行开销。

代数简化也可以应用于AI相关算子(如reshape、转置和池化等)

全局优化又是什么呢?

计算图提供了全局视图,TVM可以在整个计算图中搜索特定特征,并针对这些特征执行特定全局优化操作。

例如:计算图中的死代码通常是由其他图优化造成的。因此,在其他图优化之后还应执行死代码清除(Deal Code Elimination,DCE)公共子表达式消除(Common Subexpression Elimination,CSE)操作

TVM图级优化了解的更多相关文章

  1. TVM图优化与算子融合

    TVM图优化与算子融合 计算图的定义 Computational graphs: a common way to represent programs in deep learning framewo ...

  2. [cocos2d-x]用CCSpriteBatchNode进行文理贴图的优化

    引言: 我们在进行手机游戏开发的过程中,由于手机的内存资源是有限的,那么对纹理贴图的优化是非常有必要的,有可能相同的功能,优化的好与不好对内存资源的消耗是非常明显的,下面我就用一个例子来说明一下. 说 ...

  3. WEB前端性能优化之一——网页级优化

    1.减少Http请求 http请求是指从客户端到服务器端的请求消息.其中包含对html.css.js.图片资源以及交互数据处理内容等.在前端性能网页级优化中较少http请求是非常重要的一块,每当我们提 ...

  4. 【bzoj3073】[Pa2011]Journeys 线段树优化建图+堆优化Dijkstra

    题目描述 Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a, ...

  5. NYOJ 654喜欢玩warcraft的ltl(01背包/常数级优化)

    传送门 Description ltl 非常喜欢玩warcraft,因为warcraft十分讲究团队整体实力,而他自己现在也为升级而不拖累团队而努力. 他现在有很多个地点来选择去刷怪升级,但是在每一个 ...

  6. TVM图优化(以Op Fusion为例)

    首先给出一个TVM 相关的介绍,这个是Tianqi Chen演讲在OSDI18上用的PPThttps://files.cnblogs.com/files/jourluohua/Tianqi-Chen- ...

  7. 洛谷 P5471 - [NOI2019] 弹跳(二维线段树优化建图+堆优化存边)

    题面传送门 一道非常有意思的题(大概可以这么形容?) 首先看到这类一个点想一个区域内连边的题目可以很自然地想到线段树优化建图,只不过这道题是二维的,因此需要使用二维线段树优化建图,具体来说,我们外层开 ...

  8. AC自动机学习笔记-2(Trie图&&last优化)

    我是连月更都做不到的蒟蒻博主QwQ 考虑到我太菜了,考完noip就要退役了,所以我决定还是把博客的倒数第二篇博客给写了,也算是填了一个坑吧.(最后一篇?当然是悲怆のnoip退役记啦QAQ) 所以我们今 ...

  9. 第五篇 openvslam建图与优化模块梳理

    建图模块 mapping_module在初始化系统的时候进行实例化,在构建实例的时候会实例化local_map_cleaner和local_bundle_adjuster.系统启动的时候会在另外一个线 ...

  10. MySQL limit 分页查询优化(百万级优化)

    1)简单的查询分页:分每页5条 limit [offset],[rows] ,10; 2)建立id索引:查询索引id ,) limit ; 3)使用 between and 语句分页效率快N倍 ; 4 ...

随机推荐

  1. 如何编写Kubernetes的YAML(一)

    什么是API对象 作为一个集群操作系统,Kubernetes 归纳总结了 Google 多年的经验,在理论层面抽象出了很多个概念,用来描述系统的管理运维工作,这些概念就叫做"API 对象&q ...

  2. Linux下使用sz/rz命令从服务器下载或上传文件

    简介 Linux中rz命令和sz命令都可用于文件传输,而rz命令主要用于文件的上传,sz命令用于从Linux服务器下载文件到本地. 安装 yum安装 yum -y install lrzsz 源码安装 ...

  3. 编写你的第一个 Django 应用程序,第4部分

    本教程从教程 3 停止的地方开始.我们是 继续民意调查应用程序,并将专注于表单处理和 减少我们的代码. 一.编写最小表单 让我们更新上一个教程的投票详细信息模板("polls/detail. ...

  4. 使用Win32控制台实现socket通信

    本示例使用Win32控制台实现socket通信 ,可多个客户端同时连接服务器. 服务端代码: #include <iostream> #include <winsock2.h> ...

  5. git clone加速

    使用github的镜像网站进行访问,github.com.cnpmjs.org,我们将原本的网站中的github.com 进行替换.

  6. CentOS7安装图形界面模式

    0.9272019.03.24 15:17:05字数 865阅读 22,115 本人通过VMware14安装Centos7.6过程中出现蓝屏现象,最后发现是因为在系统安装图形界面过程中报错导致,所以决 ...

  7. UML中的各种关系

    各种关系 UML中的各种关系一览表 名称 英文名称 符号 描述 实现方法 耦合强度 举例 关键词 备注 依赖 dependency 1.当类与类之间有使用关系时就属于依赖关系:2.依赖不具有" ...

  8. 二分查找--java进阶day06

    1.二分查找 https://kdocs.cn/l/ciMkwngvaWfz?linkname=150996908 二分查找:每一次查找都从中间的元素查起,根据比较的大小来折半,以此类推,直到最后找到 ...

  9. 继承内存图--java进阶 day01

    主方法进栈,有new进堆 堆内存中先存自己类中有的变量 又因为继承了父类,所以父类中的变量也要存入 即使被私有化,依旧可以继承,只是没有权限使用! 创建对象时,会调用构造方法,所以走构造方法,实参传形 ...

  10. 【网络协议】深入理解HTTP协议

    # 协议 协议就是一种双方提前约定好采用某种形式,以某种规格,利用某种物体把数据传输出去:而另一方再以同样的规则和流程去接收数据的约定制度或者规章. 现代网络是由多种运行在不同平台上的异构系统组成的. ...