流水线中的相关培训教程[4]
下面讨论如何利用编译器技术来减少这种必须的暂停,然后论述如何在流水线中实现数据相关检测和定向。
5. 对数据相关的编译器调度方法
流水线常常会遇到许多种类型的暂停。比如,采用典型的代码生成方法对a = b + c这种常用的表达式进行处理,可以得到如图3.3.14所示的指令序列。从图3.3.14可以看出,在 add 指令的流水过程中必须插入一个暂停时钟周期,以保证变量c的读入值有效。既然定向无法消除指令序列中所包含的这种暂停,那么能否让编译器在进行代码生成时就消除这些潜在的暂停呢?
实际上,编译器的确可以通过重新组织代码顺序来消除这种暂停。通常称这种重新组织代码顺序消除暂停的技术为流水线调度(pipeline scheduling)或指令调度(instruction scheduling)。
例 3.6 请为下列表达式生成没有暂停的dlx代码序列。假设载入延迟为1个时钟周期。
a = b - c;
d = e - f;
解: 调度前后的指令序列如表3.2所示。可以看出,两条alu指令(add ra,rb,rc 和 sub rd,re,rf)分别和两条load指令(lw rc,c和lw rf,f)之间存在数据相关。为了保证流水线正确执行调度前的指令序列,必须在指令执行过程中插入两个时钟周期的暂停。但是考察调度后的指令序列不难发现,由于流水线允许定向,就不必在指令执行过程中插入任何暂停周期。
6. 对dlx流水线控制的实现
让一条指令从流水线的指令译码段(id)移动到执行段(ex)的过程通常称为指令发射,而经过了该过程的指令为已发射的指令。
对于 dlx 标量流水线而言,所有的数据相关均可以在流水线的 id段 检测到,如果存在数据相关,指令在其发射之前就会被暂停。这样,我们可以在 id段 决定需要什么样的定向,然后设置相应的控制。在流水线中较早地检测到相关,可以降低实现流水线的硬件复杂度,因为这样不必在流水过程中被迫将一条已经改变了机器状态的指令挂起。另外一种方法是在使用一个操作数的时钟周期开始(dlx 流水线的 ex 和 mem 段的开始)检测相关,确定必需的定向。
为了说明这两种方法的不同,我们将以 load 指令所引起的 raw 相关为例,论述如何通过在 id段 的检测来实现流水线控制,其中到 alu 输入的定向路径可以在 ex 段。表3.3列出了流水线相关检测硬件可以检测到的各种相关情况。
现在来看看如何实现流水线互锁。如果某条指令和 load 指令有一个 raw 相关时,该指令处于 id段,load 指令处于 ex段。我们可以用表3.4来描述此时所有可能的相关情况。
一旦硬件检测到上述 raw 相关,流水线互锁必须在流水线中插入暂停周期,使正处于 if 和 id段 的指令不再前进。另外,还必须暂停向前传送 if/id 寄存器组的内容,使得流水线能够保持被暂停的指令。
对定向而言,虽然可能要考虑许多情况,但是定向逻辑的实现方法是类似的。实现定向逻辑的关键是,流水线寄存器不仅包含了被定向的数据,而且包含了目标和源寄存器域。从上面的讨论可知,所有定向都是从 alu 或数据存储器的输出到 alu、数据存储器或0检测单元的输入的定向,我们可以分别将 ex/mem 和 mem/wb 段的寄存器 ir 同 id/ex 和 ex/mem 段中的寄存器 ir 相比较,决定是否需要定向,从而实现必需的定向控制。
定向的控制硬件除了需要用比较器和组合逻辑来确定什么时候打开哪一条定向路径之外,还需要在 alu 输入端采用具有多个输入的多路器,并增加相应的定向路径连接通路。改进图3.2.17中的相关硬件,可以得到图3.3.15,图中画出了所增设的定向路径。
大功率可调稳压电源
便携式、低功耗体电信号采集存储系统研究
AR安全传感器头型号列表
华大电子携安全低功耗MCU系列新品亮相电子峰会
英特尔推出基于Xe-LP微架构的首款数据中心GPU
流水线中的相关培训教程[4]
小米Max2评测:小米Max2怎么样?小米Max2的优缺点,看完再买!
再次涨停!三大板块成铭普股票大涨引擎
电池管理系统赋予锂离子电池新的生命
仪表选型时需要注意哪些地方
为啥说无限流量是一个大坑?且看它所带来的五大影响
干簧管开关百问百答
小马智行新车型接入自有平台及如祺出行开展商业化运营,Robotaxi规模效应渐显
X波段宽带低噪声放大器设计
半导体蚀刻系统市场预计增长到2028年的120亿美元,复合年增长率为2.5%
IBM携手生态伙伴为地产行业数字化转型加速
构建大数据产业发展格局,主要从三个方向着手
什么是骨传导耳机?骨传导耳机的好处
荣耀年度最强拍照手机荣耀20系列为何会深受用户的喜爱
专为工业应用设计的采用电气隔离技术的测量系统的实现