Tiling与流水线技术小结

文章目录

  • Tiling技术
      • Loop Tiling
      • AI推理中的Tiling
    • 参考
  • 流水线技术
      • 指令周期
    • 参考

Tiling技术

Tiling(平铺)是一种将大的问题或数据集分解为较小的子问题或子数据集的技术,目的是提高数据局部性和缓存利用率,从而提升程序性能。
在CUDA编程中,Tiling常涉及利用共享内存和循环分块。共享内存可被一个线程块内的所有线程访问,可以减少全局内存访问次数,Tiling过将数据分割成小块并重复利用这些块中的数据来实现这一点,从而最大化了共享内存的效益;循环分块则将大循环分解为小循环,减少内存访问冲突,提高内存访问局部性。在 CPU 中,Tiling 用于优化矩阵乘法,将输入矩阵分成小块进行乘法运算,以减少内存访问次数,提高缓存命中率。

Loop Tiling

在这里插入图片描述

在该二重循环中,元素A[i]会在内层循环中被连续访问M次,元素B[j]则是每隔N个元素再次被访问。如果内部循环跨度比较大,即M数值比较大,当启动下一次外部循环时,之前访问过的B[j]已经移除缓存了。比如说,cache大小为10,N为5,M为12(大于cache的size即可),当i=1,j=10时,cache刚好存储了B[1]到B[10];当j=11时,由于cache中没有B[11],所以需要从内存中读入,同时按照最久未访问策略将B[1]移除缓存,但是当外层循环加一即i=2时,内层循环重新遍历,此时j=1,但是此时cache中并没有B[1],未命中,需要再次从内存中读入。这样A的未命中率就是N/cache_size,B的未命中率就是(NM)/cache_size。
按照这种访问策略,要想提供效率就是要提供cache的命中率。数据移出cache的策略是操作系统控制的,开发者角度可以修改的就是数据的遍历顺序以提升命中率从而提升计算效率,Loop Tiling的工作就在于此。
Tiling的作用就是解决数据未命中的问题。将数据分割成若干个块(tile),保证在下一次访问时数据还在cache中。一般的做法就是先从内层循环开始分割。原因上面也分析过了,外层循环动一下,内层循环要动一轮,如果先分外层循环,一次要遍历的数据还是很多,包含整个内部循环所涉及的数据。假设切分的大小为T,则之前的循环改写如下。为了保证遍历的正确性,此时内层循环需要放在最外层,但是这样会多次移动A,影响A的命中率。
此时A的未命中率为(M/T)N/cache_size,B的未命中率为M/T * T/cache_size,总的未命中率为MN/(Tcache_size) + M/cache_size。如果沿着外层循环切割,总的未命中率为MN/(T
cache_size) + N/cache_size,则实际的差别主要在于内外层循环的大小。
在这里插入图片描述

二维和更高纬度的计算分析过程类似。

AI推理中的Tiling

由于Ai core的Local Memory的存储容量无法完整的容纳下算子的输入与输出,因此需要先搬运一部分输入进行计算然后搬出,再搬运下一部分输入进行计算,直到得到完整的最终结果,这个数据切分、分块计算的过程称之为Tiling。根据算子的shape等信息来确定数据切分算法相关参数(比如每次搬运的块大小,以及总共循环多少次)的计算程序,称之为Tiling实现。**Tiling实现完成后,获取到的Tiling切分算法相关参数,会传递给kernel侧,用于指导并行数据的切分。**大致步骤可以分为1)宿主机端获取硬件信息,2)获取输入数据维度和类型信息,3)kernel侧解析tiling参数并执行。
切分可分为核间切分和核内切分两块内容。核间切分是将数据分配给NPU的多个Aicore;核内切分是将分配到某个核计算的数据进行分批处理。

参考

http://www.coreui.cn/news/411154.html
https://zhuanlan.zhihu.com/p/292539074
https://zhuanlan.zhihu.com/p/685761148

流水线技术

目前,并行技术主要分三种类别:多处理器、资源共享即cpu分时和时间重叠即流水线技术。流水线技术的特点是将整个过程分为若干个子过程(段,stage),每个子过程由一个专门的功能部件来实现。每个段的所用时间应该尽可能相等,其中耗时最长的就是流水线的瓶颈。每两个段之间会有一个缓冲寄存器叫做锁存器,用于在两个段之间传递数据,同时也起到隔离电路的作用。

指令周期

单周期处理机模型:一个周期完成一个指令(每个周期是等长的),指令长度可能不一样,会造成很大的浪费
多周期处理机模型:将一个指令的完成划分成若干个周期来实现
在这里插入图片描述

经典五段流水线
在这里插入图片描述

1)取指(IF)
从程序计数器PC中取出地址,从存储器中取出指令并放入指令寄存器IR中,PC指向下一条指令。
2)译码(ID)
对执行进行译码,从IR的寄存器地址访问通用寄存器组获取操作数。
3)执行(EX)
ALU对上个周期中准备好的操作数进行运算操作。
4)存储器访问(MEM)
load指令根据上一个周期计算出的有效地址从存储器中读出的相应的数据;store把指定的数据写入这个有效地址对应的存储单元。
5)写回(WB)
把结果写入通用寄存器组。对于ALU运算来说,这个结果来自ALU,而对于load指令来说,这个结果来自存储器。

参考

https://www.cnblogs.com/CorePower/p/CorePower.html
https://blog.csdn.net/weixin_40064300/article/details/124415855

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pinia-状态管理

Pinia-状态管理 特点: 1. 轻量和模块化 Pinia 是一个轻量级的状态管理库,支持模块化管理,即可以将应用的状态分成多个 store 以实现更好的组织。使用 Pinia,可以定义多个 store,每个 store 都是一个独立的模块&#x…

openpnp - 在openpnp中单独测试相机

文章目录 openpnp - 在openpnp中单独测试相机概述笔记测试工装相机镜头顶部盖子到目标的距离END openpnp - 在openpnp中单独测试相机 概述 底部相机的位置不合适, 重新做了零件,准备先确定一下相机和吸嘴的距离是多少才合适。 如果在设备上直接实验,那…

网络模型——二层转发原理

网课地址:网络模型_二层转发原理(三)_哔哩哔哩_bilibili 一、路由交换 网络:用来信息通信,信息共享的平台。 网络节点(交换机,路由器,防火墙,AP)介质&#…

[watevrCTF 2019]Voting Machine 1-好久不见10

shiiftF12查找字符串,发现flag.text跟踪 from pwn import * i remote("node5.anna.nssctf.cn",22956) address 0x400807 payload ba*(0x28) p64(address) i.sendline(payload) i.interactive()

【Linux】从零开始使用多路转接IO --- select

碌碌无为,则余生太长; 欲有所为,则人生苦短。 --- 中岛敦 《山月记》--- 从零开始认识五种IO模型 1 前言2 认识多路转接select3 多路转接select等待连接4 完善代码5 总结 1 前言 上一篇文章我们讲解了五种IO模型的基本概念,并…

【Java SE 】String 类 详解!

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 1. String 的地位 在Java 编程中,字符串的使用是非常频繁的,而字符串的使用有离不开 String类 ,在开发和面试中String类也是非常…

专业130+总400+武汉理工大学855信号与系统考研经验电子信息与通信工程,真题,大纲,参考书。

已经顺利读研一段时间,回顾一下考研还是历历在目。应群里学弟要求,回忆总结一下自己考研经历,希望对大家复习有帮助。总分400,专业课855信号与系统130(犯了低级错误,计算出现问题,大家专业好好准…

Self-Lengthen:阿里千问开源提升 LLM 长文本生成能力的训练框架

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦! 🥦 微信公众号&#xff…

双向链表及如何使用GLib的GList实现双向链表

双向链表是一种比单向链表更为灵活的数据结构,与单向链表相比可以有更多的应用场景,本文讨论双向链表的基本概念及实现方法,并着重介绍使用GLib的GList实现单向链表的方法及步骤,本文给出了多个实际范例源代码,旨在帮助…

C++笔试题之实现一个定时器

一.定时器(timer)的需求 1.执行定时任务的时,主线程不阻塞,所以timer必须至少持有一个线程用于执行定时任务 2.考虑到timer线程资源的合理利用,一个timer需要能够管理多个定时任务,所以timer要支持增删任务…

【Java笔记】1-JDK/JRE/JVM是个啥?

JDK、JRE、JVM可以说是入门必须了解的三个词汇 先说全称 JDK:Java Development Kit,Java开发工具包 JRE:Java Runtime Environment,Java运行环境 JVM:Java Virtual Machine,Java虚拟机 再说关系 JVM⊆J…

c语言-进位计数制

文章目录 一、进位计数制是什么?二、c语言1.二进制转十进制2.十进制转二进制 一、进位计数制是什么? 进位计数制简称进制,是人类用于计算数量的基本规则。 可使用数字符号的数目称为基数或底数,基数个数为n个,即可称n…

HTML 基础标签——结构化标签<html>、<head>、<body>

文章目录 1. <html> 标签2. <head> 标签3. <body> 标签4. <div> 标签5. <span> 标签小结 在 HTML 文档中&#xff0c;使用特定的结构标签可以有效地组织和管理网页内容。这些标签不仅有助于浏览器正确解析和渲染页面&#xff0c;还能提高网页的可…

【算法赌场】区间合并

区间问题 区间问题的引入 数学上&#xff0c;用两个数字可以确定数轴上的一个区间&#xff0c;较小的数字叫做区间的左端点&#xff0c;也叫区间起点&#xff0c;较大的数字叫做区间的右端点&#xff0c;也叫区间终点。 在算法竞赛中&#xff0c;很多题目是以区间为单位去进行…

给定开始日期时间结束日期时间、间隔得到符合条件的序列pandas.timedelta_range()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 给定开始日期时间 结束日期时间、间隔 得到符合条件的序列 pandas.timedelta_range() [太阳]选择题 以下代码执行后&#xff0c;delta中包含的时间差序列的个数是多少&#xff1f; import pa…

【AI工作流】FastGPT - 深入解析FastGPT工作流编排:从基础到高级应用的全面指南

文章目录 一、工作流编排概述二、FastGPT的节点类型1. 基础功能插件(1) 文本输出(2) 功能调用(3) 工具(4) 外部调用(5) 其他 2. 系统插件3. 团队插件 三、工作流中的流向结语 在当今快速发展的人工智能领域&#xff0c;工作流编排的能力已成为提升用户体验和应用效率的关键因素…

qt QAction详解

1、概述 QAction是Qt框架中的一个抽象类&#xff0c;用于表示用户界面中的一个动作&#xff08;action&#xff09;。这些动作可以绑定到菜单项、工具栏按钮或快捷键上&#xff0c;提供了一种灵活的方式来处理用户交互。QAction不仅包含了动作的名称、图标、提示信息等属性&am…

MRCTF2020:你传你ma呢

文件上传题先判断黑白名单过滤&#xff0c;先传个最简单的木马 这里上传不了php文件&#xff0c;猜测可能是对php文件进行了过滤&#xff0c;将文件改为任意后缀这里改为.abc 还是上传不成功&#xff0c;猜测可能对MIME也做了过滤&#xff0c;将Content-Type更改为image/jpeg再…

LeetCode (206单链表反转)

目录 题目描述: 代码: 第一种: 第二种: 第三种: 第四种: 第五种: 主函数: ListNode类: 题目描述: 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3…

C# Modbus RTU通讯回顾

涉及技术&#xff1a; 1.使用NMdbus4 库 2.ushort[]转int 记得之前刚学习的时候&#xff0c;是ushort[] → Hex字符串→byte[] → 翻转byte[] →BitConverter.ToInt32()&#xff0c;饶了一大圈&#xff1b;实际上可以直接转&#xff1b;这里也有小细节&#xff1a;使用BitCo…