第4章 指令级并行

合集下载

计算机系统结构第4章指令级并行及限制

计算机系统结构第4章指令级并行及限制

2
4.1.1 指令级并行
1、流水线处理机的实际CPI
– 理想流水线的CPI加上各类停顿的时钟周期数:
CPI流水线 = CPI理想 + 停顿结构冲突 + 停顿数据 冲突 + 停顿控制冲突 – 理想CPI是衡量流水线最高性能的一个指标。 – IPC:Instructions Per Cycle (每个时钟周期完成的指令条数)
24
(1) 展开后没有调度的代码
流出时钟 F0,0(R1) 1 2 F4,F0,F2 3 4 5 0(R1),F4 6 F6,-8(R1) 7 8 F8,F6,F2 9 10 11 -8(R1),F8 12 F10,-16(R1) 13 14 流出时钟 F12,F10,F2 16 17 -16(R1),F12 F14,-24(R1) 19 20 F16,F14,F2 22 23 -24(R1),F16 24 R1,R1,#32 25 26 R1,Loop 27 28

一个元素的操作时间从10个时钟周期减少到6个 5个周期是有指令执行的,1个空转周期。
10
(Ⅱ) (1) 首先,仅仅去除4遍循环体中的分支指令,得到以下 由17条指令构成的指令序列,如下所示:
Loop: LD F0 , 0(R1) ADD.D F4 , F0 , F2 SD 0(R1) , F4 SUBI R1 , R1 , #8 LD F0 , 0(R1) ADD.D F4 , F0 , F2 SD 0(R1) , F4 SUBI R1 , R1 , #8 LD F0 , 0(R1) ADD.D F4 , F0 , F2 SD 0(R1) , F4 SUBI R1 , R1 , #8 LD F0 , 0(R1) ADD.D F4 , F0 , F2 SD 0(R1) , F4 SUBI R1 , R1 , #8 BNEZ R1 , Loop

计算机系统结构 指令级并行 4.3 控制相关的动态解决技术

计算机系统结构 指令级并行    4.3 控制相关的动态解决技术


预测成功, 后续指令无 延迟执行
问题:解决预测错误或不命中的延迟。 问题:解决预测错误或不命中的延迟。
4.3 控制相关的动态解决技术
采用BTB BTB技术时指令在各种情况下的延迟 3. 采用BTB技术时指令在各种情况下的延迟 指令在BTB中? 预测结果 实际的动作 是 是 不是 不是 成功 成功 成功 不成功 成功 不成功 延迟周期 0 2 2 0
2/28
4.3 控制相关的动态解决技术
4.3.1 分支预测缓冲
动态分支预测必须解决两个问题: 动态分支预测必须解决两个问题: 两个问题 • 如何记录一个分支操作的历史。 如何记录一个分支操作的历史。 决定预测的走向。 决定预测的走向。 记录分支历史的方法有以下几种: 记录分支历史的方法有以下几种: 仅仅记录最近一次或最近几次的分支历史; ( 1 ) 仅仅记录最近一次或最近几次的分支历史; (2)记录分支成功的目标地址; 记录分支成功的目标地址; (3)记录分支历史和分支目标地址,相当于前 记录分支历史和分支目标地址, 面两种方式的结合; 面两种方式的结合; (4)记录分支目标地址的一条或若干条指令。 记录分支目标地址的一条或若干条指令。
17/28
4.3 控制相关的动态解决技术
BTB命中率 BTB命中率 × 预测错误率 × 2 90% 10% = 90% × 10% × 2 18(时钟周期) = 0.18(时钟周期) 不在BTB BTB中 实际成功,此时的延迟为: (3)不在BTB中,实际成功,此时的延迟为: (1-BTB命中率) × 不在BTB中分支转移成功率 × 2 BTB命中率) 不在BTB中分支转移成功率 命中率 BTB 10% 60% = 10% × 60% × 2 12(时钟周期) = 0.12(时钟周期) 不在BTB BTB中 实际不成功,此时的延迟为0 (4)不在BTB中,实际不成功,此时的延迟为0。

第 4 章 指令级并行

第 4 章 指令级并行
• 1.指令流出(Issue, 记为IS):如果指令所需的功 能部件空闲,并且其他正在执行的指令使用的目 的寄存器与该指令的不同,记分牌就向相应的功 能部件发射该指令,并改变记分牌内部的数据结 构。这一步代替了ID的一部分。
• 解决了结构相关和WAW相关。
2020/8/4
17
• 2.读操作数(Read Operand, 记RO):如果前面 已流出的正在运行的指令不对本指令的源操作数 寄存器进行写操作,或者一个正在工作的功能部 件已经完成了对这个寄存器的写操作,那么此操 作数有效。整个检测工作由记分牌完成。当操作 数有效后,记分牌告诉功能部件读操作数并开始 执行。
硬件+软件技术
必须要硬件技术和软件技术互相 配合,才能够最大限度地挖掘出程 序中存在的指令级并行。
2020/8/4
2
1.流水线处理机的实际CPI
–理想流水线的CPI加上各类停顿的时钟周 期数:
CPI流水线 = CPI理想 + 停顿结构冲突 + 停顿数据冲突 + 停顿控制冲突
– 理想CPI是衡量流水线最高性能的一个指标。 –IPC:Instructions Per Cycle
(每个时钟周期完成的指令条数)
2020/8/4
3
2.基本程序块
– 基本程序块:一段除了入口和出口以外 不包含其他分支的线性代码段。
– 程序平均每5~7条指令就会有一个分支。 循环级并行:使一个循环中的不同循环体 并行执行。 – 开发循环体中存在的并行性
• 最常见、最基本 – 是指令级并行研究的重点之一
2020/8/4
10
流水线动态调度的优点
• (1)能处理某些在编译时无法知道的相 关情况。
• (2)能简化编译程序设计。 • (3)使代码有可移植性。 • 动态调度方法的主要缺点是硬件较为复

汇编_并行计算(指令级)

汇编_并行计算(指令级)


编译器完成这种指令调度的能力受限于 两个特性:

程序固有的指令级并行性; 流水线功能部件的执行延迟。
第四章 指令级并行
循环展开调度基本方法 – 注意事项

循环展开和指令调度时要注意以下几个方面:

保证正确性。
在循环展开和调度过程中尤其要注意两个地方的正 确性:循环控制,操作数偏移量的修改。

load/store 操作
浮点操作 store 缓冲器 地址部件 load 缓冲器 6 5 4 3 3 2 2 1 1 数据 存储部件 地址 标识 浮点加法器 操作数总线
操作总线
保 留 站
2 1 标识 浮点乘法器
公共数据总线(CDB)
第四章 指令级并行
指令的动态调度 – Tomasulo算法基本思想
IS
检测结构冲突
RO
检测数据冲突
第四章 指令级并行 指令的动态调度

简单的5段流水线中,是不会发生读后写冲突 和写后写冲突的。但乱序执行就使得它们可能 发生了。

例如,考虑下面的代码

存在反相关
DIV.D SUB.D ADD.D
F10, F0, F2 F10, F4, F6 F6, F8, F14
异常处理比较复杂
(精确异常处理、不精确异常处理)

ห้องสมุดไป่ตู้
动态调度要保持正确的异常行为

只有那些在程序严格按程序顺序执行时会发生的异 常,才能真正发生。 保持正确的异常行为:对于一条会产生异常的指令 来说,只有当处理机确切地知道该指令将被执行后 ,才允许它产生异常。

第四章 指令级并行
指令的动态调度 – Tomasulo算法基本思想

archit44

archit44
系统结构
4.3 动态分支预测技术

指令并行
处理器可达到的指令级并行度越高,控制相关 的影响越大 动态解决技术利用硬件对程序运行时分支的行 为进行预测,提前对分支操作做出反应,加快 分支处理的速度。分支预测的效果不仅取决于 其准确性,而且与分支预测时的开销密切相关。 分支转移的最终延迟取决于流水线的结构、预 测的方法和预测错误后恢复所采取的策略 动态分支预测技术要记录分支指令的历史、并 据此决定预测的分支,还要尽快找到分支目标 地址,从而避免控制相关造成流水线停顿
4.4 多指令流出技术

指令并行
将等于1的理想CPI减小,必须实现一个时钟周 期流出(发射issue)多条指令
超标量(Superscalar)处理器:每个时钟周期流出多条 指令(1~8),可以采用编译器进行静态调度顺序执行, 也可以采用硬件动态调度乱序执行 超长指令字(VLIW: Very Long Instruction Word):通 过编译器调度无关的多条指令(4~16)形成一条长指 令,每个时钟周期流出一条长指令 超级流水线(Super pipelining):将每个功能部件进一 步流水化,使得一个功能部件在一个时钟周期中可以处 理多条指令(可以简单地理解为很长的流水线)

WAW 冲突 (输出相关引起) 如果在SUB.D写入F10 之 前 ADD.D 执 行 结 束 , 会出现问题
寄存器换名可以消除WAR和WAW冲突
指令并行
DIV.D F4,F0,F2 SUB.D F10,F4,F6 ADD.D F8,F12,F14

DIV.D F4,F0,F2 SUB.D F10,F4,F6 ADD.D F8,F6,F14
① 根据历史记录(预测位状态)进行分支预测 ② 根据实际分支情况修改预测位

计算机系统结构--《张晨曦、王志英》课后习题参考答案

计算机系统结构--《张晨曦、王志英》课后习题参考答案

第1章计算机系统结构的基本概念1.1 解释下列术语层次机构: 按照计算机语言从低级到高级的次序, 把计算机系统按功能划分成多级层次结构, 每一层以一种不同的语言为特征。

这些层次依次为: 微程序机器级, 传统机器语言机器级, 汇编语言机器级, 高级语言机器级, 应用语言机器级等。

虚拟机: 用软件实现的机器。

翻译: 先用转换程序把高一级机器上的程序转换为低一级机器上等效的程序, 然后再在这低一级机器上运行, 实现程序的功能。

解释: 对于高一级机器上的程序中的每一条语句或指令, 都是转去执行低一级机器上的一段等效程序。

执行完后, 再去高一级机器取下一条语句或指令, 再进行解释执行, 如此反复, 直到解释执行完整个程序。

计算机系统结构: 传统机器程序员所看到的计算机属性, 即概念性结构与功能特性。

在计算机技术中, 把这种本来存在的事物或属性, 但从某种角度看又好像不存在的概念称为透明性。

计算机组成: 计算机系统结构的逻辑实现, 包含物理机器级中的数据流和控制流的组成以及逻辑设计等。

计算机实现: 计算机组成的物理实现, 包括处理机、主存等部件的物理结构, 器件的集成度和速度, 模块、插件、底板的划分与连接, 信号传输, 电源、冷却及整机装配技术等。

系统加速比: 对系统中某部分进行改进时, 改进后系统性能提高的倍数。

Amdahl定律: 当对一个系统中的某个部件进行改进后, 所能获得的整个系统性能的提高, 受限于该部件的执行时间占总执行时间的百分比。

程序的局部性原理: 程序执行时所访问的存储器地址不是随机分布的, 而是相对地簇聚。

包括时间局部性和空间局部性。

CPI: 每条指令执行的平均时钟周期数。

测试程序套件: 由各种不同的真实应用程序构成的一组测试程序, 用来测试计算机在各个方面的处理性能。

存储程序计算机: 冯·诺依曼结构计算机。

其基本点是指令驱动。

程序预先存放在计算机存储器中, 机器一旦启动, 就能按照程序指定的逻辑顺序执行这些程序, 自动完成由程序所描述的处理工作。

《计算机系统结构》指令级并行及限制 (2)

《计算机系统结构》指令级并行及限制  (2)

3
答案肯定是NO. 因此如果要避免暂停流水线,一个相关指令的执行必须和 被相关的前一条指令的要分开,分开的时钟周期需至少等 于被相关的指令的流水线延迟。
例如: load r1, 100(r2);若顺序执行,则这两条指令之间 必须暂停一个时钟周期。
add r3, r1, 也r4可在这两条指令之间插入一条 非数据相器换名,消除读后写和写后写。
F0、F4:用于展开后的第1个循环体;
F2:保存常数;
F6和F8:用于展开后的第2个循环体; F10和F12:用于第3个循环体;
数据冒险
F14和F16:用于第4个循环体。
Loop:
LD F0 , 0(R1) ADD.D F4 , F0 , F2 SD 0(R1) , F4 LD F0 , -8(R1) ADD.D F4 , F0 , F2 SD -8(R1) , F4 LD F0 , -16(R1) ADD.D F4 , F0 , F2 SD -16(R1) , F4 LD F0 , -24(R1) ADD.D F4 , F0 , F2 SD -24(R1) , F4 SUBI R1 , R1 , #32 BNEZ R1 , Loop
延迟时钟周期数 3
浮点数据存操作(SD)
2
浮点计算
1
浮点数据取操作(LD) 浮点数据存操作(SD)
0
指令流入时钟
Loop: LD F0 , 0(R1) 1
(空转)
2
ADD.D F4 , F0 , F2 3
(空转)
4
(空转)
5
SD 0(R1) , F4 6
SUBI R1 , R1 , #8 7
(空转)
如Intel的Pentium系列采用动态调度;Intel的Itanium( 用于科学领域和特殊应用)采用静态调度。在RISC机器中,指令 系统支持编译优化,其编译器都会采用静态调度方式,有的也同 时采用动态调度。

9--第4章-2-指令级并行-计算机系统结构

9--第4章-2-指令级并行-计算机系统结构

分支指令
延迟槽
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
下面讨论的转移目标缓冲技术,当命中缓冲区时可以从缓 冲区直接得到目标地址,而不必等到计算出转移地址。
从简单到复杂的动态转移预测技术如下: 1. 转移预测缓存 2. 分支目标缓冲 3. 基于硬件的前瞻执行 以上预测机制的性能随着复杂性与硬件的增加而有效地提高。 6
1. 转移(分支)预测缓存 (branch prediction buffer,BPB)
最简单的是转移预测缓存区(branch prediction buffer, BPB),也称为转移历史表。可以是指令Cache的一个字段集 合,也可以是一个小存储器。 这个缓存有若干记录表项,最简单的是每个表项1位,记录 转移指令最近一次的分支历史,用转移指令地址低位来索引。 可能有几条转移指令都映射到了同一个预测缓存表项。
因此,前瞻执行阶段以后,需要增加一个指令确认阶段( Instruction commit)。 实现前瞻的关键思想是: 允许指令乱序执行,但必须顺序确认。只有确认以后 的结果才是最终的结果,从而避免不可恢复的行为,如更 新机器状态或执行过程发生异常。
22
再定序缓冲(ReOrder Buffer,ROB): 在指令确认前需要
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2020/3/3
21
浮点流水线延迟
产生结果的指令 使用结果的指令 延迟(时钟周期数)
浮点计算
另一个浮点计算
3
浮点计算 浮点store(S.D)
2
浮点load(L.D) 浮点计算
1
浮点load(L.D) 浮点store(S.D)
0
Load指令的结果可以通过定向路径及时送给store指 令,所以延迟为0,不用插入停顿。
6
DADDIU R1,R1,#-8
7
(空转)
8
BNE R1,R2,Loop
9
(空转)
10
每个元素的操作需要10个时钟周期,其中5个是空 转周期。
2020/3/3
25
指令调度以后,程序的执行情况
Loop: L.D F0,0(R1) (空转) ADD.D F4,F0,F2 (空转) (空转) S.D F4, 0(R1)
硬件方法:指令的动态调度、动态分支预测、 多指令流出技术。
软件方法:指令的静态调度、循环展开技术。 软硬件结合方法:显式并行指令计算EPIC。
2020/3/3
19
4.5 循环展开和指令调度
4.5.1 循环展开和指令调度的基本方法
为了充分发挥流水线的作用,必须设法让它满 负荷工作。因此要充分开发指令之间存在的并 行性,找出不相关的指令序列,让它们在流水 线上重叠并行执行。
2020/3/3
22
例4.6 对于下面的源代码,转换成MIPS汇编语言, 在不进行指令调度和进行指令调度两种情况下, 分析其代码一次循环所需的执行时间。
for (i=1; i<=1000; i++)
x[i] = x[i] + s;
解:
该循环的不同迭代之间不存在相关,所以多次迭 代可以并行执行。
在每一次循环的内部,没有任何的并行性。 每一次循环都可以与其他的循环重叠并行执
行。 开发循环级并行性是增加指令之间并行性的最
简单和最常用的方法。
2020/3/3
7
开发循环级并行的基本技术
采用循环展开技术 采用向量指令和向量数据表示
2020/3/3
8
(2)解决相关与流水线冲突问题
相关是程序固有的一种属性,它反映了程序中 指令之间的相互依赖关系。
如果能做到保持程序的数据相关和控制相关, 就能保持程序的数据流和异常行为。
2020/3/3
13
例:
DADDU R2,R3,R4
BEQZ R2,L1
LW
R1,0(R2)
L1 :
如果不保持关于R2的数据相关,程序的执行结果 就会改变。
如果不保持控制相关,把LW指令移到BEQZ之前, 就有可能产生一个新的“访存保护”异常(如果 R2=0)。
②通过代码变换,消除相关。
2020/3/3
11
解决相关与冲突时需注意的问题
由于相关的存在,在开发指令级并行时,如果 可能影响到程序的正确性,就必须注意保持程 序顺序。
程序顺序:由源程序确定的在完全串行方式 下指令的执行顺序。
控制相关并不是一个必须严格保持的关键属性。
当存在控制相关时,在对程序的正确性没有 影响的前提下,可以不遵守控制相关的依赖 关系,执行本来不该执行的指令。
2020/3/3
12
必须保持的最关键的两个属性
要正确地执行程序,必须保持的最关键的两个 属性是:数据流和异常行为。
保持异常行为:无论怎么改变指令的执行顺序, 都不能改变程序中异常的发生情况。
原来程序中是怎么发生的,改变执行顺序后 还是怎么发生。
可弱化为:指令执行顺序的改变不能导致程 序中发生新的异常。
2020/3/3
4
IPC(Instructions Per Cycle )
IPC:每个时钟周期内完成的指令条数。 IPC是CPI的倒数。 提高IPC的途径之一是减少CPI流水线 。
2020/3/3
5
2. 基本程序块
基本程序块:一段除了入口和出口以外不 包含其他分支的一个线性代码段。
因为程序往往平均每5~7条指令就会有一 个分支,而且指令之间还可能存在相关, 所以在基本程序块中能开发的并行性是很 有限的,很可能比基本块的大小要小很多。
3
(空转)
4
(空转)
5
S.D F4, 0(R1) 6
L.D F6,-8(R1)
7
(空转)
8
ADD.D F8,F6,F2
9
(空转)
10
(空转)
11
S.D F8, -8(R1) 12
L.D F10,-16(R1) 13
(空F10,F2 15
(空转)
16
(空转)
17
2020/3/3
15
例:
DADDU R1,R2,R3 BEQZ R4,L1 DSUBU R1,R5,R6 L1 :… OR R7,R1,R8
OR指令中使用的R1值取决于BEQZ指令分支的 是否成功。即OR与DADDU或DSUBU指令相关。
必须通过保持控制相关,避免对数据流的修改, 以保证数据流的正确。
LOGO
第4章 指令级并行
主讲: 顾一禾
2020/3/3
顾一禾 制作 2013 第5版
本章学习内容
指令级并行的基本概念 指令的动态调度 动态分支预测技术 多指令流出技术
2020/3/3
2
4.1 指令级并行
指令之间存在的潜在并行性称为指令级并 行。(ILP:Instruction-Level Parallelism)
相关的三种类型:数据相关、名相关、控制相 关。
如果两条指令相关,它们就不能并行执行,或 只能部分重叠执行。
由于相关的存在,使得指令流中的下一条指令 不能在指定时钟周期执行,就是发生了流水线 冲突。
相关的存在限制了指令级并行(ILP)的开发。
2020/3/3
9
流水线冲突的三种类型:结构冲突、数据冲突、 控制冲突。
2020/3/3
23
MIPS汇编语言代码:
假设R1的初值指向第一个元素,8(R2)指向最 后一个元素。
Loop:L.D F0,0(R1) //取一个向量元素放入F0
ADD.D F4,F0,F2 //加上在F2中的标量
S.D
F4, 0(R1) //存结果
DADDIU R1,R1, #-8 //将指针减8(每个数据占8个字节) BNE R1,R2,Loop //若R1不等于R2,表示尚未结束,
2020/3/3
27
例子中的问题及解决方案
只有L.D、ADD.D和S.D这3条指令是有效 操作,占用3个时钟周期。而DADDIU、 空转和BEN这3个时钟周期都是附加的循 环控制开销。有效操作比例不高。
循环展开技术
把循环体的代码复制多次并按顺序排列, 然后相应调整循环的结束条件。
2020/3/3
为了明显地提高性能,必须跨越多个基本 块开发指令的并行性。
2020/3/3
6
3. 开发指令级并行常用的方法
(1)开发循环级并行
循环级并行(Loop-level parallelism): 循环程序不同迭代之间存在的并行性。
例: for (i=1; i≤500; i=i+1) a[i]=a[i]+s;
F0、F4:用于展开后的第1个循环体 F2:用于保存常数 F6、F8:用于展开后的第2个循环体 F10、F12:用于展开后的第3个循环体 F14、F16:用于展开后的第4个循环体
2020/3/3
30
展开后没有调度的代码
Loop:
指令流出时钟
L.D F0,0(R1)
1
(空转)
2
ADD.D F4,F0,F2
结构冲突:由硬件资源冲突造成。
数据冲突:由数据相关和名相关造成。
控制冲突:由控制相关造成。
具体的一次相关是否会导致实际冲突的发生以 及该冲突会带来多长的停顿,根据流水线的属 性而定。
2020/3/3
10
解决相关与冲突的方法
① 保持相关,但避免发生冲突。 方法:指令调度,包括静态调度和动态调度。
28
例4.7 将例4.6中的循环展开3次得到4个循环体, 然后对展开后的指令序列在不调度和调度两种 情况下,分析代码的性能。
设R1的初值为32的倍数,即循环次数为4的倍 数。因此不需要在循环体后面增加补偿代码。
方法:消除冗余的指令,并且不重复使用寄存 器。
2020/3/3
29
分配寄存器(不重复使用寄存器 )
★DSUBU不能被移到BEQZ之前。
2020/3/3
16
有时,不遵守控制相关既不影响异常行为, 也不改变数据流。在这种情况下,可以大胆 地进行指令调度,把失败分支中的指令调度 到分支指令之前。
2020/3/3
17
例: DADDU BEQZ DSUBU DADDU
Skipnext: OR
增加指令间并行性最简单和最常用的方法
开发循环级并行性—循环的不同迭代之间存 在的并行性。
在把循环展开后,通过重命名和指令调度来 开发更多的并行性。
2020/3/3
20
编译器指令调度能力的限制
编译器完成指令调度的能力受限于两个特性: 程序固有的指令级并行性; 流水线功能部件的执行延迟。
2020/3/3
32
对指令序列进行优化调度
Loop: L.D
L.D
L.D
L.D
ADD.D
ADD.D
ADD.D
ADD.D
S.D
S.D
DADDIU
相关文档
最新文档