Pipelining
流水线
中山大学
报告目录
一. 思维导图--------------------------------- 3
二. 课件理解--------------------------------- 4
三. 名词解释--------------------------------- 14
四. 归纳总结--------------------------------- 15
五. 参考文献--------------------------------- 18
六. 附录------------------------------------- 18
二.课件理解
Lecture3回顾
n 微编码:一种有效的技术用于管理控制单元的复杂性,发明于60年代。
n 由于ROM和RAM速度的不同,引入了更多复杂的指令。
n 技术的进步导致产生fast SRAM,使得技术预测失效
n 复杂的指令阻碍了并行与流水的实现
n 简化的指令集具有更好的效率(新VLSI上),也导致微处理器的发展与流行
处理器性能的铁律
n 每个程序中的指令数依赖于源代码、编译技术以及ISA
n 每条指令的周期(CPI)数依赖于ISA和微体系结构
n 每个周期的运行时间依赖于微体系结构和基础技术
典型的5-stage RISC流水线
流水线的同步读写
CPI的示例
n 微编码机器:3条指令,22个周期,CPI = 7.33 > 1
n 非流水线机器:3条指令,3个周期,CPI = 1
n 流水线机器:3条指令,3个周期,CPI = 1
流水线中指令间的相互影响
流水线中的一条指令可能需要另一条指令正在使用的资源
n 结构冲突:Structural hazard
- 流水线中的一条指令可能依赖于前面指令产生的结果
- 这种依赖可能是一个数据值
n 数据冲突(也称为数据依赖):Data hazard
- 这种依赖也可能是下一条指令的地址
n 控制冲突(也称为地址依赖):Control hazard
- 解决策略:通常通过向指令中加入气泡(bubbles)的方式使CPI变大。
流水线CPI示例
测量从第一条指令完成到当序列中的最后一个指令完成
n 3条指令在3个周期中完成,CPI = 3/3 = 1
n 3条指令在个4周期中完成,CPI = 4/3 = 1.33
n 3条指令在5个周期中完成,CPI = 5/3 = 1.67
可见,随着流水线的增多,CPI不断增大。
解决结构性冲突
n 当两条指令同时需要相同的资源时就会出现结构性冲突
可以在硬件通过拖延新的指令,先执行旧指令,后执行新指令的方式解决
n 通过增加硬件设计的方式总是可以避免结构性冲突
例如,如果两条指令同时需要存储器的某部件,我们可以通过增加另一个该部件的方式避免冲突。
n 典型的RISC 5-stage纯整数计算流水线一般没有结构性冲突
多周期单元容易引起结构性冲突,比如在乘法器、触发器、浮点运算单元上面易出现结构性冲突,在寄存器的回写部件上面也容易出现结构性冲突
数据冲突类型
考虑下面一系列register-register指令类型:
n 数据依赖:在这种类型是true data-dependence
n 反依赖:
n 输出依赖:
- 反依赖和输出依赖又称为名称依赖(Name-dependence not the DD)不是真正的数据依赖,在简单的流水线中没有这样的冲突,但在复杂的流水线中可能存在。
n 注:我们必须要保证程序按顺序执行读写
对数据冲突的三种策略
n 互锁Interlock(stall):
- 通过控制问题阶段的依赖指令来等待hazard被清理
n 绕行,回避Bypass(forwarding):
- 尽可能快的在早期通过回避数值来解决hazard
n 预测Speculate :
- 先假设一个值,如果假设错误,