指令级并行--指令的动态调度

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


CDC 6600具有16个功能部件:
4个浮点部件, 5个存储器访问部件
7个整数操作部件
在DLX中,假设有2个乘法器、1个加法器、1 个除法部件和1个整数部件。
5/61
虚拟存储器的特点
1.采用记分牌技术的DLX处理器的基本结构。
寄存器 数据总线 浮点乘法
● ● ● ● ●
浮点乘法
浮点除法
浮点加法
整数部件
虚拟存储器的特点
1/61
4.2 指令的动态调度
4.2.1 动态调度的原理
到目前为止我们所使用流水线的最大的局限性: 指令必须顺序流出 看下面一段代码: DIVD F0 , F2 , F4 ; S1 ADDD F10 , F0 , F8 ; S2:S2对S1数据相关, S2被阻塞 SUBD F12 , F8 ,F14 ;S3:S3与S1、S2都没 有相关,但也被阻塞
虚拟存储器的特点
令 IS F6 , 34(R2) F2 , 45(R3) F0 , F2 , F4 F8 , F6 , F2 F10 , F0 , F6 F6 , F8 , F2 √ √ √ √ √ √
指令状态表
RO √ √ √ √ √ √
EX √ √ √ √ √ √
WR √ √ √ √ √
20/61
功能部件状态表
部件名称 整数 乘法1 乘法2 加法
Busy Op Fi Fj Fk Qj
no no no no
Qk Rj Rk
除法
yes DIVD F10 F0 F6
结果寄存器状态表
no
no
F0
F2
F4
F6
F8
F10

F30
部件名称
虚拟存储器的特点
除法
4.2 指令的动态调度
5.分析记分牌是如何控制指令执行的。 操作在记分牌流水线中前进时,记分牌必须 记录与操作有关的信息,如寄存器号等。 约定: Fj ( FU ) ‘ S1’ :将寄存器 S1 的名字送入 Fj (FU) FU : 指令使用的功能部件 D : 目的寄存器的名字 S1和S2: 源操作数寄存器的名字, Op: 进行的操作 Fj(FU): 功能部件FU的Fj域 result(D):结果寄存器状态表中对应于寄存 器 D的内容,为产生寄存器D中结果的功能部件名。

LD

F6 , 34(R2)
指令状态表
IS √
RO √
EX √
WR √
LD
MULTD SUBD DIVD ADDD
虚拟存储器的特点
F2 , 45(R3)
F0 , F2 , F4 F8 , F6 , F2 F10 , F0 , F6 F6 , F8 , F2

√ √ √


14/61
功能部件状态表
虚拟存储器的特点
22/61
4.2 指令的动态调度

流出(IS) (1) 进入条件 not Busy(FU) and not result(’D’); //判断结构阻塞和写后写 (2) 计分牌记录内容 Busy(FU)←yes; OP(FU)←Op; Fi(FU)←’D’; Fj(FU)←’S1’; Fk(FU)←’S2’;
部件名称 整数 乘法1
Busy Op Fi Fj Fk Qj
yes LD F2 R3 F2 F4 整数 yes MULTD F0
Qk Rj Rk
no no yes
乘法2
加法 除法
no
yes SUBD yes DIVD F8 F10 F6 F2 F0 F6 乘法1
结果寄存器状态表
整数 yes no
no yes
• •
虚拟存储器的特点
前面的某条指令(按顺序流出)还没有读取操作数;
其中某个源操作数寄存器与本指令的目的寄存器相同。
9/61
4.2 指令的动态调度
存在一个问题:就是功能部件到寄存器文件的
数据总线宽度是有限的,当流水线中进入读操作
数段(RO)和写结果段(WB)的功能部件总数超 过可用总线的数目,这会导致结构阻塞。 3. 记分牌需要纪录的信息分为三部分: (1) 指令状态表
虚拟存储器的特点
25/61
4.2 指令的动态调度

写结果(WR) (1)进入条件 f((Fj(f)Fi(FU) or Rj(f)=no) and (Fk(f)Fi(FU) or Rk(f)=no)); //检查是否存在先读后写 (2)计分牌记录内容 f(if Qj(f)=FU then Rj(f)←yes); //有等结果的指令,则数据可用 f(if Qk(f)=FU then Rk(f)←yes); result(Fi(FU))←0; //没有FU使用寄存器Fi为目的寄存器 busy(FU)=no //释放FU
指令将要写结果时记分牌的状态。
虚拟存储器的特点
17/61
4.2 指令的动态调度
图4.3 程序段执行到MULTD将要写结果时记分牌的状态 指 LD 令 IS F6 , 34(R2) √
指令状态表
RO √
EX √
WR √
LD
MULTD SUBD DIVD ADDD
虚拟存储器的特点
F2 , 45(R3)
记录正在执行的各条指令已经进入记
分牌DLX流水线四段中的哪一段。
虚拟存储器的特点
10/61
4.2 指令的动态调度
(2) 功能部件状态表 纪录各个功能部件的状态。每个功能部件 在状态表中都由以下九个域来纪录: Busy: 指示功能部件是否在工作 Op: 功能部件当前执行的操作 Fi: 目的寄存器编号 Fj,fk:源寄存器编号 Qj,Qk:向Rj,Rk中写结果的功能部件 Rj,Rk:表示Fj,Fk是否就绪, 是否已经被使用
虚拟存储器的特点
16/61
4.2 指令的动态调度
(1) 第二个LD指令到MULD和SUBD、MULTD到DIVD 之间以及SUBD到ADDD之间存在着先写后读相关; (2) DIVD和ADDD之间存在着先读后写相关; (3) ADDD和SUBD指令关于浮点加法部件还存在着结 构相关。 图4.3和图4.4分别给出了MULTD指令和DIVD

指令乱序结束带来的最大问题:
异常处理比较复杂
(精确异常处理、不精确异常处理)
虚拟存储器的特点
3/61
4.2 指令的动态调度
4.2.2 动态调度算法之一:记分牌
例:数据先读后写(WAR)相关引起的阻塞 代码序列: DIVD F0 , F2 , F4
ADDD
SUBD

F10 , F0 , F8
F8 , F8 , F14
读操作数(RO) (1)进入条件 Rj· Rk; //解决先写后读,两个源操作数须同时就绪
虚拟存储器的特点
24/61
4.2 指令的动态调度

(2)计分牌记录内容 Rj←no; //已经读走了就绪的数据Rj Rk←no; //已经读走了就绪的数据Rk Qj←0; //不再等待其它FU的计算结果 Qk←0; 执行(EX) (1)结束条件 功能部件操作结束
12/61
4.2 指令的动态调度
LD LD MULTD
F6 , 34(R2) F2 , 45(R3) F0 , F2 , F4
SUBD F8 , F6 , F2
DIVD F10 , F0 , F6 ADDD F6 , F8 , F2
虚拟存储器的特点
13/61
4.2 指令的动态调度
图4.2 DLX记分牌信息组成和记录的信息
F0
F2
F4
F6
F8
F10

F30
部件名称 乘法1 整数
虚拟存储器的特点
加法
除法
4.2 指令的动态调度
例4.3 假设浮点流水线中执行的延迟如下:
加法需2个时钟周期
乘法需10个时钟周期 除法需40个时钟周期 代码段和记分牌信息的起始点状态如图 4.2 。分 别给出MULTD和DIVD准备写结果之前的记分牌状态。 解: 在分析记分牌状态之前,首先需要分析指令之 间存在的相关性,因为相关性会影响指令进入记分 牌DLX流水线的相应段。
26/61
4.2 指令的动态调度
6. 记分牌的性能受限于以下几个方面: (1) 程序指令中可开发的并行性,即是否存在 可以并行执行的不相关的指令。 (2) 记分牌容量。记分牌的容量决定了流水线 能在多大范围内寻找不相关指令。 流水线中可以同时容纳的指令数量又 称为指令窗口。 (3) 功能部件的数目和种类。功能部件的总数 决定了结构冲突的严重程度。 (4) 反相关和输出相关。引起计分牌中先读后 写和写后写阻塞。
虚拟存储器的特点
23/61
4.2 指令的动态调度
Qj←result(’S1’);
//处理’S1’的FU
Qk←result(’S2’);
Rj←not Qj; Rk←not Qk; result(’D’)←FU;

//处理’S2’的FU
//Rj是否可用? //Rk是否可用? //’D’被FU用作目的寄存器
虚拟存储器的特点
11/61
4.2 指令的动态调度
(3) 结果寄存器状态表
每个寄存器在表中有一个域,用于纪录写
入本寄存器的功能部件(编号)。如果当前正 在运行的功能部件没有需要写入本寄存器的,
则相应域置为空。
4. DLX记分牌所要维护的数据结构 给出下列代码运行过程中记分牌保存的信息.
虚拟存储器的特点
虚拟存储器的特点
7/61
4.2 指令的动态调度
(2) 读操作数(Read Operand,记为RO)。 记分牌需要监测源操作数寄存器中数据的 有效性,如果前面已流出的还在运行的指令不 对本指令的源操作数寄存器进行写操作,或者 一个正在工作的功能部件已经完成了对这个寄 存器的写操作,那么此操作数有效。当操作数 有效后,记分牌将启动本指令的功能部件读操 作数并开始执行。 解决了数据的先写后读(RAW)相关。 通过以上步骤,记分牌动态解决了结构相 和数据相关引发的阻塞,指令可能乱序流出。
控制/状态
记分牌
控制/状态
图4.1 具有记分牌的DLX处理器基本结构
虚拟存储器的特点
4.2 指令的动态调度
记分牌电路负责记录资源的使用,并负责相 关检测,控制指令的流出和执行。 2.每条指令在流水线中的执行过程分为四段: (1) 流出(Issue,记为IS) 如果本指令所需的功能部件有空闲,并 且其它正在执行的指令使用的目的寄存器与 本指令的不同,记分牌就向功能部件流出本 指令,并修改记分牌内部的数据记录。 解决了指令间存在的结构相关或写后写相关。
虚拟存储器的特点
2/61
4.2 指令的动态调度

为了允许乱序执行,我们将基本流水线的译码阶段
再分为两个阶段:
(1) 流 出 ( Issue , IS ) :指 令译码 , 检查是 否 存 在结构阻塞。
(2) 读 操 作 数 ( Read Operands , RO ) : 当 没 有 数 据相关引发的阻塞时就读操作数。
27/61
4.2 指令的动态调度
4.2.3 动态调度算法之二:Tomasulo算法
虚拟存储器的特点
8/61
4.2 指令的动态调度
(3) 执行(Execution,记为EX)。 (4) 写结果(Write Result,记为WR)。 记分牌知道指令执行完毕后,如果目标 寄存器空闲,就将结果写入到目标寄存器中, 然后释放本指令使用的所有资源。

检测先读后写(WAR)相关 在出现以下的情况时,就不允许指令写结果:
no yes ADDD yes DIVD F6 F8 F2 F6 乘法1
no no
no yes
F10 F0
结果寄存器状态表
F0 部件名称 乘法1
虚拟存储器的特点
F2
F4
F6 加法
F8
F10 除法

F30
4.2 指令的动态调度
图4.4 程wenku.baidu.com段执行到DIVD将要写结果时记分牌的状态 指 LD LD MULTD SUBD DIVD ADDD
第四章 指令级并行
4.2

指令的动态调度
静态调度:在出现数据相关时 , 为了消除或
者减少流水线空转,编译器确定并分离出程 序中存在相关的指令,然后进行指令调度, 并对代码进行优化。 动态调度:通过硬件重新安排指令的执行顺序,

来调整相关指令实际执行时的关系,减少处理
器空转。 以硬件复杂性的显著增加为代价。
指令乱序执行时就会出现先读后写相关。
记分牌技术的目标: 在资源充足时,尽可能早地执行没有数据阻 塞的指令,达到每个时钟周期执行一条指令。
4/61
虚拟存储器的特点
4.2 指令的动态调度

要发挥指令乱序执行的好处,必须有多条指令 同时处于执行阶段,这就要求有多个功能部件 或功能部件流水化或者两者兼有。 假设:处理器采用多个功能部件。
F0 , F2 , F4 F8 , F6 , F2 F10 , F0 , F6 F6 , F8 , F2

√ √ √ √

√ √ √

√ √ √


18/61
功能部件状态表
部件名称
整数
Busy Op Fi Fj Fk Qj
no
Qk Rj Rk
no no
乘法1
乘法2 加法 除法
yes MULTD F0 F2 F4
相关文档
最新文档