第三章 流水线技术流水线技术是提高 CPU性能和运算部件性能的一类主要技术,也是现代计算机系统设计中的一项关键技术。
即现代 CPU设计的关键是高性能的流水线。
流 水 段 分 支 指 令 操 作
IF
ID
EX
IF/ID.IR ← Mem[PC]; IF/ID.NPC,PC ←
(if ID/EX.cond {ID/EX.NPC} else {PC+4});
ID/EX.A ← Regs[IF/ID.IR6..10]; ID/EX.B ← Regs[IF/ID.IR11..15];
ID/EX.NPC ← IF/ID.NPC + (IR16)16##IR16..31;
ID/EX.IR ← IF/ID.IR; ID/EX.cond ← (Regs[IF/ID.IR6..10] op 0;
ID/EX.Imm ← (IR16)16##IR16..31;
MEM
WB
表 3.6 改进后流水线的分支操作从前调度
A D D R 1,R 2,R 3
i f R 2= 0 t hen
延迟槽
i f R 2= 0 t hen
A D D R 1,R 2,R 3
从目标处调度
S U B R 4,R 5,R 6
A D D R 1,R 2,R 3
i f R 1= 0 t hen
延迟槽
S U B R 4,R 5,R 6
A D D R 1,R 2,R 3
i f R 1= 0 t hen
S U B R 4,R 5,R 6
从失败处调度
A D D R 1,R 2,R 3
i f R 1= 0 t hen
S U B R 4,R 5,R 6
延迟槽
A D D R 1,R 2,R 3
i f R 1= 0 t hen
S U B R 4,R 5,R 6
调 度 策 略 对调度的要求 什么情况下起作用?
从 前 调 度从目标处调度从失败处调度必须保证在分支失败时执行被调度的指令不会导致错误。有可能需要复制指令。
被调度的指令必须与分支无关必须保证在分支成功时执行被调度的指令不会导致错误。
任何情况分支成功时
(但由于复制指令,有可能会增大程序空间 )
分支失败时三种方法的要求及效果表 3.7 各种减少分支损失方法的效果调度方法每条分支指令的平均分支损失暂停流水线预测分支成功预测分支失败
1.00
每条条件分支指令的分支损失延迟分支每条无条件分支指令的损失因分支暂停造成的实际 CPI
整型平均浮点平均整型平均整型平均浮点平均浮点平均
1.00
1.00
0.62
0.25
1.00
1.001.00
1.00
1.00
0.69
0.21
1.00 1.17 1.15
1.00 1.17 1.15
0.74 1.12 1.110.70 1.00
0.35 0.00 0.30 1.04 1.04
流水段 功能部件 描 述
A 浮点加法器 尾数加流水段
D 浮点除法器 除法流水段
E 浮点乘法器 例外测试段
M 浮点乘法器 乘法器第一个流水段
N 浮点乘法器 乘法器第二个流水段
R 浮点加法器 舍入段
S 浮点加法器 操作数移位段
U 展开浮点数浮点指令 延 迟 初始化间 隔 使用的流水段加、减 4 3 U,S+A,A+R,R+S
乘 8 4 U,E+M,M,M,M,N,N+A,R
除 36 35 U,A,R,D28,D+A,D+R,D+A,D+R,A,R
求平方根 112 111 U,E,(A+R) 108,A,R
取反 2 1 U,S
求绝对值 2 1 U,S
浮点比较 3 2 U,A,R
基准程序 流水线 CPI 载入暂停时钟周期数分支暂停时钟周期数浮点结果暂停时钟周期数浮点结构性暂停时钟周期数
compress
eqntott
espresso
gcc
li
整数平均
1.20
1.88
1.42
1.56
1.64
1.54
0.14
0.27
0.07
0.13
0.18
0.16
0.06
0.61
0.35
0.43
0.46
0.38
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
doduc
mdljdp2
ear
hydro2d
su2cor
浮点平均
2.84
2.66
2.17
2.53
2.18
2.48
0.01
0.01
0.00
0.00
0.02
0.01
0.22
0.31
0.46
0.62
0.07
0.33
1.39
1.20
0.59
0.75
0.84
0.95
0.22
0.15
0.12
0.17
0.26
0.18
总平均 2.00 0.10 0.36 0.46 0.09
3.1 流水线的基本概念
3.1.1 基本概念
1,产品生产流水线下面通过一个例子来说明流水线的好处,
工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
一种方案,工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
另一种方案:
工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
流水线生产过程的抽象描述,
这种流水工作方式的主要特点,
每件产品还是要经过 4道工序处理,从单件产品角度来看,加工时间并没有改变,但从多件产品角度来看,由于 4道工序在同时进行,处理速度提高 4倍。
指令流水线,
把指令的解释过程分解为,分析,和,执行,
两个子过程,并让这两个子过程分别用独立的分析部件和执行部件来实现。
理想情况,速度提高一倍指令流水线,
浮点加法流水线把浮点加法的全过程分解为,求阶差,,,对阶,,,尾数相加,,,规格化,四个子过程,并让它们分别用各自独立的部件来实现。
理想情况,速度提高 3倍浮点加法流水线时-空图,
时-空图从时间和空间两个方面描述了流水线的工作过程。时-空图中,横坐标代表时间,
纵坐标代表流水线的各个段。
流水技术流水技术 是指:将一个重复的时序过程分解成为若干个子过程,而每个子过程都可有效地在其专用功能段上与其他子过程同时执行。
(1) 流水过程由多个相联系的子过程组成,每个子过程称为流水线的,级,或,段,。,段,
的数目称为流水线的,深度,。
流水技术的特点
(2) 每个子过程由专用的功能段实现;
(3) 各个功能段所需时间应尽量相等,否则,时间长的功能段将成为流水线的瓶颈,会造成流水线的
,堵塞,和,断流,。这个时间一般为一个时钟周期
(拍);(4) 流水线需要有,通过时间,(第一个任务流出结果所需的时间),在此之后流水过程才进入稳定工作状态,每一个时钟周期(拍)流出一个结果;(5) 流水技术适合于大量重复的时序过程,只有输入端能连续地提供任务,流水线的效率才能充分发挥。
3.1.2 流水线的分类
◆ 单功能流水线,只能完成一种固定功能的流水线。
◆ 多功能流水线,流水线的各段可以进行不同的连接,从而实现不同的功能。
例如,TI ASC 的多功能流水线
1.按功能的多少来分
2.按同一时间内各段之间的连接方式来分
◆ 静态流水线,在同一时刻,流水线的各段只能按同一种功能的连接方式工作。
在静态流水线中,只有当输入是一串相同的运算操作时,流水的效率才能得到发挥。
◆ 动态流水线,在同一时刻,流水线的各段可以按不同功能的连接方式工作。
这样就不是非得相同运算的一串操作才能流水处理。
优点,能提高流水线的效率缺点,会使流水线的控制变得复杂
3,按照流水线的级别来分
◆ 部件级流水线 (运算操作流水线):它是把处理机的算术逻辑部件分段,以便为各种数据类型进行流水操作。
◆ 处理机级流水线 (指令流水线):它是把指令的解释执行过程按照流水方式进行处理。
例如,前面把指令解释过程分解为,
分析 和 执行 。
DLX的基本流水线把指令解释过程分解为:
取指令、指令译码、执行、访存、写回 。
◆ 处理机间流水线 (宏流水线):它是指由两个以上的处理机串行地对同一数据流进行处理,
每个处理机完成一项任务。
4,按照数据表示来分
◆ 向量处理机,具有向量指令和向量数据表示的处理机。
例如,TI ASC,CRAY-I 等
◆ 标量处理机,不具有向量指令和向量数据表示,
仅对标量进行流水处理的处理机。
例如,IBM360/91,Amdahl 470V/6 等
5,按照是否有反馈回路来分
◆ 线性流水线,流水线中的各段串行连接,没有反馈回路。
◆ 非线性流水线,流水线中的各段除有串行连接外,还有反馈回路。
◆ 顺序流动流水线,流水线输出端任务流出的顺序与输入端任务流入的顺序 相同 。
◆ 异步流动流水线 (乱序流水线):流水线输出端任务流出的顺序与输入端任务流入的顺序不同 。
例如,动态流水线
6,按照流动是否可以乱序来分
3.2 DLX的基本流水线
3.2.1 DLX的一种简单实现非流水线实现最多用 5个时钟周期来实现一条指令:
(1) 取指令周期 (IF,Instruction Fetch)
(2) 指令译码 /读寄存器周期 (ID,Instruction Decode)
(3) 执行 /有效地址计算周期 (EX,Execution)
(4) 存储器访问 /分支完成周期 (MEM,Memory Access)
(5) 写回周期 (WB,Write Back)
定义,
ADD,加法器
PC,指令计数器
NPC,下一条顺序指令计数器
IR,指令寄存器
A,B,操作数临时寄存器
Imm,立即数临时寄存器
Cond,条件值寄存器
MUX,多路开关
ALU,运算器
ALU Output:运算器输出寄存器
LMD,存储器数据读取寄存器时钟周期说明:
( 1) 取指令 周期 ( IF)
IR ← Mem[PC]
NPC ← PC + 4
( 2) 指令译码 /读寄存器 周期 ( ID)
操作码译码
A ← Regs[IR 6,.10]
B ← Regs[IR 11..15]
Imm ← (IR 16)16 ## IR16,.31
指令译码和读寄存器是并行进行的。之所以能做到这一点,是因为在 DLX指令格式中,
操作码在固定位臵。这种技术也称为 固定字段译码 。
◆ 存储器访问
ALUOutput ← A + Imm 图示
◆ 寄存器 ― 寄存器 ALU 操作
ALUOutput ← A op B 图示
◆ 寄存器 ― 立即值 ALU 操作
ALUOutput ← A op Imm 图示
◆ 分支操作
ALUOutput ← NPC + Imm
Cond ← (A op 0) 图示
( 3) 执行 /有效地址计算 周期 ( EX)
在这个周期,不同的指令有不同的操作。
上述四种操作都要用到 ALU,它们能放在同一个时钟周期中完成的原因:
因为在 DLX 指令集结构中,没有任何指令需要同时 计算数据的存储器地址、计算分支指令的目标地址和进行 ALU数据运算,也即这样做是由 DLX指令集结构本身的特点所允许的。
◆ 存储器访问
LMD ← Mem[ALUOutput]
或 Mem [ALUOutput] ← B 图示
◆ 计算下一条指令地址
if( cond) PC ← ALUOutput
else PC ← NPC 图示
( 5) 写回 周期 ( WB)
不同指令在该周期完成的工作也不一样。
◆ 寄存器 ― 寄存器型 ALU 指令
Regs[IR16..20] ← ALUOutput 图示
◆ 寄存器 ― 立即值型 ALU 指令
Regs[IR11..15] ← ALUOutput 图示
( 4) 存储器访问 /分支完成 周期 ( MEM)
◆ Load 指令
Regs[IR11..15] ← LMD
实现特点,不同的时钟周期之间的数据传递通过记忆装臵来实现,这种记忆装臵可以分外部可见与不可见两类,外部可见记忆装臵包括存储器、通用寄存器,PC等,用于在指令之间传递数据;外部不可见记忆装臵为一些临时寄存器,包括 LMD,Imm,A、
B,IR,NPC,ALUOutput以及 Cond,用于在一条指令的不同周期之间传递数据指令周期数,
分支指令和 Store指令需要 4个时钟周期,
其它指令需要 5个时钟周期假设分支指令占总指令数的 12%,
Store指令占总指令数的 5%
则,
CPI= 4.83
上述实现无论在性能上,还是在硬件开销上,
都不是优化的。
可能改进:
1) 硬件开销 --- ADD由 ALU来完成 ;
(增加数据通路成本 )
2) 改进 CPI --- ALU指令的 WB操作放到 MEM周期完成 ;
其它周期的合并,
3.2.2 基本的 DLX流水线我们可以把 3.2.1中的数据通路流水化:
每个时钟周期启动一条新的指令。
这样,该数据通路中的每一个周期就成了一个流水段。
1,一种简单的 DLX 流水线
2,简单 DLX流水线的流水过程第一种描述( 类似于时空图 )
第二种描述( 按时间错开的数据通路资源 )
3,采用流水技术还应解决好以下几个问题,
上述简单 DLX流水线中:
◆ 指令存储器( IM) 和 数据存储器( DM) 分开,避免了访存冲突。
◆ ID段和 WB段都要访问同一寄存器文件。
ID段:读 WB段:写如何解决对同一寄存器的访问冲突?
( 1) 资源冲突问题例如,不能要求一个 ALU同时既做有效地址计算,又做减法操作。
◆ PC 问题流水线为了能够每个时钟周期启动一条新的指令,就必须在每个时钟周期进行 PC值的加 4操作,并保留新的 PC值。这种操作必须 在 IF段完成,以便为取下一条指令做好准备。
但分支指令也可能改变 PC的值,而且是在 MEM段进行,这会导致冲突 。
为解决问题,我们 重新组织数据通路,
把所有改变 PC值的操作都放在 IF段进行。
但分支指令如何处理?
( 2) 每一流水段内的操作都必须在一个时钟周期内完成
◆ 流水线各段之间需设臵流水线寄存器
(也称为 锁存器 )
◆ 流水线寄存器组及其所含寄存器的 命名例如,ID段和 EX段之间的流水线寄存器组中的 IR寄存器的名称为,ID/EX.IR
◆ 流水线寄存器的作用把数据和控制信息从一个流水段传送到下一个流水段。
◆ 流水线寄存器的构成
( 3) 流水线寄存器(组)
流水段 任何指令类型
ALU 指令 Load/Store 指令 分支指令
IF
ID
EX
IF/ID.IR ← Mem[PC]
IF/ID.NPC,PC ← (if EX/MEM.cond {EX/MEM.ALUOutput} else {PC+4});
ID/EX.A ← Regs[IF/ID.IR6..10]; ID/EX.B ← Regs[IF/ID.IR11..15];
ID/EX.NPC ← IF/ID.NPC; ID/EX.IR ← IF/ID.IR;
ID/EX.Imm ← (IF/ID.IR16)16## IF/ID,IR16..31;
EX/MEM.IR ← ID/EX.IR;
EX/MEM.ALUOutput ←
ID/EX.A func ID/EX.B
或
EX/MEM.ALUOutput ←
ID/EX.A op ID/EX.Imm;
EX/MEM.cond ← 0;
EX/MEM.IR ← ID/EX.IR;
EX/MEM.ALUOutput ←
ID/EX.A + ID/EX.Imm;
EX/MEM.cond ← 0;
EX/MEM.B ←ID/EX.B;
EX/MEM.ALUOutput ←
ID/EX.NPC +
ID/EX.Imm;
EX/MEM.cond ←
(ID/EX.A op 0);
4,DLX流水线的操作流水段 任何指令类型
ALU 指令 Load/Store 指令 分支指令
MEM
WB
MEM/WB.IR ← EX/MEM.IR;
MEM/WB.ALUOutput ←
EX/MEM.ALUOutput;
MEM/WB.IR ← EX/MEM.IR;
MEM/WB.LMD ←
Mem[EX/MEM.ALUOutput];
或
Mem[EX/MEM.ALUOutput] ←
EX/MEM.B;
Regs[MEM/WB.IR16..20]←
MEM/WB.ALUOutput;
或
Regs[MEM/WB.IR11..15]←
MEM/WB.ALUOutput;
Regs[MEM/WB.IR11..15]←
MEM/WB.LMD;
5,DLX流水线的控制主要是确定如何控制那 四个多路选择器,
IF段 MUX:下一条指令地址为增长后的 PC(当前 PC
加 4)或向前数第三条指令的 ALUOutput
的值,前提是那条指令为分支指令并且条件成立
EX段 MUX:上面一个 MUX选择一个操作数是寄存器值还是 NPC(分支指令 ),下面一个 MUX选择另一个操作数是寄存器值还是立即数 (I型指令 )
WB段 MUX:写回寄存器的值来自于 LMD(Load指令 )
或 ALUOutput(ALU指令 )
3.2.3 流水线性能分析吞吐率 是指单位时间内流水线所完成的任务数或输出结果的数量。
1,吞吐率
(1) 最大吞吐率 TPmax
最大吞吐率 是指流水线在连续流动达到稳定状态后所得到的吞吐率。
◆ 若流水线各段的时间相等,均为 △ t0,
则,TPmax= 1 /△ t0
◆ 若流水线各段的时间不等,则:
◆ 最大吞吐率取决于流水线中最慢的一段所需的时间,这段就成了流水线的瓶颈。
◆ 消除瓶颈的方法 (举例 )
▲ 细分瓶颈段
▲ 重复设臵瓶颈段 (时 -空图 )
1
max{△ ti }TPmax= ─────
(2) 实际吞吐率 TP
流水线的实际吞吐率小于最大吞吐率。
◆ 第一种情况:各段时间 相等 (设为 △ t0)
假设流水线由 m 段组成,完成 n 个任务。
▲ 时空图
▲ 完成 n 个任务所需的时间
T流水 = m△ t0+ (n- 1)△ t0 (说明 )
▲ 实际吞吐率
TP = ─── = ──────────T
流水
n
m△ t0+ (n- 1 )△ t0
n
(1+ )△ t0 m- 1
1 TPmax
n
= ──────── = ─────
1+ nm- 1
TP < TPmax
当 n >> m 时,TP ≈ TPmax
▲ 时空图
▲ 完成 n 个任务所需的时间
T流水 = ∑ △ ti+ (n- 1)△ tj △ tj= max{△ ti }
▲ 实际吞吐率
◆ 第二种情况:各段时间 不等
TP = ──────────
∑ △ ti+ (n- 1)△ tjmi=1
n
i=1
m
加速比 是指流水线的速度与等功能非流水线的速度之比。
2,加速比 S
S= T非流水 / T流水
(其中 T流水 和 T非流水 分别为按流水和按非流水方式处理 n 个任务所需的时间)
若流水线为 m 段,且各段时间相等,均为
△ t0,则:
T非流水 = n m△ t0 (解释 )
T流水 = m△ t0+ (n- 1)△ t0
可以看出,当 n >> m 时,S ≈ m
S= ─── = ─────────T非流水T
流水
nm△ t0
m△ t0+ (n- 1)△ t0
mn
m+ n- 1
m
n1+ m- 1
= ──── = ────
S = ──────────
∑ △ ti+ (n- 1)△ tjmi=1
n ∑ △ tii=1
m
若流水线各段的时间不等,则:
效率 是指流水线的设备利用率。
(1) 由于流水线有 通过时间和排空时间,所以流水线的各段并不是一直满负荷地工作。
故,E < 1
3.效率 E
(2) 若各段时间相等,则各段的效率 ei相等,即
e1= e2 = e3= = em= n△ t0/ T流水 (解释 )
整个流水线的效率为,
当 n >> m 时,E ≈ 1
E = ─── = ──── = ─────n△ t0T
流水
n
m+ n- 1
1
n1+ m- 1
(3) 从时-空图上看,效率实际上就是 n 个任务所占的时空区与 m 个段总的时空区 之比,即:
n 个任务占用的时空区E =
━━━━━━━━━━━━━ m 个段总的时空区
……
(4) 由于效率
E = ───── 1
n1+ m- 1而加速比
S = ───── m
n1+ m- 1
因此
E = ── Sm 说明效率和加速比成正比又由于吞吐率,
TP
(1+ )△ t0 m- 1
1
n
= ────────
因此
E = TP? △ t0 说明效率和吞吐率成正比
提高流水线效率所采取的措施对于提高吞吐率也有好处。
n 个任务占用的时空区E =
━━━━━━━━━━━━━ m 个段总的时空区
(5) 若各段时间不相等,则由于
n 个任务占用的时空区 = n
而
∑ △ tii=1
m
m 个段总的时空区 = m? T流水
= m [ ∑ △ ti +(n-1)△ tj ]i=1
m
因此
E = ━━━━━━━━━━━━━━━
m [ ∑ △ ti +(n-1)△ tj ]
i=1
m
∑ △ tii=1
m
n
4.流水线性能分析举例例 3.1 在 静态流水线 上计算 ∑ AiBi,
求:吞吐率,加速比,效率。
4
i=1
解,(1) 确定适合于流水处理的 计算过程 。
(2) 画时空图
(3) 计算性能吞吐率 TP= 7/ (20△ t)
加速比 S= (34△ t)/ (20△ t)= 1.7
效率 E= (4× 4+ 3× 6)/ (8× 20)= 0.21
可以看出,在求解此问题时,该流水线的效率不高。 (原因? )
例 3.3
假设在 DLX的非流水实现和基本流水线中,5个功能单元的时间为,10,8,10,10,7( ns),
流水额外开销为,1ns,求 加速比 S。
解,T非流水 = 10+ 8+ 10+ 10+ 7= 45 (ns)
T流水 = 10+ 1= 11 (ns)
S = 45/ 11= 4.1
动态流水线的时-空图举例 Ⅱ,这样行不行? 正确答案
5.有关流水线性能的若干问题
(1) 流水线并不能减少 (而且一般是增加 )单条指令的执行时间,但却能提高吞吐率。
(2) 增加流水线的深度 (段数 )可以提高流水线的性能。
(3) 流水线的深度受限于流水线的额外开销。
(4) 流水线的额外开销包括:
◆ 流水线寄存器的延迟
◆ 时钟扭曲
(5) 当时钟周期小到与额外开销相同时,流水已没意义。因为这时在每一个时钟周期中已没有时间来做有用的工作。
(6) 需用高速的锁存器来作为流水寄存器。
Earle锁存器 (1965)的三个特点,
◆ 对时钟扭曲不太敏感(相对而言)
◆ 其延迟为常数,2个门级延迟,避免了数据通过锁存器时的扭曲。
(7) 相关问题如果流水线中的指令相互独立,则可以充分发挥流水线的性能。但在实际中,指令间可能会是相互依赖,这会降低流水线的性能。下一节介绍如何解决相关问题。
◆ 锁存器中可以进行两级逻辑运算而不增延迟时间。这样每个流水段中的两级逻辑可以与锁存器重叠,从而能隐藏锁存器开销的绝大部分。
3.3 流水线中的相关
1.相关的概念流水线中的相关 是指相邻或相近的两条指令因存在某种关联,后一条指令不能按照原指定的时钟周期运行 。
◆ 结构相关当硬件资源满足不了同时重叠执行的指令的要求,而发生资源冲突时,就发生了 结构相关 。
2.相关的分类
◆ 数据相关当一条指令需要用到前面某条指令的结果,从而不能重叠执行时,就发生了 数据相关 。
◆ 控制相关当流水线遇到分支指令和其他能够改变
PC 值的指令时,就会发生 控制相关 。
在本章中,我们 约定,
当一条指令被暂停时,暂停其后所有指令
(包括还未进入流水线的指令),但继续执行在其前的、在流水线中的指令。
在暂停期间,流水线不会取新的指令。
3,消除相关的基本方法让流水线中的某些指令暂停,而让其它指令继续执行。
3.3.1 结构相关
1,结构相关的产生原因:因某种指令组合产生资源的访问冲突。
2,解决资源访问冲突的方法:
(1) 把功能部件流水化 ;
(2) 把资源重复设臵。
3,常见的导致结构相关的原因:
◆ 功能部件不是全流水
◆ 重复设臵的资源的份数不够
4,结构相关举例:访存冲突解决方法 Ⅱ,设臵相互独立的指令存储器和数据存储器或设臵相互独立的指令 Cache和数据 Cache。
当数据和指令存在同一存储器中时,访存指令会 导致访存冲突 。
解决办法 Ⅰ,插入暂停周期
(,流水线气泡,或,气泡,)
引入暂停后的时空图
5,避免结构相关,
6,有些设计方案允许有结构相关
◆ 所有功能单元完全流水化
◆ 设臵足够的硬件资源硬件代价很大。
◆ 降低成本
◆ 减少部件的延迟
3.3.2 数据相关
1,数据相关简介当指令在流水线中重叠执行时,流水线有可能改变指令读 /写操作数的顺序,使之不同于它们在非流水实现时的顺序,这将导致数据相关。
数据相关举例
2,利用定向技术减少数据相关引起的暂停定向技术的 主要思路,在发生上述数据相关时,后面的指令并不是马上就要用到前一条指令的计算结果。如果能够将计算结果从其产生的地方直接送到需要它的地方,就可以避免暂停;
采用定向技术消除上例中的相关 过程演示定向技术的实现,在某一个功能单元的输入端和与某一个功能单元输出端具有数据通路的流水寄存器之间通过多路器建立通路。
当定向硬件检测到前面某条指令的结果寄存器就是当前指令的源寄存器时,控制逻辑会开通前面那条指令的结果目前所在的位臵(某个流水寄存器)到当前指令所需的位臵(某个功能单元的输入端)的通路。
不一定是同一个功能单元,例如:
Load指令
ALU指令
DLX中相关功能单元:
(1) ALU
---结果可能在 EX/MEM和 MEM/WB两个流水寄存器组的 ALUOutput寄存器中。
(2) 数据存储器
---结果可能在 MEM/WB流水寄存器组的 LMD寄存器中。
需要开通的数据通路:
ALU输入端、数据存储器输入端至 EX/MEM和
MEM/WB两个流水寄存器组中的 ALUOutput和 LMD寄存器。
3,数据相关的分类
(2) 写后写相关 (WAW)
在 i 写入之前,j 先写。
最后写入的结果是 i 的,错误!
按照指令对寄存器的读写顺序,可以将数据相关分为以下三种类型:
(考虑 两条指令 i 和 j,假设 i 先进入流水线)
(1) 写后读相关 (RAW)
在 i 写入之前,j 先去读。
j 读出的内容是错误的。
这是最常见的相关。
① 这种相关仅出现在这样的流水线中,
◆ 流水线中有多个段可以进行写操作
◆ 当某条指令在流水线中暂停时,允许其后的指令继续向前流动
② DLX整数流水线中不会发生这种相关
(仅在 WB段进行写操作)
③ 若对 DLX作以下修改,则会发生 WAW相关,
◆ 把 ALU操作指令的,写回,移到 MEM段
◆ 假设访问数据存储器需占用两拍举例
(3) 读后写相关 (WAR)
在 i 读之前,j 先写。
i 读出的内容是错误的!
① 这种相关仅出现在这样的流水线中:
有些指令是在流水线的后部读源操作数,
而有些指令则是在流水线的前部写结果。
② DLX流水线中不会发生这种相关;
(读在先 (ID),写在后 (WB))
③ 这种相关很少发生;
(因为流水线一般是先读操作数,后写结果)。
④ 复杂指令可能导致这种相关。
(1) 并非所有的数据相关都可以用定向技术解决;
举例
(2) 增加流水线互锁硬件,
当互锁硬件发现这种相关时,就暂停流水线,直到相关消失。
举例,演示 A 演示 B
4,需要暂停的数据相关
5.对数据相关的编译调度方法
(1) 流水线中常常会遇到许多种类型的暂停;
例如,按通常的代码生成模式,表达式
A= B+ C的代码会导致暂停
(3) 举例:
例 3.6 请为下列表达式生成没有暂停的 DLX
指令序列:
a= b+ c ;
d= e- f ;
假设载入延迟为 1个时钟周期。
题解
(2) 编译器可以通过重新排列代码的顺序来消除这种暂停,这种技术称为 流水线调度 或指令调度 ;
(1) 指令发射 (issue),指令从译码段 (ID)进入执行段 (EX);
相应的指令称为 已发射的指令 。
(2) DLX整数流水线中,可以在 ID段检测所有的数据相关;
若数据相关,则在指令 发射 前,让其暂停。
这样能减少硬件复杂度 (因为不必挂起已改变了机器状态的指令)
(3) 至于定向:可以在 ID段确定需要什么样的定向,并设臵相应的控制;也可以在需要用到操作数的那个时钟周期检测并实现定向;
6,对 DLX流水线控制的实现举例说明,Load互锁 ( 由 Load指令引起的 RAW相关的互锁 )
结论,是否引起暂停,仅需把 Load指令的目的寄存器地址与 Load指令后指令的源寄存器地址进行比较。当检测到相关后,控制部件必须在流水线中插入暂停周期,并使 IF和 ID段中的指令停止前进。
▲ 将 ID/EX中的控制部分清,O”。
▲ IF/ID内容回送到其自身入口。
定向逻辑 (有更多的情况要考虑)
如果定向目标是 ALU输入:
(1) 比较的一头是 ALU的两个输入,即 ID/EX的
IR6..10 和 IR11..15
(2) 定向源在 EX段产生 (R-R ALU,ALU立即值 )
▲ 结果在 WB段被写入目标寄存器
▲ 随后的两条指令都可以通过定向获得该结果
▲ 比较的另一头是 EX/MEM和 MEM/WB的 IR11..15
(3) 定向源在 MEM段产生 (LOAD指令 )
▲ 比较的另一头是 MEM/WB的 IR11..15
◆ 所有的定向发生在:
ALU或 DM输出 → ALU输入,DM输入,,O” 检测部件
3.3.3 流水线的控制相关
1,分支指令的执行结果一、分支引起的暂停及减少分支开销的方法
◆ 转移失败,PC值加 4
◆ 转移成功,将 PC值改变为转移目标地址到 MEM段的末尾才改变一旦检测到分支指令 (在 ID段 ),就暂停执行其后的指令,直到分支指令到达 MEM段,
确定出新的 PC值为止。
2,处理分支指令最简单的方法
3,减少分支开销的两种途径在 DLX流水线中,分支转移成功导致 暂停 3个时钟周期 。
若分支指令的频度为 30%,理想 CPI= 1,
则 实际 CPI= 1+ 30% × 3≈2
◆ 在流水线中尽早判断分支转移是否成功;
---在分支不成功时有利;
◆ 转移成功时,尽早计算出转移目标地址。
---在分支成功时有利;
对于 DLX作如下改进,
(1) 把,= 0?,测试移至 ID段;
二、程序中分支的行为特点
(2) 在 ID段增设一个加法器,这样可以把分支开销减少一拍。
改进后流水线的 分支操作 (表 3.6)
1.各种能改变 PC值的指令的执行频度
( SPEC基准程序,DLX上执行)
◆ 条件分支整数程序,14%~ 15%
浮点程序,3%~ 12%
◆ 向前分支与向后分支的比:
3∶1
2,条件分支转移成功的概率
◆ 无条件分支绝大多数,≤ 4%
◆ 平均值
▲ 整数程序向前,13% 无条件,4%
向后,3%
▲ 浮点程序向前,7% 无条件,1%
向右,3%
所有条件分支,67%
向前,60% 向后,85%
(向后分支一般形成循环)
三、减少流水线分支损失的方法
(4种简单的静态方法)
1.,冻结,或,排空,流水线在流水线中停住或删除分支后的指令,
直到知道转移目标地址。
优点:简单 。
2.预测分支失败
◆ 流水线继续照常流动,就像没发生什么似的。
◆ 在知道分支结果之前,分支指令后的指令不能改变机器状态,或者改变了之后能够回退。
◆ 若分支失败,则照常执行;否则,从转移目标处开始取指令执行。
DLX流水线的处理过程
3,预测分支成功
◆ 假设分支转移成功,并开始从分支目标地址处取指令执行。
◆ 起作用的前题:先知道分支目标地址,后知道分支是否成功。
◆ 对 DLX流水线没有任何好处。
4,延迟分支 (delayed branch)
(1) 基本概念把分支开销为 n 的分支指令看成是延迟长度为 n 的分支指令,其后紧跟有 n 个延迟槽。
流水线遇到分支指令时,按正常方式处理,顺带执行延迟槽中的指令,从而减少分支开销。
延迟分支以及指令的执行顺序
(2) 具有一个分支延迟槽的 DLX流水线的 执行过程分支延迟槽中的指令,掩盖,了流水线原来必需插入的暂停周期。
(3) 分支延迟指令的调度(编译器)
任务,在延迟槽中放入有用的指令
◆ 三种调度方法
▲ 从前调度 (最好)
▲ 从目标处调度
▲ 从失败处调度
◆ 这三种方法的要求及效果
◆ 延迟分支调度受到的限制
▲ 对放入延迟槽的指令有限制
▲ 编译器预测分支是否成功的能力若条件不满足? ---填入 NOP指令
◆ 进一步改进:引入,取消分支,(当三种调度的条件均不满足时,预测一个方向并填入指令)
若预测方向正确,正常执行延迟槽中的指令;
否则,将之变为 no-op指令。
,预测成功 -取消,分支的执行过程四、各种分支处理方法的性能
1,假设:
理想 CPI= 1
则流水线的加速比为:
S= T非流水 /T流水 = D/ (1+ C)= D/ (1+ f× p分支 )
D ── 流水线的深度
C ── 分支引起的流水线暂停时钟周期数
(每条指令的平均值 )
f ── 分支的出现频度
p分支 ── 分支开销
2,DLX流水线中各种分支处理方法的开销
(表 3.7)
3.4 流水线计算机实例分析
(MIPS R4000)
3.4.1 MIPS R4000 整型流水线
1,指令集,MIPS-3 指令集 (64位 ),类似于 DLX
共 8个段,较深的流水线有利于提高时钟频率。
超级流水与 DLX流水线相比:把访存操作进一步分段。
取指令,IF,IS
读写数据,DF,DS,TC
2,MIPS R4000 流水线结构
3,流水线中各段的功能
4,指令序列在流水线中的重叠执行过程
5,载入延迟为两个时钟周期
6,指令序列在流水线中的 执行时空图
7,R4000流水线的定向路径比 DLX流水线的多
ALU输入端的定向源有 4个:
EX/DF,DF/DS,DS/TC,TC/WB
8,分支处理
◆ 在 EX段完成分支条件的计算基本分支延迟,3个时钟周期
◆ 采用单周期延迟分支
◆ 预测分支:失败分支
◆ 处理分支指令的时空图
3.4.2 MIPS R4000 浮点流水线
1,R4000浮点部件
◆ 1个浮点除法器
◆ 1个浮点乘法器
◆ 1个浮点加法器
2,8个流水段
(表 3.9)
3,R4000浮点流水线是一种多功能非线性流水线
4,双精度浮点操作指令的延迟、启动间隔以及流水段的使用情况
(表 3.10)
3.4.3 MIPS R4000 流水线的性能分析
1,引起流水线暂停的四个主要原因:
◆ Load暂停,在 Load指令后一个或两个时钟周期内使用 Load的结果;
◆ 分支暂停,分支成功时的两个时钟周期的暂停以及未填或被取消操作的延迟槽;
◆ 浮点结果暂停,由于浮点操作数的 RAW相关而造成的延迟;
◆ 浮点部件结构暂停,为避免浮点部件的冲突,对指令发射的限制而引起的延迟。
2.暂停对 R4000流水线 CPI的影响
(表 3.11)
3.5 向量处理机
3.5.1 向量处理方式和向量处理机
◆ 向量处理机,具有向量数据表示和相应向量指令的流水线处理机。
◆ 标量处理机,不具有向量数据表示和相应向量指令的处理机。
D= A× ( B+ C )
A,B,C,D ── 长度为 N 的向量
1,水平 (横向 )处理方式
Ki= bi+ ci
Di= Ki× ai
相关,N 次功能切换,2N 次
2,垂直 (纵向 )处理方式
K= B+ C
D= K× A
相关,1次功能切换,1次对处理机结构的要求:
存储器 -存储器型操作的运算流水线对存储器的带宽要求很高。
例如,STAR-100,CYBER-205
3,分组 (纵横 )处理方式把向量分成长度为某个固定值的若干组,
组内按纵向方式处理,依次处理各组。
每组内:
相关,1次功能切换,2次对处理机结构的要求:
寄存器 -寄存器型操作的运算流水线。 (举例 )
3.5.2 向量处理机实例分析 (CRAY-I)
1,CRAY-I简介
◆ 美国 CRAY公司
◆ 1976年
◆ 每秒亿次浮点运算
◆ 主频,80MHz 字长,64位
2,CRAY-I的基本结构
◆ 向量运算部件,6 个整数加,逻辑运算,移位浮点加,浮点乘,求倒数
◆ 向量寄存器组,8× 64 V0 ~ V7
◆ 每个 Vi 每个向量运算部件
◆ 向量长度寄存器 VL
◆ 向量屏蔽寄存器 VM
3,CRAY-I向量指令类型
◆ Vk ← V i op Vj
◆ Vk ← S i op Vj
◆ Vk ← 主存
◆ 主存 ← Vi
4,链接特性当两条指令出现,写后读,相关时,若它们不存在功能部件冲突和向量寄存器 (源或目的 )
冲突,就有可能把它们所用的功能部件头尾相接,形成一个链接流水线,进行流水处理。
链接特性 实质上是把流水线,定向,的思想引入到向量执行过程的结果。
5,链接流水线的处理时间计算
◆ 链接流水线的通过时间:
从第一个 (或对 )操作数开始流动算起到第一个结果产生并存入向量寄存器所需的拍数。
◆ 总的处理时间总的处理时间=通过时间+ n- 1
n 向量的长度
◆ 举例
V3 ← 存储器
V2 ← V 0+ V1
V4 ← V 2× V3
链接过程:
数据进入,流出每个功能部件需要 1 拍时间;
加法,访存功能部件需要 6 拍时间延迟;
浮点乘功能部件需要 7 拍时间延迟;
1(送 )+6(访存 )+1(入 )+1(送 )+7(浮乘 )+1(入 )=17拍
3.13 假设各种分支占所有指令数的百分比如下:
条件分支 20%(其中 60%是成功的)
跳转和调用 5%
现有一深度为 4的流水线 ( 流水线有 4段 ),无条件分支在第二个时钟周期结束时被解析出来,而条件分支要到第三个时钟周期结束时才能被解析出来 。 假设第一个流水段是完全独立于指令类型的,即所有指令类型都必须经过第一个流水段的处理,请问在没有任何结构相关的情况下,该流水线在控制相关情况时的加速比是多少?
解:
跳转和调用指令的 CPI=2
条件分支指令的 CPI=60%?3+40%?1=2.2
其余指令的 CPI=1
因此该流水线的
CPI=2?5%+2.2?20%+1?75%=0.1+0.44+0.75=1.29
加速比 = 4/1.29=3.1007752
即现代 CPU设计的关键是高性能的流水线。
流 水 段 分 支 指 令 操 作
IF
ID
EX
IF/ID.IR ← Mem[PC]; IF/ID.NPC,PC ←
(if ID/EX.cond {ID/EX.NPC} else {PC+4});
ID/EX.A ← Regs[IF/ID.IR6..10]; ID/EX.B ← Regs[IF/ID.IR11..15];
ID/EX.NPC ← IF/ID.NPC + (IR16)16##IR16..31;
ID/EX.IR ← IF/ID.IR; ID/EX.cond ← (Regs[IF/ID.IR6..10] op 0;
ID/EX.Imm ← (IR16)16##IR16..31;
MEM
WB
表 3.6 改进后流水线的分支操作从前调度
A D D R 1,R 2,R 3
i f R 2= 0 t hen
延迟槽
i f R 2= 0 t hen
A D D R 1,R 2,R 3
从目标处调度
S U B R 4,R 5,R 6
A D D R 1,R 2,R 3
i f R 1= 0 t hen
延迟槽
S U B R 4,R 5,R 6
A D D R 1,R 2,R 3
i f R 1= 0 t hen
S U B R 4,R 5,R 6
从失败处调度
A D D R 1,R 2,R 3
i f R 1= 0 t hen
S U B R 4,R 5,R 6
延迟槽
A D D R 1,R 2,R 3
i f R 1= 0 t hen
S U B R 4,R 5,R 6
调 度 策 略 对调度的要求 什么情况下起作用?
从 前 调 度从目标处调度从失败处调度必须保证在分支失败时执行被调度的指令不会导致错误。有可能需要复制指令。
被调度的指令必须与分支无关必须保证在分支成功时执行被调度的指令不会导致错误。
任何情况分支成功时
(但由于复制指令,有可能会增大程序空间 )
分支失败时三种方法的要求及效果表 3.7 各种减少分支损失方法的效果调度方法每条分支指令的平均分支损失暂停流水线预测分支成功预测分支失败
1.00
每条条件分支指令的分支损失延迟分支每条无条件分支指令的损失因分支暂停造成的实际 CPI
整型平均浮点平均整型平均整型平均浮点平均浮点平均
1.00
1.00
0.62
0.25
1.00
1.001.00
1.00
1.00
0.69
0.21
1.00 1.17 1.15
1.00 1.17 1.15
0.74 1.12 1.110.70 1.00
0.35 0.00 0.30 1.04 1.04
流水段 功能部件 描 述
A 浮点加法器 尾数加流水段
D 浮点除法器 除法流水段
E 浮点乘法器 例外测试段
M 浮点乘法器 乘法器第一个流水段
N 浮点乘法器 乘法器第二个流水段
R 浮点加法器 舍入段
S 浮点加法器 操作数移位段
U 展开浮点数浮点指令 延 迟 初始化间 隔 使用的流水段加、减 4 3 U,S+A,A+R,R+S
乘 8 4 U,E+M,M,M,M,N,N+A,R
除 36 35 U,A,R,D28,D+A,D+R,D+A,D+R,A,R
求平方根 112 111 U,E,(A+R) 108,A,R
取反 2 1 U,S
求绝对值 2 1 U,S
浮点比较 3 2 U,A,R
基准程序 流水线 CPI 载入暂停时钟周期数分支暂停时钟周期数浮点结果暂停时钟周期数浮点结构性暂停时钟周期数
compress
eqntott
espresso
gcc
li
整数平均
1.20
1.88
1.42
1.56
1.64
1.54
0.14
0.27
0.07
0.13
0.18
0.16
0.06
0.61
0.35
0.43
0.46
0.38
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
doduc
mdljdp2
ear
hydro2d
su2cor
浮点平均
2.84
2.66
2.17
2.53
2.18
2.48
0.01
0.01
0.00
0.00
0.02
0.01
0.22
0.31
0.46
0.62
0.07
0.33
1.39
1.20
0.59
0.75
0.84
0.95
0.22
0.15
0.12
0.17
0.26
0.18
总平均 2.00 0.10 0.36 0.46 0.09
3.1 流水线的基本概念
3.1.1 基本概念
1,产品生产流水线下面通过一个例子来说明流水线的好处,
工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
一种方案,工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
另一种方案:
工序 1
工具 1
工序 2
工具 2
工序 3
工具 3
工序 4
工具 4
流水线生产过程的抽象描述,
这种流水工作方式的主要特点,
每件产品还是要经过 4道工序处理,从单件产品角度来看,加工时间并没有改变,但从多件产品角度来看,由于 4道工序在同时进行,处理速度提高 4倍。
指令流水线,
把指令的解释过程分解为,分析,和,执行,
两个子过程,并让这两个子过程分别用独立的分析部件和执行部件来实现。
理想情况,速度提高一倍指令流水线,
浮点加法流水线把浮点加法的全过程分解为,求阶差,,,对阶,,,尾数相加,,,规格化,四个子过程,并让它们分别用各自独立的部件来实现。
理想情况,速度提高 3倍浮点加法流水线时-空图,
时-空图从时间和空间两个方面描述了流水线的工作过程。时-空图中,横坐标代表时间,
纵坐标代表流水线的各个段。
流水技术流水技术 是指:将一个重复的时序过程分解成为若干个子过程,而每个子过程都可有效地在其专用功能段上与其他子过程同时执行。
(1) 流水过程由多个相联系的子过程组成,每个子过程称为流水线的,级,或,段,。,段,
的数目称为流水线的,深度,。
流水技术的特点
(2) 每个子过程由专用的功能段实现;
(3) 各个功能段所需时间应尽量相等,否则,时间长的功能段将成为流水线的瓶颈,会造成流水线的
,堵塞,和,断流,。这个时间一般为一个时钟周期
(拍);(4) 流水线需要有,通过时间,(第一个任务流出结果所需的时间),在此之后流水过程才进入稳定工作状态,每一个时钟周期(拍)流出一个结果;(5) 流水技术适合于大量重复的时序过程,只有输入端能连续地提供任务,流水线的效率才能充分发挥。
3.1.2 流水线的分类
◆ 单功能流水线,只能完成一种固定功能的流水线。
◆ 多功能流水线,流水线的各段可以进行不同的连接,从而实现不同的功能。
例如,TI ASC 的多功能流水线
1.按功能的多少来分
2.按同一时间内各段之间的连接方式来分
◆ 静态流水线,在同一时刻,流水线的各段只能按同一种功能的连接方式工作。
在静态流水线中,只有当输入是一串相同的运算操作时,流水的效率才能得到发挥。
◆ 动态流水线,在同一时刻,流水线的各段可以按不同功能的连接方式工作。
这样就不是非得相同运算的一串操作才能流水处理。
优点,能提高流水线的效率缺点,会使流水线的控制变得复杂
3,按照流水线的级别来分
◆ 部件级流水线 (运算操作流水线):它是把处理机的算术逻辑部件分段,以便为各种数据类型进行流水操作。
◆ 处理机级流水线 (指令流水线):它是把指令的解释执行过程按照流水方式进行处理。
例如,前面把指令解释过程分解为,
分析 和 执行 。
DLX的基本流水线把指令解释过程分解为:
取指令、指令译码、执行、访存、写回 。
◆ 处理机间流水线 (宏流水线):它是指由两个以上的处理机串行地对同一数据流进行处理,
每个处理机完成一项任务。
4,按照数据表示来分
◆ 向量处理机,具有向量指令和向量数据表示的处理机。
例如,TI ASC,CRAY-I 等
◆ 标量处理机,不具有向量指令和向量数据表示,
仅对标量进行流水处理的处理机。
例如,IBM360/91,Amdahl 470V/6 等
5,按照是否有反馈回路来分
◆ 线性流水线,流水线中的各段串行连接,没有反馈回路。
◆ 非线性流水线,流水线中的各段除有串行连接外,还有反馈回路。
◆ 顺序流动流水线,流水线输出端任务流出的顺序与输入端任务流入的顺序 相同 。
◆ 异步流动流水线 (乱序流水线):流水线输出端任务流出的顺序与输入端任务流入的顺序不同 。
例如,动态流水线
6,按照流动是否可以乱序来分
3.2 DLX的基本流水线
3.2.1 DLX的一种简单实现非流水线实现最多用 5个时钟周期来实现一条指令:
(1) 取指令周期 (IF,Instruction Fetch)
(2) 指令译码 /读寄存器周期 (ID,Instruction Decode)
(3) 执行 /有效地址计算周期 (EX,Execution)
(4) 存储器访问 /分支完成周期 (MEM,Memory Access)
(5) 写回周期 (WB,Write Back)
定义,
ADD,加法器
PC,指令计数器
NPC,下一条顺序指令计数器
IR,指令寄存器
A,B,操作数临时寄存器
Imm,立即数临时寄存器
Cond,条件值寄存器
MUX,多路开关
ALU,运算器
ALU Output:运算器输出寄存器
LMD,存储器数据读取寄存器时钟周期说明:
( 1) 取指令 周期 ( IF)
IR ← Mem[PC]
NPC ← PC + 4
( 2) 指令译码 /读寄存器 周期 ( ID)
操作码译码
A ← Regs[IR 6,.10]
B ← Regs[IR 11..15]
Imm ← (IR 16)16 ## IR16,.31
指令译码和读寄存器是并行进行的。之所以能做到这一点,是因为在 DLX指令格式中,
操作码在固定位臵。这种技术也称为 固定字段译码 。
◆ 存储器访问
ALUOutput ← A + Imm 图示
◆ 寄存器 ― 寄存器 ALU 操作
ALUOutput ← A op B 图示
◆ 寄存器 ― 立即值 ALU 操作
ALUOutput ← A op Imm 图示
◆ 分支操作
ALUOutput ← NPC + Imm
Cond ← (A op 0) 图示
( 3) 执行 /有效地址计算 周期 ( EX)
在这个周期,不同的指令有不同的操作。
上述四种操作都要用到 ALU,它们能放在同一个时钟周期中完成的原因:
因为在 DLX 指令集结构中,没有任何指令需要同时 计算数据的存储器地址、计算分支指令的目标地址和进行 ALU数据运算,也即这样做是由 DLX指令集结构本身的特点所允许的。
◆ 存储器访问
LMD ← Mem[ALUOutput]
或 Mem [ALUOutput] ← B 图示
◆ 计算下一条指令地址
if( cond) PC ← ALUOutput
else PC ← NPC 图示
( 5) 写回 周期 ( WB)
不同指令在该周期完成的工作也不一样。
◆ 寄存器 ― 寄存器型 ALU 指令
Regs[IR16..20] ← ALUOutput 图示
◆ 寄存器 ― 立即值型 ALU 指令
Regs[IR11..15] ← ALUOutput 图示
( 4) 存储器访问 /分支完成 周期 ( MEM)
◆ Load 指令
Regs[IR11..15] ← LMD
实现特点,不同的时钟周期之间的数据传递通过记忆装臵来实现,这种记忆装臵可以分外部可见与不可见两类,外部可见记忆装臵包括存储器、通用寄存器,PC等,用于在指令之间传递数据;外部不可见记忆装臵为一些临时寄存器,包括 LMD,Imm,A、
B,IR,NPC,ALUOutput以及 Cond,用于在一条指令的不同周期之间传递数据指令周期数,
分支指令和 Store指令需要 4个时钟周期,
其它指令需要 5个时钟周期假设分支指令占总指令数的 12%,
Store指令占总指令数的 5%
则,
CPI= 4.83
上述实现无论在性能上,还是在硬件开销上,
都不是优化的。
可能改进:
1) 硬件开销 --- ADD由 ALU来完成 ;
(增加数据通路成本 )
2) 改进 CPI --- ALU指令的 WB操作放到 MEM周期完成 ;
其它周期的合并,
3.2.2 基本的 DLX流水线我们可以把 3.2.1中的数据通路流水化:
每个时钟周期启动一条新的指令。
这样,该数据通路中的每一个周期就成了一个流水段。
1,一种简单的 DLX 流水线
2,简单 DLX流水线的流水过程第一种描述( 类似于时空图 )
第二种描述( 按时间错开的数据通路资源 )
3,采用流水技术还应解决好以下几个问题,
上述简单 DLX流水线中:
◆ 指令存储器( IM) 和 数据存储器( DM) 分开,避免了访存冲突。
◆ ID段和 WB段都要访问同一寄存器文件。
ID段:读 WB段:写如何解决对同一寄存器的访问冲突?
( 1) 资源冲突问题例如,不能要求一个 ALU同时既做有效地址计算,又做减法操作。
◆ PC 问题流水线为了能够每个时钟周期启动一条新的指令,就必须在每个时钟周期进行 PC值的加 4操作,并保留新的 PC值。这种操作必须 在 IF段完成,以便为取下一条指令做好准备。
但分支指令也可能改变 PC的值,而且是在 MEM段进行,这会导致冲突 。
为解决问题,我们 重新组织数据通路,
把所有改变 PC值的操作都放在 IF段进行。
但分支指令如何处理?
( 2) 每一流水段内的操作都必须在一个时钟周期内完成
◆ 流水线各段之间需设臵流水线寄存器
(也称为 锁存器 )
◆ 流水线寄存器组及其所含寄存器的 命名例如,ID段和 EX段之间的流水线寄存器组中的 IR寄存器的名称为,ID/EX.IR
◆ 流水线寄存器的作用把数据和控制信息从一个流水段传送到下一个流水段。
◆ 流水线寄存器的构成
( 3) 流水线寄存器(组)
流水段 任何指令类型
ALU 指令 Load/Store 指令 分支指令
IF
ID
EX
IF/ID.IR ← Mem[PC]
IF/ID.NPC,PC ← (if EX/MEM.cond {EX/MEM.ALUOutput} else {PC+4});
ID/EX.A ← Regs[IF/ID.IR6..10]; ID/EX.B ← Regs[IF/ID.IR11..15];
ID/EX.NPC ← IF/ID.NPC; ID/EX.IR ← IF/ID.IR;
ID/EX.Imm ← (IF/ID.IR16)16## IF/ID,IR16..31;
EX/MEM.IR ← ID/EX.IR;
EX/MEM.ALUOutput ←
ID/EX.A func ID/EX.B
或
EX/MEM.ALUOutput ←
ID/EX.A op ID/EX.Imm;
EX/MEM.cond ← 0;
EX/MEM.IR ← ID/EX.IR;
EX/MEM.ALUOutput ←
ID/EX.A + ID/EX.Imm;
EX/MEM.cond ← 0;
EX/MEM.B ←ID/EX.B;
EX/MEM.ALUOutput ←
ID/EX.NPC +
ID/EX.Imm;
EX/MEM.cond ←
(ID/EX.A op 0);
4,DLX流水线的操作流水段 任何指令类型
ALU 指令 Load/Store 指令 分支指令
MEM
WB
MEM/WB.IR ← EX/MEM.IR;
MEM/WB.ALUOutput ←
EX/MEM.ALUOutput;
MEM/WB.IR ← EX/MEM.IR;
MEM/WB.LMD ←
Mem[EX/MEM.ALUOutput];
或
Mem[EX/MEM.ALUOutput] ←
EX/MEM.B;
Regs[MEM/WB.IR16..20]←
MEM/WB.ALUOutput;
或
Regs[MEM/WB.IR11..15]←
MEM/WB.ALUOutput;
Regs[MEM/WB.IR11..15]←
MEM/WB.LMD;
5,DLX流水线的控制主要是确定如何控制那 四个多路选择器,
IF段 MUX:下一条指令地址为增长后的 PC(当前 PC
加 4)或向前数第三条指令的 ALUOutput
的值,前提是那条指令为分支指令并且条件成立
EX段 MUX:上面一个 MUX选择一个操作数是寄存器值还是 NPC(分支指令 ),下面一个 MUX选择另一个操作数是寄存器值还是立即数 (I型指令 )
WB段 MUX:写回寄存器的值来自于 LMD(Load指令 )
或 ALUOutput(ALU指令 )
3.2.3 流水线性能分析吞吐率 是指单位时间内流水线所完成的任务数或输出结果的数量。
1,吞吐率
(1) 最大吞吐率 TPmax
最大吞吐率 是指流水线在连续流动达到稳定状态后所得到的吞吐率。
◆ 若流水线各段的时间相等,均为 △ t0,
则,TPmax= 1 /△ t0
◆ 若流水线各段的时间不等,则:
◆ 最大吞吐率取决于流水线中最慢的一段所需的时间,这段就成了流水线的瓶颈。
◆ 消除瓶颈的方法 (举例 )
▲ 细分瓶颈段
▲ 重复设臵瓶颈段 (时 -空图 )
1
max{△ ti }TPmax= ─────
(2) 实际吞吐率 TP
流水线的实际吞吐率小于最大吞吐率。
◆ 第一种情况:各段时间 相等 (设为 △ t0)
假设流水线由 m 段组成,完成 n 个任务。
▲ 时空图
▲ 完成 n 个任务所需的时间
T流水 = m△ t0+ (n- 1)△ t0 (说明 )
▲ 实际吞吐率
TP = ─── = ──────────T
流水
n
m△ t0+ (n- 1 )△ t0
n
(1+ )△ t0 m- 1
1 TPmax
n
= ──────── = ─────
1+ nm- 1
TP < TPmax
当 n >> m 时,TP ≈ TPmax
▲ 时空图
▲ 完成 n 个任务所需的时间
T流水 = ∑ △ ti+ (n- 1)△ tj △ tj= max{△ ti }
▲ 实际吞吐率
◆ 第二种情况:各段时间 不等
TP = ──────────
∑ △ ti+ (n- 1)△ tjmi=1
n
i=1
m
加速比 是指流水线的速度与等功能非流水线的速度之比。
2,加速比 S
S= T非流水 / T流水
(其中 T流水 和 T非流水 分别为按流水和按非流水方式处理 n 个任务所需的时间)
若流水线为 m 段,且各段时间相等,均为
△ t0,则:
T非流水 = n m△ t0 (解释 )
T流水 = m△ t0+ (n- 1)△ t0
可以看出,当 n >> m 时,S ≈ m
S= ─── = ─────────T非流水T
流水
nm△ t0
m△ t0+ (n- 1)△ t0
mn
m+ n- 1
m
n1+ m- 1
= ──── = ────
S = ──────────
∑ △ ti+ (n- 1)△ tjmi=1
n ∑ △ tii=1
m
若流水线各段的时间不等,则:
效率 是指流水线的设备利用率。
(1) 由于流水线有 通过时间和排空时间,所以流水线的各段并不是一直满负荷地工作。
故,E < 1
3.效率 E
(2) 若各段时间相等,则各段的效率 ei相等,即
e1= e2 = e3= = em= n△ t0/ T流水 (解释 )
整个流水线的效率为,
当 n >> m 时,E ≈ 1
E = ─── = ──── = ─────n△ t0T
流水
n
m+ n- 1
1
n1+ m- 1
(3) 从时-空图上看,效率实际上就是 n 个任务所占的时空区与 m 个段总的时空区 之比,即:
n 个任务占用的时空区E =
━━━━━━━━━━━━━ m 个段总的时空区
……
(4) 由于效率
E = ───── 1
n1+ m- 1而加速比
S = ───── m
n1+ m- 1
因此
E = ── Sm 说明效率和加速比成正比又由于吞吐率,
TP
(1+ )△ t0 m- 1
1
n
= ────────
因此
E = TP? △ t0 说明效率和吞吐率成正比
提高流水线效率所采取的措施对于提高吞吐率也有好处。
n 个任务占用的时空区E =
━━━━━━━━━━━━━ m 个段总的时空区
(5) 若各段时间不相等,则由于
n 个任务占用的时空区 = n
而
∑ △ tii=1
m
m 个段总的时空区 = m? T流水
= m [ ∑ △ ti +(n-1)△ tj ]i=1
m
因此
E = ━━━━━━━━━━━━━━━
m [ ∑ △ ti +(n-1)△ tj ]
i=1
m
∑ △ tii=1
m
n
4.流水线性能分析举例例 3.1 在 静态流水线 上计算 ∑ AiBi,
求:吞吐率,加速比,效率。
4
i=1
解,(1) 确定适合于流水处理的 计算过程 。
(2) 画时空图
(3) 计算性能吞吐率 TP= 7/ (20△ t)
加速比 S= (34△ t)/ (20△ t)= 1.7
效率 E= (4× 4+ 3× 6)/ (8× 20)= 0.21
可以看出,在求解此问题时,该流水线的效率不高。 (原因? )
例 3.3
假设在 DLX的非流水实现和基本流水线中,5个功能单元的时间为,10,8,10,10,7( ns),
流水额外开销为,1ns,求 加速比 S。
解,T非流水 = 10+ 8+ 10+ 10+ 7= 45 (ns)
T流水 = 10+ 1= 11 (ns)
S = 45/ 11= 4.1
动态流水线的时-空图举例 Ⅱ,这样行不行? 正确答案
5.有关流水线性能的若干问题
(1) 流水线并不能减少 (而且一般是增加 )单条指令的执行时间,但却能提高吞吐率。
(2) 增加流水线的深度 (段数 )可以提高流水线的性能。
(3) 流水线的深度受限于流水线的额外开销。
(4) 流水线的额外开销包括:
◆ 流水线寄存器的延迟
◆ 时钟扭曲
(5) 当时钟周期小到与额外开销相同时,流水已没意义。因为这时在每一个时钟周期中已没有时间来做有用的工作。
(6) 需用高速的锁存器来作为流水寄存器。
Earle锁存器 (1965)的三个特点,
◆ 对时钟扭曲不太敏感(相对而言)
◆ 其延迟为常数,2个门级延迟,避免了数据通过锁存器时的扭曲。
(7) 相关问题如果流水线中的指令相互独立,则可以充分发挥流水线的性能。但在实际中,指令间可能会是相互依赖,这会降低流水线的性能。下一节介绍如何解决相关问题。
◆ 锁存器中可以进行两级逻辑运算而不增延迟时间。这样每个流水段中的两级逻辑可以与锁存器重叠,从而能隐藏锁存器开销的绝大部分。
3.3 流水线中的相关
1.相关的概念流水线中的相关 是指相邻或相近的两条指令因存在某种关联,后一条指令不能按照原指定的时钟周期运行 。
◆ 结构相关当硬件资源满足不了同时重叠执行的指令的要求,而发生资源冲突时,就发生了 结构相关 。
2.相关的分类
◆ 数据相关当一条指令需要用到前面某条指令的结果,从而不能重叠执行时,就发生了 数据相关 。
◆ 控制相关当流水线遇到分支指令和其他能够改变
PC 值的指令时,就会发生 控制相关 。
在本章中,我们 约定,
当一条指令被暂停时,暂停其后所有指令
(包括还未进入流水线的指令),但继续执行在其前的、在流水线中的指令。
在暂停期间,流水线不会取新的指令。
3,消除相关的基本方法让流水线中的某些指令暂停,而让其它指令继续执行。
3.3.1 结构相关
1,结构相关的产生原因:因某种指令组合产生资源的访问冲突。
2,解决资源访问冲突的方法:
(1) 把功能部件流水化 ;
(2) 把资源重复设臵。
3,常见的导致结构相关的原因:
◆ 功能部件不是全流水
◆ 重复设臵的资源的份数不够
4,结构相关举例:访存冲突解决方法 Ⅱ,设臵相互独立的指令存储器和数据存储器或设臵相互独立的指令 Cache和数据 Cache。
当数据和指令存在同一存储器中时,访存指令会 导致访存冲突 。
解决办法 Ⅰ,插入暂停周期
(,流水线气泡,或,气泡,)
引入暂停后的时空图
5,避免结构相关,
6,有些设计方案允许有结构相关
◆ 所有功能单元完全流水化
◆ 设臵足够的硬件资源硬件代价很大。
◆ 降低成本
◆ 减少部件的延迟
3.3.2 数据相关
1,数据相关简介当指令在流水线中重叠执行时,流水线有可能改变指令读 /写操作数的顺序,使之不同于它们在非流水实现时的顺序,这将导致数据相关。
数据相关举例
2,利用定向技术减少数据相关引起的暂停定向技术的 主要思路,在发生上述数据相关时,后面的指令并不是马上就要用到前一条指令的计算结果。如果能够将计算结果从其产生的地方直接送到需要它的地方,就可以避免暂停;
采用定向技术消除上例中的相关 过程演示定向技术的实现,在某一个功能单元的输入端和与某一个功能单元输出端具有数据通路的流水寄存器之间通过多路器建立通路。
当定向硬件检测到前面某条指令的结果寄存器就是当前指令的源寄存器时,控制逻辑会开通前面那条指令的结果目前所在的位臵(某个流水寄存器)到当前指令所需的位臵(某个功能单元的输入端)的通路。
不一定是同一个功能单元,例如:
Load指令
ALU指令
DLX中相关功能单元:
(1) ALU
---结果可能在 EX/MEM和 MEM/WB两个流水寄存器组的 ALUOutput寄存器中。
(2) 数据存储器
---结果可能在 MEM/WB流水寄存器组的 LMD寄存器中。
需要开通的数据通路:
ALU输入端、数据存储器输入端至 EX/MEM和
MEM/WB两个流水寄存器组中的 ALUOutput和 LMD寄存器。
3,数据相关的分类
(2) 写后写相关 (WAW)
在 i 写入之前,j 先写。
最后写入的结果是 i 的,错误!
按照指令对寄存器的读写顺序,可以将数据相关分为以下三种类型:
(考虑 两条指令 i 和 j,假设 i 先进入流水线)
(1) 写后读相关 (RAW)
在 i 写入之前,j 先去读。
j 读出的内容是错误的。
这是最常见的相关。
① 这种相关仅出现在这样的流水线中,
◆ 流水线中有多个段可以进行写操作
◆ 当某条指令在流水线中暂停时,允许其后的指令继续向前流动
② DLX整数流水线中不会发生这种相关
(仅在 WB段进行写操作)
③ 若对 DLX作以下修改,则会发生 WAW相关,
◆ 把 ALU操作指令的,写回,移到 MEM段
◆ 假设访问数据存储器需占用两拍举例
(3) 读后写相关 (WAR)
在 i 读之前,j 先写。
i 读出的内容是错误的!
① 这种相关仅出现在这样的流水线中:
有些指令是在流水线的后部读源操作数,
而有些指令则是在流水线的前部写结果。
② DLX流水线中不会发生这种相关;
(读在先 (ID),写在后 (WB))
③ 这种相关很少发生;
(因为流水线一般是先读操作数,后写结果)。
④ 复杂指令可能导致这种相关。
(1) 并非所有的数据相关都可以用定向技术解决;
举例
(2) 增加流水线互锁硬件,
当互锁硬件发现这种相关时,就暂停流水线,直到相关消失。
举例,演示 A 演示 B
4,需要暂停的数据相关
5.对数据相关的编译调度方法
(1) 流水线中常常会遇到许多种类型的暂停;
例如,按通常的代码生成模式,表达式
A= B+ C的代码会导致暂停
(3) 举例:
例 3.6 请为下列表达式生成没有暂停的 DLX
指令序列:
a= b+ c ;
d= e- f ;
假设载入延迟为 1个时钟周期。
题解
(2) 编译器可以通过重新排列代码的顺序来消除这种暂停,这种技术称为 流水线调度 或指令调度 ;
(1) 指令发射 (issue),指令从译码段 (ID)进入执行段 (EX);
相应的指令称为 已发射的指令 。
(2) DLX整数流水线中,可以在 ID段检测所有的数据相关;
若数据相关,则在指令 发射 前,让其暂停。
这样能减少硬件复杂度 (因为不必挂起已改变了机器状态的指令)
(3) 至于定向:可以在 ID段确定需要什么样的定向,并设臵相应的控制;也可以在需要用到操作数的那个时钟周期检测并实现定向;
6,对 DLX流水线控制的实现举例说明,Load互锁 ( 由 Load指令引起的 RAW相关的互锁 )
结论,是否引起暂停,仅需把 Load指令的目的寄存器地址与 Load指令后指令的源寄存器地址进行比较。当检测到相关后,控制部件必须在流水线中插入暂停周期,并使 IF和 ID段中的指令停止前进。
▲ 将 ID/EX中的控制部分清,O”。
▲ IF/ID内容回送到其自身入口。
定向逻辑 (有更多的情况要考虑)
如果定向目标是 ALU输入:
(1) 比较的一头是 ALU的两个输入,即 ID/EX的
IR6..10 和 IR11..15
(2) 定向源在 EX段产生 (R-R ALU,ALU立即值 )
▲ 结果在 WB段被写入目标寄存器
▲ 随后的两条指令都可以通过定向获得该结果
▲ 比较的另一头是 EX/MEM和 MEM/WB的 IR11..15
(3) 定向源在 MEM段产生 (LOAD指令 )
▲ 比较的另一头是 MEM/WB的 IR11..15
◆ 所有的定向发生在:
ALU或 DM输出 → ALU输入,DM输入,,O” 检测部件
3.3.3 流水线的控制相关
1,分支指令的执行结果一、分支引起的暂停及减少分支开销的方法
◆ 转移失败,PC值加 4
◆ 转移成功,将 PC值改变为转移目标地址到 MEM段的末尾才改变一旦检测到分支指令 (在 ID段 ),就暂停执行其后的指令,直到分支指令到达 MEM段,
确定出新的 PC值为止。
2,处理分支指令最简单的方法
3,减少分支开销的两种途径在 DLX流水线中,分支转移成功导致 暂停 3个时钟周期 。
若分支指令的频度为 30%,理想 CPI= 1,
则 实际 CPI= 1+ 30% × 3≈2
◆ 在流水线中尽早判断分支转移是否成功;
---在分支不成功时有利;
◆ 转移成功时,尽早计算出转移目标地址。
---在分支成功时有利;
对于 DLX作如下改进,
(1) 把,= 0?,测试移至 ID段;
二、程序中分支的行为特点
(2) 在 ID段增设一个加法器,这样可以把分支开销减少一拍。
改进后流水线的 分支操作 (表 3.6)
1.各种能改变 PC值的指令的执行频度
( SPEC基准程序,DLX上执行)
◆ 条件分支整数程序,14%~ 15%
浮点程序,3%~ 12%
◆ 向前分支与向后分支的比:
3∶1
2,条件分支转移成功的概率
◆ 无条件分支绝大多数,≤ 4%
◆ 平均值
▲ 整数程序向前,13% 无条件,4%
向后,3%
▲ 浮点程序向前,7% 无条件,1%
向右,3%
所有条件分支,67%
向前,60% 向后,85%
(向后分支一般形成循环)
三、减少流水线分支损失的方法
(4种简单的静态方法)
1.,冻结,或,排空,流水线在流水线中停住或删除分支后的指令,
直到知道转移目标地址。
优点:简单 。
2.预测分支失败
◆ 流水线继续照常流动,就像没发生什么似的。
◆ 在知道分支结果之前,分支指令后的指令不能改变机器状态,或者改变了之后能够回退。
◆ 若分支失败,则照常执行;否则,从转移目标处开始取指令执行。
DLX流水线的处理过程
3,预测分支成功
◆ 假设分支转移成功,并开始从分支目标地址处取指令执行。
◆ 起作用的前题:先知道分支目标地址,后知道分支是否成功。
◆ 对 DLX流水线没有任何好处。
4,延迟分支 (delayed branch)
(1) 基本概念把分支开销为 n 的分支指令看成是延迟长度为 n 的分支指令,其后紧跟有 n 个延迟槽。
流水线遇到分支指令时,按正常方式处理,顺带执行延迟槽中的指令,从而减少分支开销。
延迟分支以及指令的执行顺序
(2) 具有一个分支延迟槽的 DLX流水线的 执行过程分支延迟槽中的指令,掩盖,了流水线原来必需插入的暂停周期。
(3) 分支延迟指令的调度(编译器)
任务,在延迟槽中放入有用的指令
◆ 三种调度方法
▲ 从前调度 (最好)
▲ 从目标处调度
▲ 从失败处调度
◆ 这三种方法的要求及效果
◆ 延迟分支调度受到的限制
▲ 对放入延迟槽的指令有限制
▲ 编译器预测分支是否成功的能力若条件不满足? ---填入 NOP指令
◆ 进一步改进:引入,取消分支,(当三种调度的条件均不满足时,预测一个方向并填入指令)
若预测方向正确,正常执行延迟槽中的指令;
否则,将之变为 no-op指令。
,预测成功 -取消,分支的执行过程四、各种分支处理方法的性能
1,假设:
理想 CPI= 1
则流水线的加速比为:
S= T非流水 /T流水 = D/ (1+ C)= D/ (1+ f× p分支 )
D ── 流水线的深度
C ── 分支引起的流水线暂停时钟周期数
(每条指令的平均值 )
f ── 分支的出现频度
p分支 ── 分支开销
2,DLX流水线中各种分支处理方法的开销
(表 3.7)
3.4 流水线计算机实例分析
(MIPS R4000)
3.4.1 MIPS R4000 整型流水线
1,指令集,MIPS-3 指令集 (64位 ),类似于 DLX
共 8个段,较深的流水线有利于提高时钟频率。
超级流水与 DLX流水线相比:把访存操作进一步分段。
取指令,IF,IS
读写数据,DF,DS,TC
2,MIPS R4000 流水线结构
3,流水线中各段的功能
4,指令序列在流水线中的重叠执行过程
5,载入延迟为两个时钟周期
6,指令序列在流水线中的 执行时空图
7,R4000流水线的定向路径比 DLX流水线的多
ALU输入端的定向源有 4个:
EX/DF,DF/DS,DS/TC,TC/WB
8,分支处理
◆ 在 EX段完成分支条件的计算基本分支延迟,3个时钟周期
◆ 采用单周期延迟分支
◆ 预测分支:失败分支
◆ 处理分支指令的时空图
3.4.2 MIPS R4000 浮点流水线
1,R4000浮点部件
◆ 1个浮点除法器
◆ 1个浮点乘法器
◆ 1个浮点加法器
2,8个流水段
(表 3.9)
3,R4000浮点流水线是一种多功能非线性流水线
4,双精度浮点操作指令的延迟、启动间隔以及流水段的使用情况
(表 3.10)
3.4.3 MIPS R4000 流水线的性能分析
1,引起流水线暂停的四个主要原因:
◆ Load暂停,在 Load指令后一个或两个时钟周期内使用 Load的结果;
◆ 分支暂停,分支成功时的两个时钟周期的暂停以及未填或被取消操作的延迟槽;
◆ 浮点结果暂停,由于浮点操作数的 RAW相关而造成的延迟;
◆ 浮点部件结构暂停,为避免浮点部件的冲突,对指令发射的限制而引起的延迟。
2.暂停对 R4000流水线 CPI的影响
(表 3.11)
3.5 向量处理机
3.5.1 向量处理方式和向量处理机
◆ 向量处理机,具有向量数据表示和相应向量指令的流水线处理机。
◆ 标量处理机,不具有向量数据表示和相应向量指令的处理机。
D= A× ( B+ C )
A,B,C,D ── 长度为 N 的向量
1,水平 (横向 )处理方式
Ki= bi+ ci
Di= Ki× ai
相关,N 次功能切换,2N 次
2,垂直 (纵向 )处理方式
K= B+ C
D= K× A
相关,1次功能切换,1次对处理机结构的要求:
存储器 -存储器型操作的运算流水线对存储器的带宽要求很高。
例如,STAR-100,CYBER-205
3,分组 (纵横 )处理方式把向量分成长度为某个固定值的若干组,
组内按纵向方式处理,依次处理各组。
每组内:
相关,1次功能切换,2次对处理机结构的要求:
寄存器 -寄存器型操作的运算流水线。 (举例 )
3.5.2 向量处理机实例分析 (CRAY-I)
1,CRAY-I简介
◆ 美国 CRAY公司
◆ 1976年
◆ 每秒亿次浮点运算
◆ 主频,80MHz 字长,64位
2,CRAY-I的基本结构
◆ 向量运算部件,6 个整数加,逻辑运算,移位浮点加,浮点乘,求倒数
◆ 向量寄存器组,8× 64 V0 ~ V7
◆ 每个 Vi 每个向量运算部件
◆ 向量长度寄存器 VL
◆ 向量屏蔽寄存器 VM
3,CRAY-I向量指令类型
◆ Vk ← V i op Vj
◆ Vk ← S i op Vj
◆ Vk ← 主存
◆ 主存 ← Vi
4,链接特性当两条指令出现,写后读,相关时,若它们不存在功能部件冲突和向量寄存器 (源或目的 )
冲突,就有可能把它们所用的功能部件头尾相接,形成一个链接流水线,进行流水处理。
链接特性 实质上是把流水线,定向,的思想引入到向量执行过程的结果。
5,链接流水线的处理时间计算
◆ 链接流水线的通过时间:
从第一个 (或对 )操作数开始流动算起到第一个结果产生并存入向量寄存器所需的拍数。
◆ 总的处理时间总的处理时间=通过时间+ n- 1
n 向量的长度
◆ 举例
V3 ← 存储器
V2 ← V 0+ V1
V4 ← V 2× V3
链接过程:
数据进入,流出每个功能部件需要 1 拍时间;
加法,访存功能部件需要 6 拍时间延迟;
浮点乘功能部件需要 7 拍时间延迟;
1(送 )+6(访存 )+1(入 )+1(送 )+7(浮乘 )+1(入 )=17拍
3.13 假设各种分支占所有指令数的百分比如下:
条件分支 20%(其中 60%是成功的)
跳转和调用 5%
现有一深度为 4的流水线 ( 流水线有 4段 ),无条件分支在第二个时钟周期结束时被解析出来,而条件分支要到第三个时钟周期结束时才能被解析出来 。 假设第一个流水段是完全独立于指令类型的,即所有指令类型都必须经过第一个流水段的处理,请问在没有任何结构相关的情况下,该流水线在控制相关情况时的加速比是多少?
解:
跳转和调用指令的 CPI=2
条件分支指令的 CPI=60%?3+40%?1=2.2
其余指令的 CPI=1
因此该流水线的
CPI=2?5%+2.2?20%+1?75%=0.1+0.44+0.75=1.29
加速比 = 4/1.29=3.1007752