结构冒险(Structural hazard) 数据冒险(Data hazard) 气泡(Bubble)
控制冒险(Control hazard) 流水线阻塞(Pipeline stall) 空操作(nop)
分支预测(Branch predict) 动态分支预测(Dynamic predict)
分支条件满足(Branch taken) 静态分支预测(Static predict) 延迟分支(Delayed branch) 转发(Forwarding)
分支延迟槽(Delayed branch slot)
旁路(Bypassing)
IPC(Instructions Per Cycle)
流水段寄存器(Pipeline register)
静态多发射(Static multiple issue) 超流水线(Superpipelining) 超标量流水线(Superscalar)
动态多发射(Dynamic multiple issue)
超长指令字VLIW
动态流水线(Dynamic pipelining)
指令预取(Instruction prefetch) 按序发射(in-order issue)
指令分发(Instruction dispatch)
无序发射(out-of-order issue) 重排序缓冲(Reorder buffer)
存储站(Reservation station)
指令提交单元(Instruction commit unit) 按序完成(in-order completion) 2. 简单回答下列问题。
乱序执行(out-of-order execution) 无序完成(out-of-order completion)
(1)流水线方式下,一条指令的执行时间缩短了还是加长了?程序的执行时间缩短了还是加长了?为什
么?
(2)具有什么特征的指令集易于实现指令流水线?
(3)流水线处理器中时钟周期如何确定?单条流水线处理器的CPI为多少?每个时钟周期一定有一条指
令完成吗?为什么?
(4)流水线处理器的控制器实现方式更类似于单周期控制器还是多周期控制器? (5)为什么要在各流水段之间加寄存器?各流水段寄存器的宽度是否都一样?为什么? (6)你能列出哪几种流水线被阻塞的情况?你知道硬件和软件是如何处理它们的吗? (7)超流水线和多发射流水线的主要区别是什么?
(8)静态多发射流水线和动态多发射流水线的主要区别是什么?
(9)为什么说Pentium 4是“CISC壳、RISC核”的体系结构?
3. 假定在一个五级流水线(如图7.5所示)处理器中,各主要功能单元的操作时间为:存储单元:200ps;ALU和加法器:150ps;寄存器堆读口或写口:50ps。请问:
(1)若执行阶段EX所用的ALU操作时间缩短20%,则能否加快流水线执行速度?如果能的话,能加快多少?如果不能的话,为什么?
(2)若ALU操作时间增加20%,对流水线的性能有何影响? (3)若ALU操作时间增加40%,对流水线的性能有何影响? 参考答案:
a. ALU操作时间缩短20%不能加快流水线指令速度。因为存储单元的时间为200ps,所以流水线的时钟周期不会因为ALU操作时间的缩短而变短。
b. ALU操作时间延长20%时,变为180ps,比200ps小,对流水线性能没有影响;
c. ALU操作时间延长40%时,变为210ps,比200ps大,所以,流水线的时钟周期将变为210,其效率降低了(210-200)/200=5%。
4. 假定某计算机工程师想设计一个新CPU,一个典型程序的核心模块有一百万条指令,每条指令执行时间为100ps。请问:
(1)在非流水线处理器上执行该程序需要花多长时间?
(2)若新CPU是一个20级流水线处理器,执行上述同样的程序,理想情况下,它比非流水线处理器快
多少?
(3)实际流水线并不是理想的,流水段间数据传送会有额外开销。这些开销是否会影响指令执行时间
(Instruction latency)和指令吞吐率(Instruction throughput)? 参考答案:
(1)非流水线处理器上执行该程序的时间为:100ps x 106=100μs.
(2)若在一个20级流水线的处理器上执行,理想情况下,每个时钟周期为:100/20=5ps,所以,程序
执行时间约为5 x 106=5μs. 快100/5=20倍。
(3)流水线段之间数据的传递产生的额外开销,使得一条指令的执行时间被延长,即影响 Instruction
latency;同时也拉长了每个流水段的执行时间,即影响 Instruction throughput。 还有什么不理想的因素? ——时钟周期不会是5us ——可能发生阻塞等
5. 假定最复杂的一条指令所用的组合逻辑分成6块,依次为A~F,其延迟分别为80ps、30ps、60ps、50ps、70ps、10ps。在这些组合逻辑块之间插入必要的流水段寄存器就可实现相应的指令流水线,寄存器延迟为20ps。理想情况下,以下各种方式所得到的时钟周期、指令吞吐率和指令执行时间各是多少?应该在哪里插入流水线寄存器?
(1)插入一个流水段寄存器,得到一个两级流水线 (2)插入两个流水段寄存器,得到一个三级流水线 (3)插入三个流水段寄存器,得到一个四级流水线 (4)吞吐量最大的流水线 参考答案:
(1)两级流水线的平衡点在C和D之间,其前面一个流水段的组合逻辑延时为80+30+60=170ps,后面一个流水段的组合逻辑延时为50+70+10=130ps。这样每个流水段都以最长延时调整为
170+20=190ps,故时钟周期为190ps,指令吞吐率为1/190ps=5.26GOPS,每条指令的执行时间为2x190=380ps。
(2)两个流水段寄存器分别插在B和C、D和E之间,这样第一个流水段的组合逻辑延时为80+30=110ps,中间第二段的时延为60+50=110ps,最后一个段延时为70+10=80ps。这样每个流水段都以最长延时调整为110+20=130ps,故时钟周期为130ps,指令吞吐率为1/130ps=7.69GOPS,每条指令的执行时间为3x130=390ps。
(3)三个流水段寄存器分别插在A和B、C和D、D和E之间,这样第一个流水段的组合逻辑延时为80ps,第二段时延为30+60=90ps,第三段时延为50ps,最后一段延时为70+10=80ps。这样每个流水段都以最长延时调整为90+20=110ps,故时钟周期为110ps,指令吞吐率为1/110ps=9.09GOPS,每条指令的执行时间为4x110=440ps。
(4)因为所有组合逻辑块中最长延时为80ps,所以,达到最大可能吞吐率的划分应该是以一个流水段延时为80ps+20ps来进行,因此,至少按五段来划分,分别把流水段寄存器插在A和B、B和C、C和D、D和E之间,这样第一段的组合逻辑延时为80ps,第二段为30ps,第三段为60ps,第四段为50ps,最后一段为70+10=80ps。这样每个流水段都以最长延时调整为80+20=100ps,故时钟周期为100ps,指令吞吐率为1/100ps=10GOPS,每条指令的执行时间为5x100=500ps。
——吞吐率的提高,单条指令执行时间的延长
6. 以下指令序列中,哪些指令对发生数据相关?假定采用“取指、译码/取数、执行、访存、写回”五段流水线方式,那么不用“转发”技术的话,需要在发生数据相关的指令前加入几条nop指令才能使这段程序避免数据冒险?如果采用“转发”是否可以完全解决数据冒险?不行的话,需要在发生数据相关的指令前加入几条nop指令才能使这段程序不发生数据冒险?
add $s3, $s1, $s0
sub $t2, $s0, $s3 lw $t1, 0($t2) add $t1, $t1, $t2
参考答案:
发生数据相关的有:第1和2间关于$s3、第2和3间关于$t2、第2和4间关于$t2、第3和4间关于$t1。
不进行“转发”处理的话,需要分别在第2、3、4条指令前加三条nop指令才能避免数据冒险。而通过“转发”可以避免1和2、2和3、2和4间的数据相关;但第3和4间是load-use数据相关,所以无法用“转发”消除冒险,因此,需在第4条指令前加入一条nop指令。
寄存器写口和寄存器读口分别安排在一个时钟周期的前、后半个周期内独立工作呢? ——2、3、4条之前分别插入2条nop就可以
7. 假定以下MIPS指令序列在图7.18所示的流水线数据通路中执行:
addu $s3, $s1, $s0
subu $t2, $s0, $s3 lw $t1, 0($t2) add $t3, $t1, $t2 add $t1, $s4, $s5
请问:(1)上述指令序列中,哪些指令的哪个寄存器需要转发,转发到何处? (2)上述指令序列中,是否存在load-use数据冒险?
(3)第5周期结束时,各指令执行状态是什么?哪些寄存器的数据正被读出?哪些寄存器将被写入? 参考答案: (1)发生数据相关的有:第1和2间关于$s3、第2和3间关于$t2、第2和4间关于$t2、第3和4间
关于$t1。通过“转发”可以避免1和2、2和3、2和4间的数据相关; (2)第3和4间是load-use数据相关,所以无法用“转发”消除冒险。 (3)第五个时钟内各条指令的执行情况如下:
指令1在“WB”阶段,控制信息等在MEM/WB.Reg中,$s3正在被写,结束时写完
指令2在“MEM”阶段,控制信息等在EX/MEM.Reg中。sub指令在该阶段进行的是空操作;在转发检测单元中,因为流水段寄存器Ex/Mem中的目的寄存器RegRd为$t2,流水段寄存器ID/Ex中的源寄存器Rs也为$t2,同时,流水段寄存器Ex/Mem中的RegWr控制信号为1,所以检测到转发条件满足,因而,此时,sub指令在上一个时钟周期中的执行结果(在流水段寄存器Ex/Mem中的ALU输出结果)正被回送到ALU的输入端;结束时转发完成
指令3在“EXE”阶段,ALU正在执行“add”操作,进行地址运算,ALU输出结果将被写入流水段寄存器Ex/Mem中;结束时运算完成。控制信息等在ID/EX.Reg中,正在检测是否loaduse冒险