赶在最后一天再更一点吧,生死时速
Pipeline CPI = Ideal pipeline CPI + Structural Hazard Stalls+ Data Hazard Stalls + Control Hazard Stalls
指令级并行概念
- Instruction-Level Parallelism
- 指令之间的并行性,利用它,计算机可以并行执行两条以上的指令
- 两种途径:基于硬件的动态开发方法以及基于软件的静态开发方法
基本块BB
- Basic Block
- 除了入口和出口以外没有其他分支的线性指令序列
- 跨越多个基本块开发ILP
- 循环级并行性
相关与冲突⭐
- 判断指令之间的相互依赖关系对于程序内的并行性开发至关重要
- 相关性是程序的属性; 冲突是流水线结构的性质;相关性的存在只预示着存在有冲突的可能性。
数据相关
- 真相关-写后读-RAW
名相关
- 反相关-读后写-WAR
- 输出相关-写后写-WAW
控制相关
- 控制相关决定了某指令相对于分支指令的顺序,使其按正确程序顺序,在应当执行时执行。
- 不是必须严格保持的关键属性。保证不影响保持异常行为并且不改变数据流时,可以大胆地进行指令调度
循环展开
- 软件方法
概念
- 开发循环级并行性——循环的不同迭代之间存在的并行性
- 把循环体的代码复制多次并按顺序排放,然后相应调整循环的结束条件
注意点:
- 保证正确性和有效性:循环控制,操作数偏移量修改,循环体间无关
- 使用不同的寄存器
- 删除多余的测试指令和分支指令
- 注意对存储器数据的相关性分析
- 注意新的相关性
限制
- 展开次数要合理
- 会引起指令数量的增长
- 给寄存器带来压力
动态分支预测
- 回顾一下静态方法:全部猜对或错
- 动态分支预测需要解决的两个问题:
- 如何记录分支的历史信息,要记录哪些信息
- 如何根据这些信息来预测分支的去向,甚至提前取出分支目标处的指令
- Performance = ƒ(accuracy, cost of misprediction)
采用分支历史表BHT
- Branch History Table: Lower bits of PC address index table of 1-bit values
- 一次记录的问题:
- 最后一次预测错误不可避免,因为前面分支总是成功
- 第一次预测错误是源于上次代码段的执行,因为这最后一次分支总是不成功
- 方法:
Correlated Branch Prediction
- 分支间具有相关性,挖掘分支间的相关性
- In general, (m,n) predictor means record last m branches to select between 2m history tables, each with n-bit counters
Thus, old 2-bit BHT is a (0,2) predictor - Each entry in table has m n-bit predictors
- Global Branch History: m-bit shift register keeping T/NT status of last m branches
- 一个例子
- 考到就现学吧
Tournament(竞赛) Predictors
- 结合两种预测器Adaptively combine local and global predictors
- 方法
采用目标缓冲器Branch Target Buffers (BTB)
- 尽早知道分支目标地址,获得分支目标指令
- 至少两个字段:
- 执行过的成功分支指令的地址
- 预测的分支目标地址
- 过程:
小结
- Prediction becoming important part of execution
- Branch History Table: 2 bits for loop accuracy
- Correlation: Recently executed branches correlated with next branch
- Either different branches
- Or different executions of same branches
- Tournament predictors take insight to next level, by using multiple predictors
- usually one based on global information and one based on local information, and combining them with a selector
- In 2006, tournament predictors using 30K bits are in processors like the Power5 and Pentium 4
- Branch Target Buffer: include branch address & prediction
动态调度
- 硬件方法
- 流水线的很大局限性是按序流出和按序执行
- In a dynamically scheduled pipeline, all instructions still pass through issue stage in order (in-order issue)
Enables out-of-order execution and allows out-of-order completion - Note: Dynamic execution creates WAR and WAW hazards and makes exceptions harder
- 两步:
- 流出(issue):指令译码,并检查是否存在结构冲突;如果不存在结构冲突,就将指令流出
- 读操作数:等待数据冲突消失(如果有的话),然后读操作数
记分牌算法
太难了跑了
Tomasulo算法
太难了跑了
前瞻执行Speculation
- 前瞻执行解决控制相关的问题,允许在处理器还未判断指令是否能执行之前就提前执行
- 和动态调度的区别
- Speculation fetch, issue, and execute instructions as if branch predictions were always correct
- Dynamic scheduling only fetches and issues instructions
关键思想:
允许指令乱序执行,但必须顺序提交,以实现精确例外
- 采用动态分支预测技术来选择后续执行语句;
- 在控制相关消除之前指令前瞻执行+撤销错误推测的影响;
- 对基本块组合采用动态调度
reorder buffer (ROB) 再定序缓冲
- 执行的结果不是写回到寄存器或存储器,而是写入ROB。等到指令得到”确认“(commit)(即确实是应该执行的)后,才将结果写入寄存器
- RS与ROB是现代CPU中的核心部件,作用相反:RS把有序变为乱序;ROB把乱序变为有序。
- Reorder Buffer Entry
- Reorder Buffer operation
Tomasulo with ReOrder Buffer 再定序缓冲
太难了跑了
多发射
- 如果想CPI小于1,就必须要采用多发射技术
- 两种类型
- 超标量:在同一周期内发出多条指令(2-8条),由编译器静态调度或动态调度(Tomasulo)。
- 超长指令字:固定数量的指令(3-6)被格式化为一个长指令字或包(由编译器静态调度)
超标量Superscalar
每个周期可以发出两条指令(two-issue超标量)。其中一个指令是integer(包括load/store,branch)。另一条指令是浮点运算。
超长指令字VLIW (very long instruction word)
采用多个独立的功能部件,将多条指令的操作组装成固定格式的指令包,形成一条非常长的指令。超长指令字的格式固定,处理过程简单,处理器所需硬件量比超标量要少。
以上内容复习所用,侵删