9--第4章-2-指令级并行-计算机系统结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
16
假定在基本流水线的各个阶段,采用BTB时所进行的处理步骤如图。 在转移指令取指阶段就得到目标地址。
将指令地址发往存储器和转 移目标缓存
IF
否 在转移目标缓存中发 现了匹配的入口? 是
否
指令是 被选中 的转移?
是
预测转移目标地址 发送预测 → 指令地址 PC
ID
正常指 令执行
否
转移被 选中?
是
EX
20
3. 基于硬件的前瞻执行(猜测执行、推测执行)
为了得到更高的并行性,可以将动态转移预测技术与 Tomasulo结合,设计出了前瞻执行方法:处理器按转移预测方 向,乱序执行推测的指令序列,如果预测正确,就能够消除控 制相关的延迟。也解决了数据相关和消除名相关。如果预测错 误,则废弃已经执行的指令序列,从另一个分支处重新开始执 行。 基于硬件的前瞻执行结合了以下3种思想: (1)采用动态的分支预测技术来选择后续执行语句 (2)在控制相关消除之前指令前瞻执行。 (3)跨基本块进行动态调度。
一套额外的硬件缓冲,来保存那些已经发射、执行、写结 果但未经确认的指令及其结果。它同时还用来在前瞻执行 的指令之间传送结果。 为了简便,这里将存缓冲的功能集成到再定序缓冲。因 为结果在写入寄存器之前由ROB保存。 不过, 在实际机器中,存/取缓冲可以独立出来。
23
采用Tomasulo算法并支持前瞻执行的扩展浮点部件的结构
第四章 指令级并行及限制
4.1 4.2 指令级并行的概念 指令的动态调度
4.3
4.4 4.5 4.6
转移预测技术
多发射技术 指令级并行的支持与限制 Intel Pentium 4 实例分析
1
4.3
转移预测技术(针对条件转移)
前面讨论基本块时,知道程序中平均5-7条指令就会遇到转移 指令,因此控制相关也是造成流水线停顿的一种主要原因。 条件转移指令产生的停顿:等待判断条件计算产生停顿 计算转移地址产生停顿
21
将Tomasulo算法加以扩展就可实现支持指令前瞻执行。 • 前瞻执行的结果不是实际完成的结果,需要缓存在ROB; 要将前瞻执行的结果供给其他指令使用,使用这些结果的任 何指令也是在前瞻执行。
• 前瞻执行的结果要一直到指令处于非前瞻执行状态时(确认 阶段),才能确定为最终结果,才允许最终写到寄存器或存储 器中。
分支指令
延迟槽
IF
IS
IF
RF
IS
EX
RF
DF
EX
DS
DF
TC
DS
WB
TC WB
暂停
暂停 分支目标
stall
stall
stall
stall
stall IF
stall
stall IS
stall
stall RF
stall
Stall EX
stall
stall DF
下面讨论的转移目标缓冲技术,当命中缓冲区时可以从缓 冲区直接得到目标地址,而不必等到计算出转移地址。
将转移指令地址 将转移指令地址和 和下一条指令的 转移目标地址输入 指令地址输入分 转移目标缓存 支目标缓存
转移预测错误撤销已 取的指令;从另一目 标开始取指令;删除 目标缓存中的入口
转移预测正确; 不停顿继续执行
17
采用BTB技术时指令在各种情况下的延迟
指令地址在BTB 中? 是 预测结果 成功 实际的动作 成功 延迟周期 0
因此,分支预测的准确性是很重要的,不正确的预测会导 致已经前瞻执行的指令全部作废,降低CPU性能。
26
采用Tomasulo算法并支持前瞻执行的扩展浮点部件的结构
27
ROB的每个项主要包含4个域:
(1)指令的类型:转移(尚无结果)、存操作(目的地址 为存储器)、寄存器操作(ALU操作或目的地址是寄存器的 取操作)。 (2)目的地址:该域给出结果应写入的目的寄存器号(对 于取操作和ALU指令)或存储器的地址(存操作)。 (3)值:该域用来保存指令前瞻执行的结果,直到指令得 到确认。 (4)状态:给出该指令处于什么阶段。
因此,前瞻执行阶段以后,需要增加一个指令确认阶段( Instruction commit)。 实现前瞻的关键思想是: 允许指令乱序执行,但必须顺序确认。只有确认以后 的结果才是最终的结果,从而避免不可恢复的行为,如更 新机器状态或执行过程发生异常。
22
再定序缓冲(ReOrder Buffer,ROB): 在指令确认前需要
而对转移地址计算产生的停顿则用处不大。例如,R4000中即使预 测转移发生,计算转移地址仍然会引起流水线停顿。
R4000流水线的基本分支延迟(计算转移地址)为3个时钟周期
时间(时钟周期) 1 BZ 2 指令存储器 3 Reg 4
ALU
5
6 数据存储器
7 Reg
8
9
10
11
指令1
指令存储器
Reg
ALU
事件序列
T T
T
N T T N
T N T N T T Y N T
N T N N Y
N
N T N Y
预测器状态 T 准确性
T T
Y Y Y 成功率为:6/13=46% 。
分析影响预测成功的因素:两次执行的实际转移方向不同, 常常引起预测失败。 因此,考虑记录两次转移历史,如果两次转移方向不同再改变 状态,这样可能会提高分支预测的准确率,下面是采用2位预测 10 位的BPB。
模型机的条件转移指令时序图
2
例如:下面的指令序列中,转移条件由浮点除法指令产生
DIVD F0,F2,F4 BG F0,F6,L1 ;如果F0>F6,转移到L1
浮点除法运算时间长,转移指令需要等待较长时间得到转 移条件。 如果采用转移预测,对以上BG指令译码时,就猜测转移 方向,让流水线按猜测走向连续执行指令,只要猜测正确,就 可以消除或减少等待条件产生造成的流水线停顿。(猜测错误, 就需要重新按另一个走向执行指令,猜测的准确性很重要)
从简单到复杂的动态转移预测技术如下: 1. 转移预测缓存 2. 分支目标缓冲 3. 基于硬件的前瞻执行 以上预测机制的性能随着复杂性与硬件的增加而有效地提高。 6
1. 转移(分支)预测缓存 (branch prediction buffer,BPB)
最简单的是转移预测缓存区(branch prediction buffer, BPB),也称为转移历史表。可以是指令Cache的一个字段集 合,也可以是一个小存储器。 这个缓存有若干记录表项,最简单的是每个表项1位,记录 转移指令最近一次的分支历史,用转移指令地址低位来索引。 可能有几条转移指令都映射到了同一个预测缓存表项。
25
(3)写结果:结果有效后将其送到CDB上,结果附带ROB项号,然后从
CDB写到ROB以及等待此结果的保留站。这一段完成后,就可以释放保留 站。
(4)确认:寄存器指令(运算/load指令)到达ROB的出口且结果有效时,
将结果回写到目的寄存器。如果是存操作,则将结果写入存储器。指令的 前瞻执行过程结束,然后将指令从ROB中清除。 如果转移指令到达ROB出口,转移预测正确则此分支执行完毕。一些 机器称这个过程为完成。(Completion或Graduation)。 当预测错误的转移指令到达ROB的出口时,将指出前瞻执行错误;清 空转移指令之后的ROB项,刷新ROB并从分支的正确入口重新开始执行。
24
使用再定序技术,浮点指令的执行包含以下4步: (1)流出:指令队列取一条指令,如果有空保留站和ROB项 就流出指令,并分配保留站和ROB项。 如果所需操作数在寄存器或ROB中,则将它送入保留站 中。分配给本指令的ROB编号也要送入保留站,当本指令执 行的结果放到CDB上时用它来标示。 如果保留站或ROB全满,则是结构相关(阻塞),停止 流出指令,直到两者均有空项。 (2)执行:如果有1个或2个操作数无效,就等待并不断检测 CDB。这一步检测先写后读相关。当保留站中的两个操作数 全有效后就可以执行这个操作。
14
BTB的结构如图所示
预取指令地址 查找
预测的转移目标地址 预测的指令地址
转移目标 缓存中的 入口数目
=
不匹配:认为不是转移 指令;继续正常执行
转移预测为被选中或者 不被选中
匹配:认为转移是转移指令,预测 匹配:预测的转移目标地址送 PC 指令地址将作为下一条指令地址
用专门的硬件实现的一张表格。表格中的每一项至少有2个字段: (1)执行过的转移成功的转移指令的地址; (2)预测的转移目标地址。 15 (3)可选的字段:转移 预测位
7
例如:DEC Alpha 21064的1位转移预测缓存与指令Cache在一起
从Cache取指令时,同时获得预测位, 如果是转移指令: * 根据该位内容预测是否转移; * 根据实际的转移情况对预测位进行修改。
8
当BPB表项项为一位预测位时,记录该指令最近一次分支 是否成功,其状态图如下: 只记录一次历史转移信息状态转化图
由于BTB中存储的是执行过的成功分支指令的地址, 所以如果当前指令的地址与BTB中的第一个字段匹配, 那么就将该匹配项中第二个字段中的地址送给PC寄存 器,从分支目标处开始取指令。 如果预测正确,则不会有任何分支延迟。如果转 移指令预测错误或者在BTB中没有匹配的项,则会 有至少两个时钟周期的开销,这是因为这时需要更 新BTB中的项。
记录两次历史转移信息状态转化图
转移 被选中 转移未 被选中 预测转移被选中 10 转移 被选中 转移 被选中 转移未 被选中
预测转移被选中 11
预测转移不被选中 01 转移 被选中
预测转移不被选中 00
转移未 被选中
一般预测成功率为78-89%
思考题:用2位转移预测器计算前例的预测成功率。
BPB在预测正确时能消除等待转移条件判断情况的流水线停顿。
13
2. 转移(分支)目标缓冲 (Branch Target Buffer,BTB)
为了进一步减少转移指令计算转移地址引起的停顿,可 以将转移成功的转移指令地址和它的目标地址都放到一个 缓冲区中,在转移指令取指阶段就得到目标地址,转移成 功时,可以将延迟降为0。 这个缓冲区就是分支目标缓冲区(Branch-Target Buffer, BTB,或者Branch-Target Cache,BTC)。
3
4.3.1
静态转移预测
静态预测方法:无论是采用编译器还是硬件预测,其预测方向是固定不变的。
* 最简单的方法是预测转移总是发生(或者不发生)。
对于SPEC程序错误率平均34% 。如模型机的假设转移不发生
* 另一种稍好的方法是根据转移的前后方向来预测转 移。据测试程序统计,程序中向后转移的概率高于向 前转移,因此,可以预测向后的转移总是发生。 其错 误率很难低于30%。
* 一个更精确的技术是基于以前运行时得到的配置文件信息。 错误率约14% 左右。花费时间代价。 总的来说,静态转移预测的准确率不够高。
4
图1.44
模型机的猜测不转移
转移没有发生
为提高转移预测的准确率,则需要采用动态转移 预测技术。
5
4.3.2动态转移预测
动态分支预测技术:通过硬件技术,在程序执行时根据 每一条转移指令过去的转移历史记录来预测下一次转移的方 向。通过提前预测分支方向,减少或消除控制相关导致的流水线停顿。 特征: 根据程序的执行过程动态地改变转移的预测方向。 程序每次执行时,可能预测的分支方向与前次相同或不同。
数据存储器
Reg
指令2
指令存储器
Reg
ALU
数据存储器
Reg
指令3
指令存储器
Reg
ALU
数据存储器
Reg
目标
指令存储器
Reg
ALU
数据存储器
12
基于单周期延迟分支方法,R4000流水线处理分支指令的时空图 ,即使有延迟槽,仍然有2个时钟周期的停顿
指令序列 时钟周期 1 2 3 4 5 6 7 8 9
是
不是 不是
成功
源自文库不成功
成功 不成功
≧2 ≧2
0
问题:实际机器判转移预测是否成功的延迟,取决于机器实际执 行转移指令所花费的时钟周期数。 例如:采用BTB的Pentium CPU(P5) 内部功能结构如下图 所示。
18
P5结构
19
BTB的另一种形式:
在分支目标缓冲器中存储分支目标处的指令。 有的实现方案还保留了分支目标地址,有的则将之去掉了。 目的是进一步加快分支指令执行。
带有箭头的线表示状态转换的方向,线旁边的T表示指令实际执行结 果为转移成功,而N表示指令实际执行结果为转移不成功。
预测成功率一般为77-79%。
9
例子:设一条转移指令在每次执行过程中的实际转移序列如下: T, T, T, N, T, T, N, T, N, N, T, N, N 采用1位动态预测时:
28
例: 假设浮点流水线中执行的延迟如下: 加法需2个时钟周期 乘法需6个时钟周期 除法需12个时钟周期 给出下面代码段当指令MULTD要写结果、确认时 的状态。