计算机处理器的主要功能是控制指令的解释执行,为
了能引入并行处理,目前普遍使用一种经济有效的方法, 即流水控制方式。
本章讨论的是有关流水控制的概念、原理、涉及的问
题与解决的办法,以及流水控制技术的应用和进一步的发 展。
5.1控制流及其改变
按算法要求控制指令序列的先后顺序执行称控制流,
通常指令的执行顺序是相继的,但控制流经常会发生间断, 破坏顺序性,主要有以下几种情况:
1. 转移指令
不转移:PC = K0 + K1T
转移:控制流发生间断,以目标地址为起始点, 再顺序流动。
Pc pc 转移指令 Pc=k0+k1 K0 T t
(a) (b) 2. 过程调用和返回
可嵌套和递归,返回时从原来断点继续执行。
3. 协同程序
与调用不同,被调用过程不总是从头开始,如下 图。
协同程序A 协同程序B
4. 中断和自陷
为使流水控制方式能高效地解释指令,程序执行的控
制流必须是连续的,因此对控制流的改变要采取有效的措 施,以保证流水控制的实现。
5.2 标量流水工作原理
5.2.1重叠操作方式和先行控制
指令的解释执行有以下几种工作方式: 1. 顺序方式
这种方式指令串行执行,设一条指令的解释分为:取
指、分析、执行三个阶段,指令解释执行如下图所示:
取指k 分析k 执行k 取指k+1 分析k+1 执行k+1 设各阶段执行时间为t,解释n条指令的时间是: T3nt 若各阶段执行时间不同,分别为t取、t分、t执,则解释 n条指令时间为:
n T(t取i+t分i+t执i )
i1 顺序方式控制简单,但指令串行解释速度慢,设备利用率 低。
2. 重叠方式
这是使相邻指令的解释在一些阶段上的操作在时间上
重叠执行,如:
取指k 分析k 执行k
执行 取指 k+1 分析 k+1 k+1
T = ( n + 2) t 或
取指k 分析k 执行k 取指 k+1 分析 k+1 执行 k+1
T = ( 2n + 1) t
重叠方式需增设指令缓冲寄存器,在执行k条指令时存放 k+1条指令。同时还要解决取操作数与取指令都要访问存 储器的冲突。
解决冲突的方法:
• 使用分开的指令存储器和数据存储器,称为哈佛结构,
如Pentium处理器设置有指令Cache和数据Cache。
• 采用多体交叉存储器 • 设置指令缓冲寄存器组
这可预取指令,取指阶段时间短,可以合并到分析阶
段,一条指令解释是分析和执行两个阶段。重叠方式如下: 分析 k k 执行
执行 分析 k+1 k+1 分析 k+2 执行 k+2
T = ( n + 1)t
这称为一次重叠。
3. 先行控制
一次重叠方式中,若分析和执行两个阶段操作时间不
一样,有可能使分析与执行操作有时处于空闲,如下图: 分析k 执行k 空闲 分析k+1 执行k+1
分析k+2 执行k+2
空闲
解释n条指令的时间为:
n T = t分1 +
(max(t分i,t执i –1)) + t执n
i2要消除空闲等待的时间,可进行如下操作:
分析k 执行k 分析k+1 执行k+1 分析k+2 执行k+2
nT = t分1 +
t执I
i1为此,必须采用先行控制技术,即指令预取、指令先行分
析、预取数据等。并增设有关部件,如:指令缓冲站、先 行操作栈、数据缓冲站等。先行控制结构图如下: 主存
存 控
指令 读数据 写数据 缓冲栈 缓冲区 缓冲区
指令分析器 执行 数据缓冲栈
部件
先行操作栈
5.2.2 标量流水工作原理
流水是重叠方式的进步发展,如把一条指令的解释细
分为:取指、译码、执行、访存、写回寄存器五个子过程, 相邻指令之间多个子过程时间上重叠操作,如下图所示。
S空间
(功能段) 建立(填入) 正常(满载) 排空 S5 1 2 3 4 5 n S4 1 2 3 4 5 n S3 1 2 3 4 5 n S2 1 2 3 4 5 n S1 1 2 3 4 5 n t1 t2 t3 t4 t5 tn T时间 m∆t (n-1)∆t 这种工作方式与工厂中的装配流水线相类似,所以称其为 流水方式。上图给出了指令各功能段重叠操作的时间关系, 称此为流水方式的时空图。
流水的物理实现称流水线,其一般结构如下:
L L L L L 输入 S S S 输出
1 2 k 时钟
L :锁存器,锁定时间为∆tl , Si :功能段,延迟时间为∆ts。 1 流水线最高最高工作频率为 :
∆ts + ∆tl 流水线有以下特点:
(1)一条流水线通常由多个流水段组成,
(2) 每个流水段有专门的功能部件,相邻两个功能部
件由锁存器隔开,
(3) 各流水段所需时间是一样的,
(4) 流水线工作分建立、满载和排空三个阶段,
(5) 流水线满载工作时,每隔∆t时间有一个结果流出
流水线。
上面流水线用于指令的解释,其实也可以用于运算操
作,例如浮点运算。下面是浮点加法运算的流水操作。
Aa2p Bb2q
两个浮点数相加分四个阶段:
S1:对阶 r = max(p,q) , t = | p-q | ,小阶尾数右 移t位。
S2:两个尾数相加求和。
S3:规格化尾数,数前导0,左移尾数 S4:修改阶码
设4个段的延时为
S1=60ns S2=50ns S3=90ns S4=80ns L=10ns
四个阶段最大延迟时间为90+10=100ns,流水线满载运行 时,每100ns可完成一次浮点加法操作。
顺序执行时,完成一次浮点加法操作需要的时间为: 2l + S1 + S2 + S3 + S4 = 20 + 60 + 50 + 90 + 80 = 300ns
采用流水线运算速度提高三倍。下图为浮点加法流水线。
P a q b
阶 码 尾数选择器
S1 减法器
t= | p-q | 右移位器
r=max(p,q) L L L
尾 数 r 加法器
S2
L L
前导 0 计数
S3 r 左移位器
L L L
阶 码
S4 加法器
L L
5.2.3 流水线分类
流水线按不同的应用,有不同的结构、形式和功能: 1. 按处理级别分
操作部件级:如浮点加减运算, 指令级:如指令的解释执行,
处理机级:多处理机的流水操作。
2. 按功能分
单功能:只是一种连接,完成一种功能。
多功能:有多种连接组成流水控制,完成多种功能。 如不同连接实现:定点加、浮点加、定点乘 浮点向量点积等。 3. 按工作方式分
静态:同一时间内只能以一种方式工作,可以是单功
能和多功能,多功能时从一种功能切换到另一 种功能,流水线必须排空,然后重新建立。
动态:同一时间内将不同的功能段连接成不同的功能
子集,完成不同的运算功能。
单功能是静态的,动态是多功能的。
4. 按连接方式分
线性:每个功能段从输入到输出只通过一次,无反遗 非线性:有反遗回路,如下图:
输入
S1 S2 S3 S4
输出 5. 按维数分
有一维和之分,如脉动流水控制是平面型的。
5.2.4流水线的主要性能及其分析
衡量流水线性能主要有三个指标: 1. 吞吐率(Tp)
吞吐率是指单位时间内能处理的任务数或输出的结果
数。
(1) 最大吞吐率
流水线达到稳定状态后可获得的吞吐率。表示为:
Tpmax1max(t1,t2,tn)
如下面流水线,
1 2 3 4
∆t ∆t 3∆t ∆t Tpmax13t
流水线工作时钟周期按max{∆ti , i=1,2…n}确定,这是直接 影响吞吐率的,所以称其为瓶颈。
提高流水线吞吐率需寻找并消除瓶颈。一般有两种方 法。
S S4 1 2 3 4 S3 1 2 3 4 S2 1 2 3 4 S1 1 2 3 4 t
• 瓶颈段细分
4 1 3c 2 3a 3b
∆t ∆t ∆t ∆t ∆t ∆t
• 重复设置瓶颈段
3a
1 2 3b 4
∆t ∆t ∆t
3c
3∆t 时空图如下:
S S4 1 2 3 4 5 6 7 8 9 10 S3c 3 6 9 S3b 2 5 8 S3a 1 4 7 S2 1 2 3 4 5 6 7 8 9 10 S1 1 2 3 4 5 6 7 8 9 10 t (2) 实际吞吐率
设流水线由m段组成,时钟周期为∆t,连续处理的任 务数为n,通过各段的时间都是∆t,则:
完成n个任务的时间 T = M∆t + (n-1) ∆t
实际吞吐率 Tpnmt(n1)tTmax1(m1)/n1t(1(m1)/n)
流水线在开始时有一段建立时间,结束时有一段排空时间,
还有各种相关因素使流水线无法继续流动,所以实际吞吐
率总是小于最大吞吐率。当n ›› m时,Tp ≈ Tpmax。 2. 加速比(Sp)
这是流水方式的工作速度与等效的顺序串行方式的工
作速度之比,具体计算如下:
SPnmtmt(n1)tnmmn1m1(m1)/n
当n ›› m时,Sp ≈ m。这说明要获得高的加速比,流水线 的段数m应尽可能大,即加大流水线深度。 3. 效率(E)
效率是指流水线中的各功能段的利用率。具体可用流
水线各段处于工作时间的时空区与流水各段总的时空区的 比来衡量流水线的效率。
n个任务占用的时空区
m段总的时空区
Enmtm(mn1)tnmn1SPmTPt
这说明效率与实际吞吐率Tp成正比。 5.2.5流水线性能分析举例
设有A,B两个向量:
A = (a1,a2,a3,a4) B = (b1,b2,b3,b4)
4 要求在静态加、乘双功能流水线上计算(aibi)。
i1 流水线如下图所示:
乘 1 3 4 6 2 5 加
加法:1 5 6 , 乘法:1 2 3 4 6
1. 流水线先设置加法功能,连续计算ai+bi,(i=1„4)其中
a1+b1,a3+b3 返回x输入端, a2+b2,a4+b4 返回y输入端。
2. 流水线切换为乘法功能,计算:
(a1+b1)(a2+b2) 返回x输入端, (a3+b3)(a4+b4) 返回y输入端。
3. 继续乘法功能计算:
(a1+b1)(a2+b2)(a3+b3)(a4+b4) = ∏(ai+bi) i=1„4。
时空图如下:
S S6 1 2 3 4 1 2 3 s5 1 2 3 4 s4 1 2 3 s3 1 2 3 s2 1 2 3 s1 1 2 3 4 1 2 3 t
总计算时间 T = 17∆t, 流出结果7个。
TPE717t34t53t617t
27t102t93426.4%
顺序串行执行,即非流水操作,所需时间为:
T1 = 4×3∆t + 3×5∆t = 27∆t,所以
SP27t17t1.88
这个例子表明流水线的吞吐率、效率及加速比均不是很理 想,这是由于功能切换时,要有额外的建立和排空的开销。 此外还有相关问题。流水线适合的操作是求解操作相同,
且输入、输出间相互的一大串运算,此时,流水线的 吞吐率可接近最大吞吐率,效率接近于1,而加速比也可 接近流水线的段数值。 5.3流水操作中的主要障碍
流水操作中可能出现的相关会造成流水线断流,下面
以一RISC机的一个五段流水线为例,分析流水线中可能 出现的相关和解决的办法。
不同类型指令在各流水功能段进行的操作
指令 流水段 ALU LOAD/STORE BRANCH
取指 取指 取指 IF 译码 译码 译码 读寄存器堆 读寄存器堆 读寄存器堆 ID 执行 计算访存有效地计算访存有效地 EX 址 址,设置条件码 若条件成立,将 转移目标地址送PC MEM – 访存(读或写) WB 结果写回寄存器堆 将读出的数据写入寄存器堆 5.3.1资源冲突(结构冲突)
这是多条指令进入流水线后,在同一机器周期内争用
同一功能部件所发生的冲突。例如:
时钟 1 2 3 4 5 6 7 8 指令LOAD IF ID EX MEM WB
指令I+1 IF ID EX MEM WB
指令I+2 IF ID EX MEM WB
指令I+3 IF ID EX MEM WB 访存冲突 解决冲突的办法:停顿一拍流水线。 指令LOAD IF ID EX MEM WB
指令I+1 IF ID EX MEM WB
指令I+2 IF ID EX MEM WB
指令I+3 停顿 IF ID EX MEM WB 5.3.2数据相关冲突
这是多条指令在流水线中重叠操作,使对操作数访问
的顺序发生变化所产生的冲突。
常见的是后继指令所需的操作数是前一指令运算的结
果,而此时结果却未产生。称此为先写后读相关,简称为 RAW相关(Read after write) 。例如:
ADD R1,R2,R3 (R2) + (R3)→R1 SUB R4,R1,R5 (R1) – (R5) →R4
指令流水操作:
时钟 1 2 3 4 5 写R1
ADD IF ID EX MEM WB
SUB IF ID EX MEM WB
读R1
ADD指令在笫5时钟周期将运算结果写入R1,而SUB指 令在第3时钟周期就要读R1,显然读出的是R1旧的内容。 解决冲突的办法:
(1) 推后执行,即停顿后继指令的运行。
(2) 相关专用通路,上例中写入R1的ADD运算结果在
EX功能段就已产生,所以可通过硬件设置专用通路将此时 产生的结果直接送往SUB的EX段进行运算,代替读R1。
时钟 1 2 3 4 5 写R1
ADD IF ID EX MEM WB
SUB IF ID EX MEM WB (3) 周期分割,即将写R寄存器堆放在时钟周期的前半
周期,读R寄存器堆放在后半周期,这样在一个周期写读
同一个寄存器时就没有相关问题。如下例: 写R1
ADD R1,R2,R3 IF ID EX MEM WB SUB
AND 读R1 OR R8,R1,R9 ID ID EX
类似于RAW相关,前面指令从存储器读取操作数以供 后继指令使用出现的相关称装载延迟。如下例: 写R1 LOAD R1,A IF ID EX MEM WB ADD R3,R1,R2 IF ID EX MEM WB
读R1
此时专用通路不起作用,因为从存储器读取数据是MEM 功能段,不可能提供ADD指令在EX功能段的运算用。解 决方法有两种:
(1) 停顿流水线直至数据竞争消失,停顿周期称空泡。 (2) 优化编译,重新排序和调度指令序列,以消除空泡。 指令流水线有按序流动和非按序流动之分,由此数据相
关除了RAW,还有WAR和WAW,共三种类形。例如,有i和 j两条指令,i在前,j在后,则三种类型数据相关的含义 为:
RAW—指令j试图在指令i写入寄存器之前就读出该寄
存器内容,。
WAR—指令j试图在指令i读出寄存器之前就写入该寄
存器,这样指令i就会错误地读出该寄存器新的内容。
WAW—指令j试图在指令i写入寄存器之前就写入该寄
存器,这样两次写的先后顺序被颠倒,错误地由指令i写 入的值成为该寄存器的内容。
上述三种数据相关,在按序流动的流水线中只可能出
现RAW相关,而在非按序流动的流水线中,由于允许后进 入流水线的指令超过先进入流水线的指令先流出流水线, 三种数据相关都可能发生。 5.3.3控制转移冲突
这由转移指令引起,简称控制相关。转移指令转移成
功时,在MEM段的未尾将目标地址送PC,这样流水线要停 3拍,例如:
BRANCH IF ID EX MEM WB
指令i+1 停顿 停顿 停顿 IF ID EX MEM WB 指令i+2 停顿 停顿 停顿 IF ID EX MEM„ 指令i+3 停顿 停顿 停顿 IF ID EX „
这就是说执行一条成功转移指令要4拍,而转移指令据统 计要占总指令的1/4,所以它会使流水线的性能下降。如 假定程序中转移指令为25%,其中2/3会发生转移,由此完 成一条指令的平均周期为:
CPI = 0.75×1+0.25×(1/3×1+(2/3)×(3+1))=1.5
这将使流水线的性能降低33%。
减少因转移而引起流水线性能损失的主要方法有:
(1) 尽早判别转移是否发生,尽早生成转移目标地址。
如能在ID段生成转移目标地址,则只须停顿一拍,这
样就可减少性能的降低。
(2) 预取转移成功或不成功两个控制流方向上的目标指令
这种方法使流水线沿两个方向流动,并将一个方向猜
测为成功路径,通常是选取发生频率较高的路径,并在转 移条件码生成之前只对这个方向上的若干条指令进行译码 和取操作数,但不进行操作,或是进行操作但不送运算结 果。一旦条件码生成并表明猜测成功时,就立即进行操作 或送回运算结果,而当猜测错误时,上述操作使全部作废。 在猜测不会转移的另一个方向上,同样也预取若干条 指令,以备一旦猜错时,可加快在这一方向上指令的执行。 (3) 加快和提前形成条件码
如乘除操作结果的符号,只要根据两个操作数的符号
在运算前就可判别。
(4) 加快短循环程序的处理
这是指把短循环程序段全部放入指令缓冲器中,程序
段执行过程中不必再访问主存,可重复执行而加快执行的 速度。
(5) 提高转移方向的猜准率
这是动态预测转移使用的方法。通过考察以前两次转
移的历史预测转移发生或不发生。有四种状态,用2位= 进制位表示。
11和10表示转移发生,00和01表示转移不发生。
预测转移状态图如下:
转移 不转移0 预测发生 预测发生 转移1
11 10
转移1 不转移0 不转移0 预测不发预测不发生 01 转移1 生 00
不转移
从一个状态变到另一个状态,不转移用0表示,转移用1
表示。
水平方向发生状态变化,两个二进位的低位发生变化; 如: 从11变为10或从10变为11。
垂直方向发生状态变化,两个二进位的高位发生变化; 如: 从10变为00或从01变为11。
这种方法,仅当两次连续猜错时,预测状态才会发生改
变。如从11状态变为10,再变为00。这种方法猜准率在 RISC机上实测可达83%。
Pentium机上也采用基于转移历史分析的动态预测转移技
术。其预测转移状态图为:
不发生 不发生 不发生 不发生
预测 预测 预测不 预测 发生11 发生10 发生00 发生01 发生 发生 发生 发生
(6) 采用延迟转移技术
这是一种软件手段,减少由于控制相关造成的流水线
性能下降。具有长度为n的转移延迟执行周期为:
转移指令
后继指令1 转移延迟槽
后继指令2
·
·
后继指令n
转移目标指令(转移发生时)
通常n为1,通过软件调度使后继指令变得有用。有
以下三种调度方法:
a. 将转移指令的前一条指令调度到延迟槽中, 但要
求转移指令必须与此指令不相关。
b. 将转移目标处的那条指令调度到延迟槽中, 但转
转移不发生时,此条指令的执行结果对其他指令没有影响。
c. 将转移不发生时该执行的那条指令调度到延迟槽
中。但当转移发生时,此条指令的执行结果对其他指令没
有影响。
ADD R1,R2,R3 LOOP:SUB R4,R5,R6 ADD R1,R2,R3 if R2=0 then if R1=0 then 延迟槽 延迟槽 ADD R1,R2,R3 if R2=0 then SUB R4,R5,R6 延迟槽
if R2=0 then LOOP:SUB R4,R5,R6 ADD R1,R2,R3 if R1=0 then ADD
ADD R1,R2,R3 SUB R4,R5,R6 if R1=0 then SUB R4,R5,R6
(a) (b) (c) 上述b适用于转移发生概率高的场合,而c则适用于转移 不发生概率高的场合。三种调度都不行时,只有加NOP了。 5.4流水的实现和控制
这主要指流水方式下的中断处理和非线性流水的控制。
5.4.1流水的中断处理
处理流水中的中断比解决控制相关更复杂更困难,其
关键是:断点现场保护及中断后的恢复运行。
处理流水中断的两种方法: 1.不精确断点法
中断发生时不允许后继指令流入流水线,己流入的指
令继续流动直至执行完。然后再执行中断处理程序。 2.精确断点法
中断程序对现场的处理精确到第i条指令,中断处理
完后能恢复i条指令后己进入流水线的各指令的现场。 5.4.2流水调度
在非线性流水线中,功能段之间存在反馈回路,进入
流水线的任务会发生使用功能段的冲突,所以对进入流水 线的任务必须进行调度。
以下主要分析单功能非线性流水调度。
1.预约表
是一个二维表,记录各功能段操作的时间节拍,如下
面的例子。
时间节拍 t S 1 2 3 4 5 6 7 8 9 1 × × 2 × × × 3 × 4 × × 5 × × 功能段 2. 禁止表与冲突向量
禁止表:各功能段操作相间隔的节拍集合,如上例为:
F = (1,5,6,8)
各任务不能按此间隔拍数流入流水线,因为会发生使用功 能段的冲突。
冲突向量:n个二进制位组成的向量
C = (Cn,Cn1,„C2,C1)
其中 Ci0 相隔i拍流入新任务不发生使用功能段冲 突。 i=1,2, „n-1,n Ci1 相隔i拍流入新任务发生使用功能段冲突。
如本例的冲突向量为:C = (10110001) 由冲突向量可知: 间隔拍数为1、5、6、8会发生冲突, 而2、3、4、7则不会发生冲突。 3. 状态图
一个任务在流水线中每一节拍向前推进一段,冲突间
隔拍数随之减1,这相当于将冲实向量右移一位,左边移 空位填入0。如间隔2拍流入新任务,当前的冲突向量为: (10110001) → (00101100) 右移2拍
但新任务流入后,其冲突向量是原始冲突向量,与右
移后的当前冲突向量,合起来形成新的冲突向量。由此给 出后面进入的任务应避开的间隔拍数,即
新冲突向量 = 原始冲突向量 ∨ 当前冲突向量
如隔2拍调入一个任务,新冲突向量为:
(10111101)=(10110001)∨(00101100)
以各种不产生冲突的拍数调入新任务,每次调度都产生
一个冲突向量,直至不产生新的冲突向量为止。这些冲突 向量全体表示为下图形式,称非线性流水线的状态转移图。
7 初始状态 10110001 ≥7 ≥7 ≥7 3 4 2 ≥7
10110111 10111101
3 4 2
10111011 10111111
4. 调度方案
采用状态图中任何一个闭合回路进行调度, 都不会发
生争用功能段冲突。列出状态图中所有的闭合回路,从中 选出平均拍数最少的调度即是最佳的调度方案。此外还可 以选择等间隔调度策略等。本例的各种调度方案如下表:
调度策略 平均间隔拍数
(3,4) 3.50
(2,7) 4.50
(2,2,7) 3.67
(3,4,3,7) 4.25
(3,4,7) 4.67
(4,3,7) 4.67
(3,7) 5.00
(4,7) 5.50
(7) 7
由表中可见,采用隔3拍,后再隔4拍轮流往流水线输 入任务的调度方法为最佳,两次调度,平均每次3.5拍即 可流入一个任务,其吞吐率在各调度方案中是最高的。
对多功能的非线性流水线,可按类似思想,推导出相应
的调度方案,但比较复杂,且实用阶值不大,这里就不讲。 5.5先进的流水技术
目前在改进计算机的性能设计中,应用流水控制技术有
了进一步的发展,主要是动态调度和开发实现在指令一级 的并行性。
5.5.1先进的流水调度方法—动态调度
静态调度是通过软件对指令执行顺序进行调度,从而减
少因各种相关造成的流水线停顿时间。
动态调度主要是通过硬件重新安排指令的执行顺序,以
减少流水的停顿。比较前者,其优点是:
(1) 能处理某些在编译时无法知道的相关情况。 (2) 能简化编译程序设计。 (3) 使代码有可移植性。 其缺点是硬件较为复杂。
5.5.1.1流水的集中式动态调度
为改善顺序流水可能造成功能部件的闲置,应允许流水
线中能按无序(Out-of-order) 方式工作。但由此会引起更 多的相关冲突。解决的办法是通过硬件,对可能的各种相 关进行检测,以保证各功能部件尽可能最大限度地重叠工 作。集中式动态调度方式如下图:
整数部件 指令 浮点加 RF IF ID 浮点乘 浮点除 控制/状态 控制/状态
记录
控制器 EX MEM WB
动态调度主要通过一个称为记录控制器的调度部件,对
流水线中各功能部件的工作状态、进入流水线的各指令的 工作状态、它们所使用的源寄存器和目的寄存器等进行统
一的记录和调度。
集中式动态调度最初在60年代的CDC6600计算机中
采用,目前在超标量机中也采用与此类似的方法。 5.5.1.2流水的分布式动态调度
在IBM 360/91流水计算机中,使用了另一种调度方
法,称分布式动态调度。此方法由日本学者TOMASULO于 1967年提出。
IBM 360/91的浮点运算器部分, 主要包括以下部件
组成。
(1) 运算部分
一个加法部件和一个乘法部件,在两部件的流水操作
允许是无序的,即异步流动。
(2) 保存站
用来保存当前参加运算的数据,加法部件有三个:A1、 A2、A3,编号为1010~1100。乘除部件有二个:M1、M2, 编号1000~1001。
(3) 指令操作缓冲站
存放经分析后送来的指令,译码后,产生相应的控制
信号送到各部件。
(4) 浮点操作数寄存器(FLB)
存放由主存预取来的操作数,作源操作数用。 (5) 浮点寄存器(FLR)
存放操作数的寄存器,作源操作数和目的地址寄存器 用。FLR由F0 ~ F7组成,每个寄存器设“忙” 位一位, 当它为1时,表明该数据己作源操作数用。另外还设有站 号标志,表示数据从何处来。
(6) 存储数据缓冲站(SDB)
存放将写入存储器的数据,也有站号,但单独编址。 (7) 公用数据总线(CDB) 以上各部件间的连接总线。
分布式动态调度是通过以下几分面实现的:
(1) 加法器和乘法器设保存站减少了资源使用冲突。 (2) 调度算法使用保存站,通过对寄存器重命名(改
写站号) 消除WAR和WAW相关。
(3) 通过对FLR寄存器忙位状态的判别,检测是否存
在RAW相关。
(4) CDB公共数据总线作为相关专用通路,将有关数
据直接送往所有需要的功能部件,而不必先写入寄存器再 读出。
运算器的基本结构如下图所示。
存储器总线 指令处理部件 浮点 浮点 浮点
操作数 操作站 寄存器
缓冲站 (FLR) (FLOS)
译码器
存数
缓冲器
(SDB) FLB总线 FLR总线
A1 M1 站号 源1 站号 源2 A2 M2 站号 源1 站号 源2 A3 加法器 乘/除法器
CDB公共数据总线
这种分布式动态调度使用了内部定向原理,其含义是:
B B B B A C A C , A C C
以下是一个实例,通过调度解决数据相关问题。 S1:LD F0,FLB1;(FLB1)→F0
S2:MD F0,FLB2;(F0)×(FLB2)→F0 S3:STD F0,A; (F0)→F0 S4:LD F0,FLB3;(FLB3)→F0
S5:ADD F0,FLB4;(F0)×(FLB4)→F0 (0002)
FLB1(0001) FLB2(0002) FLB1(0001) FLB2 (0001) (0001) F0 ( )×( )(1000) F0 ( )×( )(1000) (1000) A A FLB3(0011) FLB4(0100) FLB3(0011) FLB4(0100) (0011) (0011) F0 ( )×( )(1010) F0 ( )×( )(1010) (1010) (1010)
5.5.1.3动态硬件预测转移方法
这是借助硬件动态地预测转移方向,是尽早生成目标
地址的方法。
硬件是一个类似Cache、称 BTB( Branch target
buffer) 的转移目标缓冲器,其结构如下图所示。BTB中 每行存放的内容为:
左边:记录过去发生过的转移指令地址, 中间:相应转移指令的转移目标地址,
右边:预测转移发生或不发生的2位状态位。
左边的转移指令地址作为标志,供检测用。
欲取指令的PC
预测PC值 2位状态位
预测转移
= ˇ 转移发生,预测PC值应送入PC。
× 转移不发生,按正常顺序进行。 工作原理:将欲取出指令的PC值与BTB中的所有标志
作相联比较,若有相符标志,则将该项中相应的预测转移 目标地址读出,送到PC中。当转移条件成立时,确认其有 效,马上取出转移目标处的指令。否则取消送入PC中的转 移目标地址,并对BTB中内容作相应更改。
动态预测转移方法己在Pentium处理器中得到应用。
5.5.2流水中指令级并行性的进一步开发
提高计算机性能,主要是开发存在于程序中的并行性,
并行性有两种:
粗粒度:处理单位为进程、任务或作立。 细粒度:处理单位为指令或指令中的操作。
计算机系统应开发两种粒度的并行性,这里目||一讨论的是在单 处理机上开发指令级的细粒度并行性。
细粒度并行性,最初一代设计目称CPI=1,新一代为
CPI<1,即在一个周期内完成多条指令。
指令级并行性由并行度衡量,这是指不存在相关、可
并行执行指令数,如以下两个例子:
LOAD R1←M〔R2〕 ADD R2←R1+1 ADD R3←R3+1 SUB R4←R3-R2 FPMUI F5←F3×F4 STOREM〔R4〕←R5
并行度=3 并行度=1 让多条指令并行执行的几种方法如下: 5.5.2.1超级标量方法
每个时钟周期能启动多条指令,在指令流水执行下每
个时钟周期获得多条指令结果。其特点是:
(1) 配置多个性能不同的处理部件,采用多条流水线
进行处理。
(2) 能同时对若干条指令进行译码,将可并行执行的
指令送往不同的执行部件,从而每周期可启动多条指令。
(3) 在程序运行期间由硬件完成指令调度。
所以超标量机是硬件资源重复实现行操作的。一般它对编
执行 执行
0 T 0 T 流水机 超级标量机
每拍启动3条指令 要求并行度=3
译没有太受的要求,但控制复杂,是新一代微处理器采用 的主要结构形式。
5.5.2.2超长指令方法(VLIW)
这种方法是以一条长指令实现多个操作的并行执行,
指令长度达上百位,甚至上千位。同样基于流水方式,并 发操作主要在流水的执行阶段进行,如下图所示。
执行 每拍启动一条长指令,
执行三个操作,相当 于3条指令,要求并 行度=3。 0 1 2 3 4 5 6 T 超长指令的主要特点是:
(1) 单一的控制流,只有一个控制器, 每个周期启动
一条指令。
(2) 超长指令分成多个控制段, 每个字段直接地
控制每个功能部件。
(3) 含有大量的数据通路和功能部件, 由于编译器在
编译时己考虑可能出现的数据相关和资源相关,所以控制 硬件比较简单。
超长指令的长度跟功能部件数有关, 它的生成是由编
译器来完成的。编译器将串行操作的程序列合并为可并行 执行的VLIW指令序列,最大限度地实现操作的并行性。
下面通过一个例子说明VLIW的产生过程,表中左边是
要执行的赋值语句,中间是执行赋值语句的指令序列,右 边则是所需的时间周期。
源代码 操 作 所需周期 LOAD A 1 C = A + B LOAD B 1 C = A + B 1 1 1 1 1 1 1 1 1 2 1 STORE C LOAD I K = I + J K = I + J LOAD J L = M - K STORE K LOAD M L = M – K STORE L Q = C × K Q = C × K STORE Q 一台VLIW机有两个存取部件、一个浮点加部件和一个浮点 乘部件。 上述指令序列在此VLIW机上调整为6条VLIW指 令,只需6个周期。
LOAD A LOAD B LOAD I LOAD J C=A+B LOAD M STORE C K=I+J STORE K L=M-K Q=C×K STORE L STORE Q
这种把串行操作合并为并行操作称压缩,压缩有局部
压缩和全局压缩。全局压缩主要有三种方法:路径调度、 渗透调度和软件流水。
VLIW计算机曾有过商品化的机器,后来虽没有继续推
推广,但其所采用的压缩技术却广泛流传开来。 5.5.2.3展开循环体后调度
这是一种编译优化技术, 基本思想是将执行的循环体
展开多次,虽然增加了源代码长度,但为并行执行调度提
供了更多机会。以下通过一个实例来说明。 假设有一循环体如下:
LOOP:LD F0,0(R1) M((R1)+0)→F0 读出向量元素 ADDD F4,F0,F2 (F0)+(F2)→F4 SD 0(R1),RF4 (F0)→M((R1)+0) 存向量元素 SUB R1,R1,#8 (R1)-8→R1将指针减8个字节 BNEZ R1,LOOP 若(R1)≠0, 则转至标号LOOP 并假定执行相关指令不发生流水线停顿所需延迟为: FPALU指令使用另一个FPALU指令操作结果需等待3个 周期,
STORE指令欲使用由FPALU指令产生的结果需等待2个 周期,
FPALU指令使用由LOAD指令产生的结果需等待1个周期。 由此循环体的执行情况为:
未调度(9个周期) 经调度后(6个周期) LOOP:LD F0,0(R1) ; LOOP:LD F0,(R1) stall ; stall
ADDD F4,F0,F2 ; ADDD F4,F0,F2 stall ; SUB R1,R1,#8, stall ; BNEZ R1,LOOP SD 0(R1),F4 ; SD S(R1),F4
SUB R1,R1,#8 ; SD指令中的R1的偏 BNEZ R1,LOOP ; 移量由0改为8。 stall ;
下面是将循环体展开3次以后再进行调度的精况。 周期
LOOP:LD F0,0(R1) 2 LOOP:LD F0,0(R1) ADDD F4,F0,F2 3 LD F8,-8(R1) SD 0(R1),F4 1 LD F10,-16(R1) LD F8,-8(R1) 2 LD F14,-24(R1) ADDD F6,F8,F2 3 ADDD F4,F0,F2 SD -8(R1),F8 1 ADDD F6,F8,F2 LD F10,-16(R1) 2 ADDD F12,F10,F2 ADDD F12,F10,F2 3 ADDD F16,F14,F2 SD -16(R1),F12 1 SD 0(R1),F4 LD F14,-24(R1) 2 SD -8(R1),F8 ADDD F16,F14,F2 3 SD -16(R1),F12 SD -24(R1),F16 1 SUB R1,R1,#32 SUB R1,R1,#32 1 BNEZ R1,LOOP BNEZ R1,LOOP 2 SD -24(R1),F16
上面左边展开循环体未调度,每个循环体执行需6个周
期,转移指令2个周期,总计共需27个周期, 平均每个 循环体执行为6.75周期。比未展开调度无改进。
右边是循环体展开后再调度,总计只需14个周期,平均
每个循环体执行仅需3.5个周期。有较大的改进。
这种展开循环体调度方法,若与超标量机和VLIW机相结
合,则更加有效。 5.5.2.4软件流水方法
这是借用硬件流水思想,使循环体程序段能重叠执行的
方法。
如有一程序段,长度L,每条指令平均所需时间为t,程
序段需循环执行n次,现展开3次并执行调度,如下图:
L/3 L/3 n/3次 L1 L1(1) L/3 L2(1)L1(2) L L/3 L2 L3(1)L2(2)L1(3) L/3 L/3 L/3 L3 L3(2)L2(3) L3(3)L/3 T=n.l.t T=n/3×5×L/3×t =5/9 nlt
采用软件流水时,将循环程序段展开n次,类似于硬件
流水,它有装入、循环执行和排空三个阶段,在循环阶段 有三个处在不同分段的循环体在并行工作。如下图所示: L1(1) 装入
L2(1) L1(2)
i=1,n-2 n-2次循环
L3(i) L2(i+1) L1(i+2) 体流水
L2(n) L3(n-1)排空
L3(n) 执行时间:T=4Lt/3+(n-2)×Lt/3 =(n+2)Lt/3 软件流水是一种对循环程序执行优化的方法,将不同次循
环中的操作进行重叠,达到充分利用硬件资源的并行性, 缩短程序的执行时间。
5.5.2.5超级流水方法
这是通过加深流水线深度,即增加流水线段数,减少
每一段的时间延迟,从而加快流水线的运行频率,提高运 行速度。如下图所示,每隔1/3拍启动一条指令,并行度 达到3。
执行 每1/3拍启动一条指令, 要求并行度=3。
0 1 2 3 4 5 6 7 T 超级流水线
超级流水与超标量结合,就是超标量、超级流水结构。 如下图:
执行
每拍可启动9条指令, 要求并行度=9。
0 1 2 3 4 5 T 超标量、超级流水机
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务