06 动态分支预测技术 多指令流出技术 指令调度与循环展开
目录
-
动态分支预测技术
-
概念
- 在程序运行时, 根据分支指令过去的表现来预测其将来的行为
-
分支预测的有效性取决于
- 预测的准确性
- 预测正确和不正确两种情况下的分支开销
-
动态分支预测技术的目的
- 尽快预测分支是否成功
- 尽快找到分支目标地址
-
分支预测表 BHT
-
1个预测位
- 上次成功就预测下次也成功, 反之也是
-
2个预测位
- 精准度很高了
- 研究表明2位和n位(n>2)的预测准确度差不多
-
BHT实现
- BHT可以跟分支指令一起存放在指令Cache中
- 也可以用一块专门的硬件来实现
-
-
分支目标缓冲器BTB
- 具体目标: 将分支的开销降为0
- 具体方法: 分支目标缓冲
- 改进BTB: 降低访存开销
-
-
多指令流出技术
-
工作动机
- 实际CPI=理想CPI+各种冲突引入的停顿
- 前面所有讲到的流水线都是单流出的, 即CPI=1
- 本节目的: 让理想CPI<1
-
多流出处理机的两种基本风格
-
超标量
- 每个时钟周期流出的指令条数不固定
- n-流出
- 限制超标量流水线性能发挥的因素
- load指令
- 分支延迟
-
超长指令字
- 每个时钟周期流出的指令条数是固定的, 构成一条长指令或一个指令包
- 把可以并行执行的多条指令组装成一条很长的指令
- 操作槽
- 指令字被分割成一些字段, 每个字段称为一个分隔槽
- 缺点
- 指令长度增加
- 指令字中的操作槽并非总能填满
- 采用了锁步机制
- 任何一个操作部件出现停顿时, 整个处理机都要停顿
- 指令长度增加
-
-
超流水线处理机
- 在一个时钟周期内, 分时流出多条指令
-
-
指令调度与循环展开
-
概念
- ILP: 指令级并行
- 基于软件的静态开发方法
-
指令调度
- 概念
- 一般由编译器完成
- 找出不相关的指令序列, 让他们在流水线上重叠并行执行
- 概念
-
循环展开
-
作用
- 编译时, 指令调度减少整个指令序列在流水线上的执行时间
- 指令调度可以跨越分支边界
- 提高执行过程中的有效操作的比例
-
概念
- 把循环体的代码复制多次并顺序排放, 然后相应调度循环的结束条件
-
好处
- 减少分支指令
- 为了消除指令之间的相关性, 可以使用寄存器换名技术
-
-
循环展开和指令调度的注意事项
- 确保正确性
- 注意有效性
- 使用不同的寄存器
- 删除多余的测试指令和分支指令, 并对循环结束代码和新的循环体代码进行相应的修正
- 注意对存储器数据的相关性分析
- 注意新的相关性
-
-
指令级并行总结
- 指令级并行最主要的技术是流水线
- 超标量技术: 多条流水线并行工作
- 超流水线技术: 将流水线的一个环节再细分为子环节
- 超长指令字技术: 将多条指令合并成一个长指令执行