第七章指令级并行.pdf
文本预览下载声明
第四章 指令级并行
4.1 指令级并行的概念
1. 流水线的性能受限于流水线中指令之间的相关
性:
• 结构相关
• 数据相关(写后读RAW,读后写WAR,写后写WAW)
• 控制相关
CPI流水线= CPI理想+停顿结构相关+停顿写后读+停顿读后写
+停顿写后写+停顿控制相关
本章研究的内容:如何消除这些停顿,使得进入流
水线的指令序列运行时能有更好的并行性
2. 本章所研究的提高指令级并行的技术
(1)循环展开: 控制相关停顿
(2)基本流水线调度: 数据写后读停顿
(3)指令动态调度: 各种数据相关停顿
(4)分支预测: 控制相关停顿
(5)推断: 所有数据/控制相关停顿
(6)多指令流出: 提高理想CPI
其他技术: 如向量计算机(不在本章讨论)
研究范围: 一个基本程序块,如一个循环体
3. 本章主要针对DLX浮点流水线来进行研究,并作如下
的假设:
产生结果指令 使用结果指令 停顿周期数
浮点计算 另外的浮点计算 3
浮点计算 浮点存操作(SD) 2
浮点取操作(LD) 浮点计算 1
浮点取操作(LD) 浮点存操作(SD) 0
而对DLX整型流水线,除了分支指令有一个时钟周期
延迟,其余指令没有延迟 (为方便起见)。
4.1.1 循环展开调度的基本方法
提高指令级并行的最基本方法:
(1)指令调度
(2)循环展开
一般由编译器来完成。
指令调度:通过改变指令在程序中的位置,将相关指令
之间的距离加大到不小于指令执行延迟的时
钟数,使相关指令成为实际上的无关指令。
例: for (i=1; i=1000; i++)
x[i]=x[i] + s;
考虑对应的DLX汇编语言实现.
约定:x[0] 的内存地址为 0 (为简单起见)
R1的初值为x[1000]的地址
F2中存放的值为常量 s
LOOP: LD F0,0(R1)
ADDD F4,F0,F2
SD 0(R1),F4
SUBI R1,R1,#8
BNEZ R1,LOOP
实际运行:
(1) LOOP: LD F0,0(R1)
(2) (空转)
(3) ADDD F4,F0,F2
(4) (空转)
(5) (空转)
(6) SD 0(R1),F4
(7)
显示全部