指令级并行资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LOGO
第4章 指令级并行
主讲: 顾一禾
2018/9/14
顾一禾 制作 2013 第5版
本章学习内容
指令级并行的基本概念 指令的动态调度
动态分支预测技术
多指令流出技术
2018/9/14
2
4.1 指令级并行
指令之间存在的潜在并行性称为指令级并
行。(ILP:Instruction-Level Parallelism) 只有将硬件技术和软件技术互相配合,才 能够最大限度地挖掘出程序中存在的指令 级并行。
2018/9/14
12
必须保持的最关键的两个属性
要正确地执行程序,必须保持的最关键的两个
属性是:数据流和异常行为。 保持异常行为:无论怎么改变指令的执行顺序, 都不能改变程序中异常的发生情况。 原来程序中是怎么发生的,改变执行顺序后 还是怎么发生。 可弱化为:指令执行顺序的改变不能导致程 序中发生新的异常。 如果能做到保持程序的数据相关和控制相关, 就能保持程序的数据流和异常行为。
2018/9/14
13
例:
DADDU R2,R3,R4 BEQZ R2,L1 LW R1,0(R2) L1 : 如果不保持关于R2的数据相关,程序的执行结果 就会改变。 如果不保持控制相关,把LW指令移到BEQZ之前, 就有可能产生一个新的“访存保护”异常(如果 R2=0)。
2018/9/14
2018/9/14 16
有时,不遵守控制相关既不影响异常行为,
也不改变数据流。在这种情况下,可以大胆 地进行指令调度,把失败分支中的指令调度 到分支指令之前。
2018/9/14
17
例:
DADDU BEQZ DSUBU DADDU Skipnext: OR
R1,R2,R3 R12,Skipnext R4,R5,R6 R5,R4,R9 R7,R8,R9
2018/9/14 7
开发循环级并行的基本技术
采用循环展开技术
采用向量指令和向量数据表示
2018/9/14
8
(2)解决相关与流水线冲突问题
相关是程序固有的一种属性,它反映了程序中
指令之间的相互依赖关系。 相关的三种类型:数据相关、名相关、控制相 关。 如果两条指令相关,它们就不能并行执行,或 只能部分重叠执行。 由于相关的存在,使得指令流中的下一条指令 不能在指定时钟周期执行,就是发生了流水线 冲突。 相关的存在限制了指令级并行(ILP)的开发。
IPC:每个时钟周期内完成的指令条数。
IPC是CPI的倒数。
提高IPC的途径之一是减少CPI流水线 。
2018/9/14
5
2. 基本程序块
基本程序块:一段除了入口和出口以外不
包含其他分支的一个线性代码段。 因为程序往往平均每5~7条指令就会有一 个分支,而且指令之间还可能存在相关, 所以在基本程序块中能开发的并行性是很 有限的,很可能比基本块的大小要小很多。 为了明显地提高性能,必须跨越多个基本 块开发指令的并行性。
如果已知R4在Skipnext后不再被使用,而且
DSUBU指令不会产生异常,那么就可以把 DSUBU指令移到BEQZ之前。 因为这个移动不会改变数据流。
2018/9/14 18
开发指令的并行性的方法
硬件方法:指令的动态调度、动态分支预测、
多指令流出技术。 软件方法:指令的静态调度、循环展开技术。 软硬件结合方法:显式并行指令计算EPIC。
2018/9/14
3
1. 流水线处理机的实际CPI
流水线处理机的实际CPI就是理想流水线
的CPI加上各类停顿的时钟周期数:
CPI流水线 = CPI理想 + 停顿结构冲突 + 停顿数据冲突+ 停顿控制冲突
CPI理想即理想CPI,是衡量流水线最高性
能的指标之一。
2018/9/14
4
IPC(Instructions Per Cycle )
2018/9/14
15
例:
DADDU R1,R2,R3 BEQZ R4,L1 DSUBU R1,R5,R6 L1 :… OR R7,R1,R8
OR指令中使用的R1值取决于BEQZ指令分支的
是否成功。即OR与DADDU或DSUBU指令相关。 必须通过保持控制相关,避免对数据流的修改, 以保证数据流的正确。 ★DSUBU不能被移到BEQZ之前。
14
数据流:指数据值从其产生者指令到其消费者
指令的实际流动。 分支指令使得数据流具有动态性,因为它使 得给定指令的数据可以有多个来源。 仅仅保持数据相关性是不够的,一条指令可 能与多条先前的指令数据相关,程序顺序决 定了哪条指令真正是所需数据的产生者。 只有再加Fra Baidu bibliotek保持控制顺序,才能够保持程序顺 序。
2018/9/14
6
3. 开发指令级并行常用的方法
(1)开发循环级并行 循环级并行(Loop-level parallelism): 循环程序不同迭代之间存在的并行性。 例: for (i=1; i≤500; i=i+1) a[i]=a[i]+s; 在每一次循环的内部,没有任何的并行性。 每一次循环都可以与其他的循环重叠并行执 行。 开发循环级并行性是增加指令之间并行性的最 简单和最常用的方法。
10
解决相关与冲突的方法

保持相关,但避免发生冲突。 方法:指令调度,包括静态调度和动态调度。 ②通过代码变换,消除相关。
2018/9/14
11
解决相关与冲突时需注意的问题
由于相关的存在,在开发指令级并行时,如果
可能影响到程序的正确性,就必须注意保持程 序顺序。 程序顺序:由源程序确定的在完全串行方式 下指令的执行顺序。 控制相关并不是一个必须严格保持的关键属性。 当存在控制相关时,在对程序的正确性没有 影响的前提下,可以不遵守控制相关的依赖 关系,执行本来不该执行的指令。
2018/9/14
9
流水线冲突的三种类型:结构冲突、数据冲突、
控制冲突。 结构冲突:由硬件资源冲突造成。 数据冲突:由数据相关和名相关造成。 控制冲突:由控制相关造成。 具体的一次相关是否会导致实际冲突的发生以 及该冲突会带来多长的停顿,根据流水线的属 性而定。
2018/9/14
相关文档
最新文档