TVM图级优化了解
TVM图级优化按照优化范围,可分为局部优化和全局优化
局部优化是TVM图级优化的重点,其中算子融合是AI编译器必不可少的优化方法。
算子融合核心思想就是将多个算子合并成一个内核,因而无需将中间结果写回全局内存,减少了中间变量的分配,也减少了片上缓存和片外存储之间的数据传输。
那算子融合也是有条件的,不能各算子谁想和谁融合就能融合的
不同算子能融合在一起的前提条件就是:某个算子访问的数据是其他算子在其共享存储资源内生成的数据,即算子间应满足访存的局部性。
好处有哪些呢?
通过算子融合(如合并循环嵌套)可以为进一步优化创造条件,还可以减少启动和同步开销,更好的共享计算资源。
虽然就单个算子而言,融合后的算子可能会增加存储资源的开销,但考虑到整体性能的提升,这中开销是值得的。
不好的地方呢?
融合后的算子可能破坏后续算子之间的并行执行,即在融合前,某个算子的后续算子是并行执行的,但在将该算子和其他算子融合后有些后续算子只能在融合算子执行结束后开始执行,这显然会影响性能。
局部优化还有什么?
局部优化中还包括经典的代数简化。代数简化考虑的是一系列节点,利用不同类型节点的交换律、结合律和分配律来简化计算。如强度消减、常量折叠等。
- 强度消减:可以用开销小的算子代替开销大的算子。
- 常数折叠:通过常数折叠,可以预先计算出可静态确定的图,用常量值替换常量表达式,从而节省执行开销。
代数简化也可以应用于AI相关算子(如reshape、转置和池化等)
全局优化又是什么呢?
计算图提供了全局视图,TVM可以在整个计算图中搜索特定特征,并针对这些特征执行特定全局优化操作。
例如:计算图中的死代码通常是由其他图优化造成的。因此,在其他图优化之后还应执行死代码清除(Deal Code Elimination,DCE) 和公共子表达式消除(Common Subexpression Elimination,CSE)操作。
TVM图级优化了解的更多相关文章
- TVM图优化与算子融合
TVM图优化与算子融合 计算图的定义 Computational graphs: a common way to represent programs in deep learning framewo ...
- [cocos2d-x]用CCSpriteBatchNode进行文理贴图的优化
引言: 我们在进行手机游戏开发的过程中,由于手机的内存资源是有限的,那么对纹理贴图的优化是非常有必要的,有可能相同的功能,优化的好与不好对内存资源的消耗是非常明显的,下面我就用一个例子来说明一下. 说 ...
- WEB前端性能优化之一——网页级优化
1.减少Http请求 http请求是指从客户端到服务器端的请求消息.其中包含对html.css.js.图片资源以及交互数据处理内容等.在前端性能网页级优化中较少http请求是非常重要的一块,每当我们提 ...
- 【bzoj3073】[Pa2011]Journeys 线段树优化建图+堆优化Dijkstra
题目描述 Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a, ...
- NYOJ 654喜欢玩warcraft的ltl(01背包/常数级优化)
传送门 Description ltl 非常喜欢玩warcraft,因为warcraft十分讲究团队整体实力,而他自己现在也为升级而不拖累团队而努力. 他现在有很多个地点来选择去刷怪升级,但是在每一个 ...
- TVM图优化(以Op Fusion为例)
首先给出一个TVM 相关的介绍,这个是Tianqi Chen演讲在OSDI18上用的PPThttps://files.cnblogs.com/files/jourluohua/Tianqi-Chen- ...
- 洛谷 P5471 - [NOI2019] 弹跳(二维线段树优化建图+堆优化存边)
题面传送门 一道非常有意思的题(大概可以这么形容?) 首先看到这类一个点想一个区域内连边的题目可以很自然地想到线段树优化建图,只不过这道题是二维的,因此需要使用二维线段树优化建图,具体来说,我们外层开 ...
- AC自动机学习笔记-2(Trie图&&last优化)
我是连月更都做不到的蒟蒻博主QwQ 考虑到我太菜了,考完noip就要退役了,所以我决定还是把博客的倒数第二篇博客给写了,也算是填了一个坑吧.(最后一篇?当然是悲怆のnoip退役记啦QAQ) 所以我们今 ...
- 第五篇 openvslam建图与优化模块梳理
建图模块 mapping_module在初始化系统的时候进行实例化,在构建实例的时候会实例化local_map_cleaner和local_bundle_adjuster.系统启动的时候会在另外一个线 ...
- MySQL limit 分页查询优化(百万级优化)
1)简单的查询分页:分每页5条 limit [offset],[rows] ,10; 2)建立id索引:查询索引id ,) limit ; 3)使用 between and 语句分页效率快N倍 ; 4 ...
随机推荐
- IDM 下载器 汉化注册激活
将以下程序更改为.bat文件.使用windows的管理员权限打开. 汉化于:https://github.com/WindowsAddict/IDM-Activation-Script @setloc ...
- 海康SDK报错Structure.getFieldOrder()
就是你调用的这个结构体以及其引用的其他结构体,可能没有getFieldOrder()的方法,你只要按照顺序把他填上去就好了.比如 public static class NET_DVR_TIME ex ...
- C#中的StreamWriter和"谁创建谁释放"原则
C# 类库中的 StreamWriter 类在释放时会同时关闭其所依赖的基础流对象,这是为了确保所有缓冲数据都被写入基础流中,并且在不再需要 StreamWriter 对象时,基础流对象也能够被及时释 ...
- 青岛oj集训1
2025/3/4 内容:有向无环图(DAG) 优点:DAG有很多良好性质 拓扑排序 用处:可以根据拓扑序进行dp 这次计算所用的所有边的权值都是有计算过的 一张DAG图肯定有拓扑序(bfs序,dfs序 ...
- Oracle 对 Json 数据进行增删改
1.背景: 由于项目要求,需要对大型的 Json 数据入库到DB中(clob 类型),由于内容过长或者 oracle 版本限制,有一些熟知的处理方法是不能使用的. 精确解决问题,可以直接看第四步:[4 ...
- 连接MySQL数据库出现时Authentication plugin 'caching_sha2_password' cannot be loaded的解决办法
问题描述:用Navicat Premium或HeidiSQL连接MySQL数据库时会弹出下面的情况 解决方法: 1.运行命令行窗口,输入以下命令,输入密码后进入到mysql中,(最好将MySQL安装目 ...
- Windows 下 Toad 如何使用 Oracle instantclient 32位客户端
Toad需要32位的Oracle客户端,通过如下方法,可以使用 Oracle instantclient. 1.安装 Toad, 2.下载 Oracle instantclient 32位版,解压到指 ...
- “决策-寻找过程”的黄金秘密工具,1/e 法则之应用(尤其日常生活中的应用)
https://www.ccgxk.com/magicword/327.html 目录 引言 著名的 1/e 法则内容和解释 应用到生活中的 1/e 法则是什么样? 相亲案例 看书.看电影案例 生活质 ...
- 【SpringCloud】版本选择
版本选择 从2.2.x和H版开始说起 SpringBoot版本选择 git源码地址 https:github.com/spring-projects/spring-boot/releases/ Spr ...
- PMP学习记录
本人在2020年12月已经顺利拿到PMP证书. 第一次听说PMP证书是2016年,一个同事说考试通过拿到了PMP证书,当时对PMP不是很了解.也未作深入了解,当时认为俺是做技术的,这个证书没啥用.O( ...