5.8 本章小结
本章开头提出的问题的参考答案如下。
-
指令和数据均存放在内存中,计算机如何从时间和空间上区分它们是指令还是数据?
指令和数据在计算机中均以二进制形式共存于同一内存,内存本身无法区分二者。计算机通过CPU的工作阶段从时间上区分指令与数据:取指发生在取指阶段,取操作数则发生在执行阶段。在空间上,CPU根据当前阶段将读出的内容送至不同部件:取指阶段的数据锁存至指令寄存器供译码,执行阶段的数据写入通用寄存器并送入ALU运算。因此,指令与数据的区分并不由内存决定,而由CPU的控制信号在特定时序下引导其流向不同寄存器来实现。
-
什么是指令周期和时钟周期?它们之间有何关系?
指令周期是指CPU从内存中取指并完成执行所需的全部时间。在多周期CPU中,它包含多个时钟周期;在单周期CPU中,则恰好等于一个时钟周期。时钟周期是主时钟的一个节拍,也是CPU操作最基本的时序单位。因此,指令周期与时钟周期的关系取决于处理器结构。
-
什么是微指令?它和第4章谈到的指令有什么关系?
微指令是微程序控制方式中的基本控制单元。控制单元发出的最基本控制信号称为微命令,一组用于完成特定微操作的微命令构成一条微指令;若干微指令按序排列形成微程序,用以解释并执行一条机器指令。在微程序控制器中,每条机器指令通常对应一个微程序,而该微程序由多条微指令组成,每条微指令可并行发出多个微命令。
-
什么是指令流水线?指令流水线相对于传统体系结构的优势是什么?
指令流水线是一种将指令执行划分为若干有序阶段,并让多条指令的各个阶段在时间上重叠执行的技术。每个阶段由专用功能部件完成;当前一条指令进入下一阶段时,后续指令便可进入当前阶段,从而实现功能部件的持续利用。与非流水线结构相比,它并不缩短单条指令的执行延迟,但能显著提升单位时间内完成的指令数(吞吐率)。由于仅需增加少量流水线寄存器等硬件即可获得数倍的吞吐率提升,因此成为现代处理器广泛采用的并行处理技术。
5.9 常见问题和易混淆知识点
-
流水线越多,并行度就越高。是否流水段越多,指令执行越快?
并非流水段越多,指令执行就越快。原因如下:
- 流水段增加会引入更多的流水线寄存器,其延迟限制了时钟周期的进一步缩短;同时,段数增多也导致单条指令从进入至流出所需的时钟周期数增加。此外,存在数据或控制冒险时,流水线需要插入停顿,而段数越多,潜在的性能损失就越显著。
- 随着流水段数的增加,用于处理结构冲突、数据冒险和控制转移的控制逻辑急剧复杂化,不仅增加硬件开销,还可能成为新的性能瓶颈。
-
读后写(WAR)相关和写后写(WAW)相关的概念
在非按序执行的流水线中,由于允许后进入流水线的指令超越先进入的指令先完成执行,因此不仅可能发生 RAW相关,也可能发生WAR和WAW相关。
- 读后写(Write After Read, WAR)相关。指当前指令需先读取寄存器的值,后续指令才能向该寄存器写入。若执行顺序颠倒,即写操作发生在读操作之前,则当前指令将读到错误的新值。在下列指令中,寄存器R1可能存在此类相关:当I2在I1读取R1之前写入该寄存器时,I1会错误地读取I2写入的新值。
I1 add R3, R1, R2 # (R1)+(R2)→R3I2 sub R1, R4, R5 # (R4)-(R5)→R1在WAR相关中,指令I2的目的操作数是指令I1的源操作数。
- 写后写(Write After Write, WAW)相关。指当前指令应先写入寄存器,后续指令再写入同一寄存器,以保证最终结果为后者;若执行顺序颠倒,导致后一条指令先完成写操作,则寄存器的最终值将违背程序语义。在下列指令中,寄存器R1可能存在此类相关:当I2在I1之前写入R1时,R1的最终值将错误地变为I1的结果,而非I2的结果。
I1 add R1, R2, R3 # (R2)+(R3)→R1I2 sub R1, R4, R5 # (R4)-(R5)→R1在WAW相关中,指令I2和指令I1的目的操作数相同。
