C03 · 第 4 章 · 指令与处理器
处理器与流水线
分析五级流水线的执行顺序、转发和暂停,计算延迟、吞吐率以及分支引入的周期代价。
本章目标
- 说明取指、译码、执行、访存和写回阶段的任务。
- 识别相邻指令的数据依赖。
- 判断转发后仍需暂停的装载相关。
- 根据暂停与分支失误代价计算平均周期和执行时间。
本页目录
指令执行的数据通路
执行一条指令涉及取指令、读取寄存器、执行运算、访问数据内存以及写回结果。不同指令使用其中不同的部件:算术指令通常不访问数据内存,存储指令不写回通用寄存器。数据通路负责传送和运算数据,控制逻辑根据指令字段选择部件操作及写入时机。
单周期实现把一条指令的全部工作安排在一个时钟周期内,因此周期必须容纳最慢指令的完整路径。多周期实现则在不同周期复用部件,分别完成各步。流水线进一步让不同指令同时处于不同阶段,通过阶段间寄存器保存中间结果。三种方式都需要实现规定的指令语义,但时间组织方式各不相同。
我们采用五级顺序流水线进行分析,五级依次为取指、译码、执行、访存和写回,分别记为 IF、ID、EX、MEM、WB。每级在一个周期内完成工作,边沿处将结果送入下一级。这个模型用于说明调度和相关性,实际处理器可能使用更多级、并行执行单元和乱序执行结构。
流水线延迟与吞吐率
单条指令从进入到完成的时间称为该指令的延迟。单位时间内完成的指令数称为吞吐率。级数为 、周期为 的理想流水线中,一条指令经过 时间完成;连续输入足够多条独立指令时,稳定阶段每个周期完成一条指令。
理想流水线连续完成 条指令需要 个周期,前面的 个周期用于填充。这个公式要求各阶段能并行工作,输入连续,且没有结构冲突、数据等待和分支清空。若级间寄存器增加额外延迟,周期还应包含寄存器开销,不能直接把原路径等分后当成最终周期。
设五个功能阶段各需 ,先忽略寄存器开销。单周期实现每条指令需五纳秒,连续十条共五十纳秒。五级流水线的周期为一纳秒,十条独立指令共需 个周期,即十四纳秒,加速比为 。若每级寄存器使周期增加 ,完成时间变为 ,加速比约为 。虽然稳定吞吐率提高,单条指令在后一流水线中的延迟为六纳秒,比较时应明确所用性能量。
级间工作不均衡也限制周期。某一级包含长运算,其他级较短时,所有级仍按最长级的时序要求同步推进。把长路径切成更细阶段可以缩短组合逻辑延迟,但会增加寄存器数量、分支恢复代价和控制复杂度,因此级数与性能之间通常需要结合实际程序比较。
数据相关与转发
后一条指令读取前一条尚未写回的结果时,产生读后写相关。转发网络把执行单元或访存阶段刚产生的结果直接送给需要它的后续指令,使后续计算不必总等到寄存器写回。转发只能提前传递已经产生的值,仍在进行的内存读取仍可能要求暂停。
考虑五级流水线,装载结果在 MEM 阶段末尾产生,下一条算术指令在 EX 阶段开始时需要输入,阶段间有转发。程序先执行 lw x5,0(x10),接着执行 add x6,x5,x7,随后执行与它们独立的 addi x8,x8,1。若不暂停,装载在第四个周期结束时才产生结果,而加法已在第四个周期开始进入 EX,因此需要插入一个空周期。三条指令共需 个周期。若把独立的加一放在两条相关指令之间,并确认不会改变可观察行为,装载结果能赶上加法的 EX 阶段,三条指令恢复为七个周期。这个改排依赖数据和异常语义,编译器必须在允许的范围内进行。
结构冲突指多条指令在同一周期竞争同一个部件,例如统一单端口存储器同时被取指和访存使用。解决方式包括增加端口、分开指令与数据通路或暂停其中一条指令。数据相关与结构冲突可能同时发生,统计暂停周期时需要避免把同一周期重复计算。
条件分支与控制恢复
处理器在分支结果尚未确定时需要决定下一次取指地址。简单实现可以等待结果,预测实现则先选择一个方向并继续取指。预测正确时已取指令继续执行,预测错误时丢弃错误路径中的工作,并从正确地址重新开始。被丢弃的指令不能留下违反程序语义的可见修改。
在简化统计模型中,设基础每指令周期数为一,分支比例为 ,误预测率为 ,每次误预测额外损失 个周期,则平均每指令周期数为 。比例均以执行中的动态指令或分支为分母,不能混用静态源码数量。公式还假定分支代价与其他暂停没有重叠,超出这个条件时应以完整执行时间或详细模拟为准。
例如分支占五分之一,其中四分之一预测错误,每次损失三个周期,额外周期数为 ,平均每指令周期数为 。改进预测率是否提高总体性能,还要检查改进后的周期是否变长,以及程序中的内存等待是否占主导。
性能测量与模型条件
测量处理器性能时,执行的指令数量、每指令平均周期数和时钟频率共同决定时间。仅比较频率会忽略不同指令序列和暂停程度,仅比较指令条数也会忽略指令成本。我们可以先固定程序与输入,确认输出一致,再记录总周期及完成时间,按需要进一步统计分支和缓存事件。
教学模型适合检查局部机制。例如列出逐周期表能说明一条依赖为何暂停,改变程序顺序能检验转发是否生效。把这种局部计算用于真实机器时,需要核对执行单元数量、乱序窗口、缓存状态和测量噪声。不同工作负载的结果分别报告,才能看出优化适用的场景。
异常处理还约束流水线状态的提交顺序。当一条指令遇到错误时,程序通常需要得到与规定执行顺序一致的状态,以便系统定位故障指令。较晚指令已经在电路中计算出的结果,未必能够立即写入软件可见状态。完整实现会用相应控制机制处理暂停、清空和提交,教学时序表中的并行阶段也必须满足这些语义要求。
流水线练习
六级流水线的周期为两纳秒,连续输入二十条独立指令,求完成周期数、总时间和稳定吞吐率。
查看解答
六级流水线连续完成二十条独立指令需要二十加六减一,即二十五个周期;周期两纳秒时总时间五十纳秒,稳定吞吐率为每纳秒零点五条。
解释本章装载后立即使用的序列为何在具备转发时仍需暂停,并说明改变这一结论需要哪些时序条件变化。
查看解答
转发源需要先产生结果。若下一条指令在同一周期开始就需要该值,而装载到周期末尾才返回,时间顺序无法满足,必须暂停或改排独立指令。
在其他暂停忽略的模型中,分支比例为 ,误预测率为 ,每次损失四周期,求平均每指令周期数。
查看解答
分支引入的平均额外周期为零点一五乘零点二乘四,即零点一二;加上基础值一后平均每指令周期数为一点一二。
同一程序执行一百万条指令。方案一频率为 、平均每指令 周期;方案二为 和 周期。比较执行时间。
查看解答
原方案时间为一百万乘一点二再除以十亿,即一点二毫秒;新方案为一百万乘一点五除以十二亿,即一点二五毫秒。新方案虽然频率高,总时间增加零点零五毫秒。
处理器流水线资料
15 Pipelining the Beta: Computation Structures
Chris Terman · 2017 · Massachusetts Institute of Technology
打开官方来源7 Performance Measures: Computation Structures
Chris Terman · 2017 · Massachusetts Institute of Technology
打开官方来源MIT 6.004 的流水线课程讨论阶段划分、相关性和暂停;性能度量课程区分延迟与吞吐率。课程使用的处理器实现与本章简化五级模型存在差异,逐周期分析时应使用题目指定的时序。