流水线计算:一条食堂打饭流水线讲透吞吐率与加速比
鱼宵|系列「软考架构师实战精通营(教材版)」
第 1 卷 · 第 2 章 · 第 03 篇
本篇考点权重:高频(依据近 5 年真题分布统计,供参考)。
一、本篇目标
一句话:把"流水线"翻译成食堂打饭窗口,会算总耗时、最大吞吐率、实际吞吐率、加速比这四个数,考试见到流水线计算题就不再发懵。
对应教材与考试大纲
教材:清华社《系统架构设计师教程(第 2 版)》(清华大学出版社官方书目可查)——对应"第 2 章 计算机系统基础知识",落在"2.2 计算机硬件 → 2.2.2 处理器"这一节里(官方目录可查至节级;流水线技术在该节内的具体小节号待核实,手里有实体书的同学翻到 25 页附近对一下)。
考试大纲:中国计算机技术职业资格网《系统架构设计师考试说明》(ruankao.org.cn)考试要求第(1)条"掌握计算机硬软件与网络的基础知识"——流水线题就归在这条里,上午选择题每年都露脸,考过的既有架构师卷子,也有中级软件设计师卷子,考点是同一套。
二、零基础开胃课
先把这一课的生词全部掰开,一个一个讲。
流水线(pipeline):不是工厂里输油的那根管子,是 CPU 干活的一种排队方式。一条指令从进 CPU 到出结果,要经过好几道工序:取指、译码、取数、运算、写回。老式做法是一条指令五道工序从头干完,再开下一条——像食堂只有一个窗口,盛饭、打菜、刷卡全挤在同一个师傅身上。流水线做法是把工序拆到五个窗口,一号窗口盛完这盘就空出来,马上接下一个盘子,二号窗口紧接着打菜。
Δt:希腊字母德尔塔,你就当它是"秒表上的一格"。题目里写 2Δt,意思就是"两格时间";写 3ns,就是三纳秒。单位不影响计算方法,只影响数字大小。
吞吐率(throughput):单位时间产出多少条指令。食堂中午一小时放出多少份饭,就是饭的吞吐率;一小时出 30 份,吞吐率就是每小时 30 份。
加速比(speedup):流水线干一天的活,改回串行做法要干多少天,两者相除得出来的倍数。2.94 倍的意思是:原来要 294 分钟的活,现在 100 分钟干完。
重叠(overlap):上一条指令还没全干完,下一条已经开干,两道工序同时在跑。流水线快的全部秘密,就藏在这两个字里。
瓶颈(bottleneck):一条线上最慢的那道工序。打菜窗口两分钟出一盘,盛饭窗口再快也得排队等它,整条线的节奏就被打菜窗口卡死了。
这几个词你先混个脸熟,第三节会一个一个往深里讲。
三、概念讲解
这一节每个小节都按固定四步走:先抛问题,再打生活比方,再讲原理,最后落到考点。顺序不乱,你跟着走就行。
流水线为什么能变快?
①问题引入:CPU 频率这些年翻了几十倍,为什么你的软件不是几十倍地变快?一条指令从头做到尾要 5 步,100 条指令排着队串行干,就要 500 步。②生活例子:食堂只有一个师傅,一个盘子要盛饭、打菜、刷卡,一套 5 分钟,一小时出 12 个盘子。③原理讲解:把工序拆到三个窗口,盛饭 1 分钟、打菜 2 分钟、刷卡 1 分钟。第一个盘子 4 分钟出炉,之后每隔 2 分钟就出一个。秘密在于:盛饭窗口干完自己那道工序就空出来,立刻服务下一条,同一时刻三个窗口里都有盘子在动。④结论考点:变快不是单个师傅变快了,是"同一时刻有多个盘子在不同窗口里"。考试常考这句——流水线通过任务的重叠执行提高吞吐率。
流水线阶段怎么划分?
①问题引入:窗口到底拆成几道合适?拆太粗等于没拆,拆太细,窗口之间交接的成本又冒出来了。②生活例子:打饭拆成盛饭、打菜、刷卡三道,够了。你不会把"盛饭"再拆成"盛白米饭"和"盛菜饭"两个窗口。③原理讲解:CPU 经典划分是五段:取指 IF、译码 ID、取操作数、执行运算、写回 WB。每段对应一个独立的硬件部件,各干各的,互不打架。④结论考点:段数常见为 4 段或 5 段,真题里段数以题目给的图为准,别背死数。
一段耗时多长才算流水周期?
①问题引入:三个窗口盛饭 1 分钟、打菜 2 分钟、刷卡 1 分钟,这条流水线的"节奏"听谁的?听最慢的那个。打菜窗口两分钟才出一盘,盛饭再快也得排队等它。②生活例子:这就是木桶效应,木桶里的水位由最短那块板决定;流水线的节奏由最长那段决定。③原理讲解:流水周期 = 各段耗时的最大值,写成式子就是 T = max(t₁, t₂, …, tₘ)。④结论考点:流水周期不是平均值,是最长那段的耗时。题目给 2Δt/1Δt/3Δt/1Δt/2Δt,流水周期就是 3Δt,这个结论 2017 年真题直接考过。
最大吞吐率怎么算?
①问题引入:流水线跑稳之后,单位时间最多能流出多少条指令?②生活例子:打菜窗口 2 分钟出一盘,饭口再顺畅,一小时也只能出 30 个盘子——上限被最慢窗口锁死。③原理讲解:跑稳之后,每隔一个流水周期出一条指令,最大吞吐率 = 1 ÷ 流水周期 = 1 ÷ max(t)。④结论考点:2Δt/1Δt/3Δt/1Δt/2Δt 的流水线,最大吞吐率 = 1/3Δt,它跟总共有几段、跟总指令多少条都没关系,只听最长那段的。
实际吞吐率为什么比最大吞吐率小?
①问题引入:既然跑稳后每个周期出一条,为什么 100 条指令算出来的吞吐率,不是简单的 100÷(100×3Δt)?②生活例子:学校食堂 12 点开饭,11 点 59 师傅就得开始热灶、备菜、开闸,第一盘菜出炉要慢一截;最后一盘出锅窗口就空了,这份"启动成本"摊不进后面的平稳产出里。③原理讲解:第一条指令要走完全部段才出来,这段时间叫建立时间;之后每过一个流水周期出一条。实际吞吐率 = 指令总数 ÷ 总耗时,总耗时 = 建立时间 +(n−1)×流水周期。指令条数越多,启动成本摊得越薄,实际吞吐率才越逼近最大吞吐率。④结论考点:n 很小的时候,实际吞吐率明显小于最大吞吐率,这是上午选择题的高频陷阱。
流水线建立时间是多少?
①问题引入:第一条指令出炉之前,流水线在忙什么?②生活例子:早班厨师从冷灶开始:点火、上锅、炒第一份菜,第一份菜出炉就是比后面每一份都慢一截。③原理讲解:建立时间 = 各段耗时全部加起来。五段 2/1/3/1/2 Δt,建立时间 = 2+1+3+1+2 = 9Δt。④结论考点:建立时间是"求和",流水周期是"取最大",这两个数一个加一个挑大,千万别混。考试最爱把两个选项做成 9Δt 和 3Δt,看你眼神好不好。
瓶颈段卡住了怎么办?
①问题引入:打菜窗口 2 分钟一个,其他窗口 1 分钟一个,队伍全堵在打菜窗口门口。②生活例子:早高峰地铁,最挤的那个闸机决定整个站的通行速度。要么多开一个同款闸机,要么让人分流,要么旁边人降速迁就它。③原理讲解:瓶颈段 = 耗时最长的那段。常见消除办法三种:把瓶颈段再拆细;并行开两个一样的瓶颈部件;让其他段降速配合。考试不考你怎么改它,考你认出它:谁最长谁就是瓶颈,周期听它的。④结论考点:瓶颈段时长 = 流水周期,最大吞吐率由它一个人决定。把这句话抄在笔记本第一行。
加速比怎么算?
①问题引入:这套流水线,比起"一条一条串行干",到底快几倍?②生活例子:串行干 100 个盘子,每个盘子从头做到尾要 9 分钟,共 900 分钟;流水线只要 306 分钟,快了约 2.94 倍。③原理讲解:加速比 = 串行总时间 ÷ 流水线总时间 =(n × 单条串行耗时)÷ [建立时间 +(n−1)×流水周期]。n 越大,加速比越逼近段数 m;n 小的时候,启动成本占比高,加速比很难看。④结论考点:加速比的上限就是段数。5 段流水线,加速比最多逼近 5 倍,永远超不过段数本身。
流水线效率有多高?
①问题引入:窗口全开,但盛饭窗口常常空着等打菜,师傅们在摸鱼怎么办?②生活例子:三个窗口只有打菜窗口一直忙,盛饭、刷卡都在排队等,食堂租的场地大半时间空着,利用率不高。③原理讲解:效率 = 全部设备忙的时间 ÷ 全部设备全部可用时间。各段耗时不相等时,瓶颈段忙死、其他段闲死,效率就低;各段耗时相等时,大家一起忙,效率最高。④结论考点:各段耗时相等的流水线效率最高,这是判断题里的常客。
超标量流水线是啥?
①问题引入:流水线已经拆好了,想再快一点,还能怎么办?②生活例子:打饭窗口从三条变六条,同一时刻盛两盘饭、打两份菜,这就是食堂版的超标量。③原理讲解:超标量(superscalar)= 一个时钟周期同时发射多条指令进流水线,靠多套硬件并行干活。它和"单条流水线拆段"是两回事:拆段是一条指令的工序重叠,超标量是多条指令同时发车。④结论考点:上午题里认出即可——超标量是"多条指令并行发射",不是把段拆得更细。
流水线冒险是什么?
①问题引入:第二条指令正要打菜,发现它要的菜还在第一条锅里炒着,两盘撞车了。②生活例子:第二盘饭要等第一盘的菜单确认才能打,窗口只能停拍重排,这就是食堂版的冒险。③原理讲解:冒险分三类:结构冒险(硬件部件不够用,两个窗口抢同一个锅)、数据冒险(下一条要用还没算出的数)、控制冒险(分支指令改了程序走向,后面取指全取错了)。④结论考点:认出三个词就行:结构、数据、控制。考试常把三个做成选项让你配对。
四、手把手演示:公式从一道最简单的题里长出来
这一节不许你直接背公式。我们先手算一道最小的题,再从时间线上把公式"数"出来。
题目:2 条指令,3 段流水线,取指 2Δt、译码 1Δt、执行 3Δt。一步步走。
第 1 步,t=0:第 1 条指令(记 I1)进取指窗口。取指要 2 格,占住 0→2。
第 2 步,t=2:I1 译码,占 2→3。取指窗口空出来了,马上接 I2,占 2→4。
第 3 步,t=3:I1 进执行窗口,占 3→6。译码窗口空了,但 I2 还在取指(要到 4 才结束),译码窗口只能干等。为什么?因为译码要等自己这条指令的取指交卷,硬件上不能跳号。
第 4 步,t=4:I2 译码,占 4→5。
第 5 步,t=5:译码结束,执行窗口正忙着(到 6 才空),I2 再等一格。
第 6 步,t=6:I1 执行完毕,第一条结果出炉。I2 立刻进执行窗口,占 6→9。
第 7 步,t=9:I2 出炉,两条指令全部干完。
数出来:两条指令总耗时 = 9Δt。
再加一条 I3 验证:I3 取指 4→6,译码 6→7,执行 9→12。三条总耗时 = 12Δt。
现在从时间线上归纳规律:
- 第一条出炉时间 = 2+1+3 = 6Δt,正好是各段耗时之和。为什么?第一条没人重叠,只能一段一段走完全程。
- 每多塞一条指令,多等多久?两条到三条,多等了 3Δt;一条到两条,也是多等 3Δt。3Δt 是什么?正是最长那段"执行 3Δt"。为什么偏偏是它?因为最慢的段每次都被排队,它出一个,整条线才敢出一个。
归纳出的公式(先记字母版):
建立时间 T建 = t₁ + t₂ + … + tₘ (各段求和) 流水周期 Δ = max(t₁, t₂, …, tₘ) (各段取最大) n 条总耗时 Tn = T建 + (n−1) × Δ (第一条款走完,后面每条一个周期) 最大吞吐率 TPmax = 1 / Δ (跑稳后每周期一条) 实际吞吐率 TP = n / Tn (总共 n 条 ÷ 总共花的时间) 加速比 S = n × (t₁+…+tₘ) / Tn (串行时间 ÷ 流水线时间)用刚才的 3 段题回代验证:T建 = 6,Δ = 3,n=2 时 Tn = 6 + 1×3 = 9,跟手算一模一样;n=3 时 Tn = 6 + 2×3 = 12,也对上。公式不是背的,是数出来的。
五、真题精讲:三道真题 + 一道教材例题全程摊开算
真题 1(2017 年下半年系统架构设计师上午题)
来源:希赛网《2017 年下半年系统架构设计师考试上午真题答案与解析》(https://www.educity.cn/rk/zhenti/),CSDN 同题转载交叉核对一致。可信度:真题原题。
原题:某计算机系统采用 5 级流水线结构执行指令,每条指令的执行由取指令(2Δt)、分析指令(1Δt)、取操作数(3Δt)、运算(1Δt)和写回结果(2Δt)组成,分别用 5 个子部件完成。问该流水线的最大吞吐率为多少?
读题:问的是"最大吞吐率",不是实际吞吐率,不是总耗时。题目把五个段的耗时全给了:2、1、3、1、2(单位 Δt)。
思路:最大吞吐率只跟流水周期有关,流水周期 = 最长那段。五个数里挑最大:max(2,1,3,1,2) = 3Δt。谁最长?取操作数那段,3Δt,它就是瓶颈。
代入:最大吞吐率 = 1 ÷ 流水周期 = 1 ÷ 3Δt。
答案:1/(3Δt)。
真题第二问(原题):若连续向流水线输入 10 条指令,加速比是多少?先算串行时间:一条指令走完五段要 9Δt,10 条排着队串行干 = 10×9 = 90Δt。再算流水线时间:建立时间 9Δt +(10−1)×流水周期 3Δt = 9 + 27 = 36Δt。加速比 = 串行时间 ÷ 流水线时间 = 90 ÷ 36 = 2.5。这就是真题第二问的答案,跟第三节"加速比"那个考点严丝合缝。
老师加的变式题(非真题原问,别记混):把指令数换成 100 条,实际吞吐率是多少?建立时间 = 9Δt;总耗时 = 9 + 99×3 = 306Δt;实际吞吐率 = 100 ÷ 306 ≈ 0.327 条/Δt。你看,0.327 比 1/3 ≈ 0.333 小一截——启动成本 9Δt 摊在 100 条上,实际吞吐率就是比最大吞吐率差一点点。
真题 2(2006 年上半年软件设计师上午题第 6 空)
来源:软考之家公开真题 PDF(ruankao123.com《2006 年上半年软件设计师上午试卷》),段耗时以试卷原图读出。可信度:真题原题(中级软件设计师科目,与架构师上午题同族考点)。
原题:某指令流水线由 5 段组成,各段所需时间依次为 Δt、3Δt、Δt、2Δt、Δt。连续输入 10 条指令时的吞吐率为多少?选项 A. 10/70Δt B. 10/49Δt C. 10/35Δt D. 10/30Δt。
读题:五段耗时 1、3、1、2、1(单位 Δt),连续 10 条,问吞吐率。
第一步算建立时间:1+3+1+2+1 = 8Δt。
第二步算流水周期:max(1,3,1,2,1) = 3Δt。谁最长?第二段 3Δt,瓶颈就卡在这一段。
第三步算 10 条总耗时:Tₙ = 建立时间 +(n−1)×流水周期 = 8 +(10−1)×3 = 8 + 27 = 35Δt。
第四步算吞吐率:10 ÷ 35 = 10/35Δt,选 C。
顺带看看干扰项长什么样:选 D 的是只算了稳态部分 10×3=30,忘了第一条款走完要 8Δt 建立时间;选 A 的思路完全跑偏;选 B 的 49 是瞎凑数。考试时每个错误选项,都是一个"漏了哪一步"的画像。
真题 3(2026 年回忆版上午题)
来源:原创力文档回忆整理,考场原卷未公开;本次检索未找到第二个独立回忆页交叉印证。可信度:回忆版——仅考点回忆,选项细节待官方版本,数字以你考场上的原题为准。
题目大意:某 4 段流水线各段耗时分别为 10ns、12ns、15ns、8ns,问该流水线的时钟周期至少应取多少?
读题:四个段,10、12、15、8 纳秒。问"时钟周期至少取多少"。
思路:时钟周期是整条线统一的发牌节奏,每个周期所有段同时各干一步。哪个段一个周期干不完,整条线就乱了。所以时钟周期必须 ≥ 最慢那段的耗时,取等号时就是"至少"。
代入:时钟周期 = max(10, 12, 15, 8) = 15ns。最长那段是 15ns,时钟周期至少取 15ns。
答案:选 15ns 那项(即选项 C)。为什么不能取 10ns?因为取操作数那段要 15ns 活,一个 10ns 周期只够干三分之二,到下个周期窗口已经让给下一条指令了,活就烂尾了。这题和真题 1 考的是同一个根:周期听最慢的段。
例题 3(教材同型例题,非软考真题)
标注:来源为清华社《系统架构设计师教程》同型例题改编,数字自设并逐步验算,不冒充真题。
题目:某 4 段流水线,各段耗时均为 2ns,连续执行 100 条指令,求总耗时和实际吞吐率。
读题:四段都是 2ns,各段相等,100 条指令。
第一步算建立时间:2+2+2+2 = 8ns。为什么不是 2×4=8 吗,对,求和就是 8ns。
第二步算流水周期:max(2,2,2,2) = 2ns。
第三步算总耗时:Tₙ = 8 +(100−1)×2 = 8 + 198 = 206ns。
第四步算实际吞吐率:100 ÷ 206 ≈ 0.485 条/ns。
对比一下:真题 1 是五段不等长,100 条花了 306Δt;这里四段等长只要 206ns。各段耗时相等的流水线效率最高——第三节那个考点,这里用真数给你验了一遍。
再加一道自练小例:6 段流水线,各段耗时 2/1/1/3/1/1 Δt,5 条指令总耗时多少?建立时间 = 2+1+1+3+1+1 = 9Δt;流水周期 = max = 3Δt;总耗时 = 9 +(5−1)×3 = 9 + 12 = 21Δt。三歩,完。
六、图解:把时间线画出来看
图 1:食堂打饭流水线的时间线(盛饭 1 分钟 / 打菜 2 分钟 / 刷卡 1 分钟)
图 1:食堂打饭流水线的时间线——盘 1 第 4 分钟出炉(建立时间 4 分 = 1+2+1),之后每 2 分钟出一盘(流水周期就是最慢的打菜窗口 2 分)。盛饭、刷卡两行的大片空白,就是瓶颈造成的空等。
看这张图记住两件事:第一,盘子 1 出炉在第 4 分钟(建立时间 = 1+2+1 = 4);第二,之后每隔 2 分钟出一盘,2 分钟就是打菜窗口的耗时,也就是流水周期。盛饭窗口和刷卡窗口都在空着等打菜——这就是瓶颈,这就是效率损失。
图 2:3 段计算机指令流水线(取指 2Δt / 译码 1Δt / 执行 3Δt),I1~I3 三条连发
图 2:3 段指令流水线的时空图——I1 第 6Δt 出炉,I2 第 9Δt 出炉,I3 第 12Δt 出炉;译码段那几个「空等」格子,就是流水线里白等的时间。
对照第四节的手算:I1 出炉在 6Δt(2+1+3 求和),I2 出炉在 9Δt,两条总耗时 9Δt,公式 Tₙ = 6 +(2−1)×3 = 9,严丝合缝。译码窗口在 t=3 到 t=4 那一格空着,那就是它在等 I2 的取指交卷——流水线里"空着等"的格子,就是损耗。
七、自测五题
做完再翻文末对答案,错了就按提示回对应小节重看。
- 某 5 段流水线各段耗时为 1Δt、2Δt、1Δt、3Δt、1Δt,它的流水周期是多少?
- 接上题,这条流水线的建立时间是多少?
- 接上题,连续流入 10 条指令,总耗时多少?
- 接上题,它的最大吞吐率是多少?
- 某 6 段流水线各段耗时均为 2ns,连续执行 100 条指令,总耗时多少?
本篇题库:六道强化题(自编/改编,数字均已验算)
难度从易到难,每题做完先自己写答案,再翻后面。
第 1 题(选择,自编):某流水线 4 段,各段耗时 2Δt、4Δt、3Δt、1Δt。它的流水周期是多少?
A. 2Δt B. 3Δt C. 4Δt D. 10Δt
答案:C。解析:流水周期取各段最大,max(2,4,3,1)=4Δt,不是平均、不是总和。回"一段耗时多长才算流水周期"。
第 2 题(选择,自编):某流水线 3 段,每段都要 1Δt。第一条指令出炉要多久?
A. 1Δt B. 2Δt C. 3Δt D. 6Δt
答案:C。解析:建立时间 = 各段求和,1+1+1=3Δt。第一条没人重叠,只能一段一段走完。回"流水线建立时间是多少"。
第 3 题(选择,改编真题):某 5 段流水线,各段耗时均为 2ns。连续执行 10 条指令的总耗时是多少?
A. 20ns B. 28ns C. 30ns D. 50ns
答案:B。解析:建立时间 = 2×5 = 10ns;流水周期 = 2ns;总耗时 = 10 +(10−1)×2 = 10 + 18 = 28ns。选 A 的只算了稳态 10×2=20,漏了建立时间;选 D 的是串行算法(10×5×2=100?思路跑偏)。回第四节手算推导。
第 4 题(选择,自编):某流水线 4 段,各段耗时 10ns、20ns、15ns、5ns。它的最大吞吐率是多少?
A. 1/10ns B. 1/50ns C. 1/20ns D. 4/50ns
答案:C。解析:流水周期 = max(10,20,15,5) = 20ns,最大吞吐率 = 1 ÷ 20ns。注意 B 是把四段求和当周期了,那是建立时间,别混。回"最大吞吐率怎么算"。
第 5 题(选择,改编真题):某 3 段流水线,各段耗时 2Δt、4Δt、2Δt。连续执行 4 条指令的加速比是多少?
A. 1.6 B. 2 C. 2.5 D. 4
答案:A。解析:先算流水线时间:建立 = 2+4+2 = 8Δt,周期 = max = 4Δt,4 条总耗时 = 8 + 3×4 = 20Δt。再算串行时间:4 条每条走 8Δt,共 4×8 = 32Δt。加速比 = 32 ÷ 20 = 1.6。n 小的时候加速比难看,正常。回"加速比怎么算"。
第 6 题(选择,自编):关于流水线,下面哪个说法是对的?
A. 流水周期等于各段耗时的平均值
B. 瓶颈段决定整条线的最大吞吐率
C. 段数越多,加速比可以超过段数
D. 各段耗时不相等时效率最高
答案:B。解析:A 错,周期取最大;C 错,加速比上限就是段数;D 错,各段相等时效率最高。回"瓶颈段卡住了怎么办"“流水线效率有多高”。
八、本篇技术英语
1)五个高频词(音标 + 谐音 + 中译)
- pipeline [ˈpaɪplaɪn],谐音"派-普-赖恩",流水线。读快了就是"派普赖恩"。
- stage [steɪdʒ],谐音"斯-得-之",阶段、段。软件里"上线 stage"也是这个词。
- throughput [ˈθruːpʊt],谐音"斯鲁-普特",吞吐率。through(穿过)+ put(放),穿过去多少就是吞吐。
- overlap [ˌəʊvəˈlæp],谐音"欧-沃-拉普",重叠。考试里"重叠执行"就用它。
- parallelism [ˈpærəlelɪzəm],谐音"派-若-勒-利-泽姆",并行。parallel(平行)+ ism(主义),平行主义。
2)两个真实句子拆读
句 1(来源:维基百科 Instruction pipelining 词条):
“In computer science, instruction pipelining is a technique for implementing instruction-level parallelism within a single processor.”
断句:In computer science, / instruction pipelining / is a technique / for implementing instruction-level parallelism / within a single processor.
拆词谐音:instruction(因-斯-抓克神,指令);technique(泰-克-尼-克,技术);implement(因-普-利-门特,实现);processor(普-柔-赛-瑟,处理器)。
整句中文:在计算机科学里,指令流水线是一种在单个处理器内实现指令级并行的技术。
跟读动作:先慢读两遍断句,再一口气读一遍,读完翻回中文意思说一遍。
句 2(同词条):
“Pipelining attempts to keep every part of the processor busy with some instruction by dividing incoming instructions into a series of sequential steps performed by different processor units.”
断句:Pipelining / attempts to keep every part of the processor busy / with some instruction / by dividing incoming instructions into a series of sequential steps / performed by different processor units.
拆词谐音:attempt(额-泰姆普特,试图);divide(迪-外德,拆分);incoming(因-明-英,传入的);sequential(西-克-温-手,按顺序的)。
整句中文:流水线把传入的指令拆成一系列顺序步骤,交给不同的处理器部件去执行,好让处理器每个部分都手头有指令可忙。
跟读动作:sequential 这个长词拆成"西-克-温-手"三段读顺,divide…into…连读两遍。
3)真实场景练习
上机做题时看到题目里写 pipeline with 5 stages,你脑子里要立刻弹出:五段流水线,流水周期 = 五个 stage 里最大那个,吞吐率 = 1/周期。看到 throughput 就认吞吐率,看到 overlap 就认重叠。术语是用来认的,不是用来背的。
4)一句心里话:发音不标准没关系,能读个大概就行。考试不考口语,这些词混个脸熟、阅读时反应得过来,就值回票价了。
九、必背清单
- 流水周期 = 各段耗时的最大值,不是平均值。
- 建立时间 = 各段耗时全部加起来。
- n 条总耗时 = 建立时间 +(n−1)× 流水周期。
- 最大吞吐率 = 1 ÷ 流水周期。
- 实际吞吐率 = 指令总数 ÷ 总耗时。
- 实际吞吐率永远比最大吞吐率小一点点。
- 瓶颈段 = 最长那段,整条线的节奏听它的。
- 加速比 = 串行时间 ÷ 流水线时间,上限是段数。
- 各段耗时相等,流水线效率最高。
- 超标量 = 一个周期多条指令并行发射。
- 冒险分三种:结构冒险、数据冒险、控制冒险。
十、速记表、复习计划与下篇预告
速记表:
建立时间 T建 = t1+t2+…+tm 求和 流水周期 Δ = max(t1,…,tm) 取最大 n条总耗时 Tn = T建 + (n-1)×Δ 最大吞吐率 TPmax = 1/Δ 实际吞吐率 TP = n / Tn 加速比 S = n×T建 / Tn复习计划(本篇为高频考点,按记忆曲线 1-3-7 天强化):
- 今天(第 1 天):合上笔记,把 3 段手算题重新走一遍时间线,默写六个公式。
- 第 3 天:不看笔记重做自测五题 + 本篇题库六道,错哪题回哪节。
- 第 7 天:限时 5 分钟重做一遍 2017 真题(含第二问加速比 2.5)和 2006 软设题(10/35Δt 选 C),算完对照速记表自查。
- 第 15 天(可选):把 2017 真题那组数(2/1/3/1/2 Δt,100 条)重新算一次,306Δt、0.327 条/Δt,数对就翻篇。
下篇预告:第 04 篇讲磁盘调度——FCFS、SSTF、SCAN 三种算法,手把手把磁头移动顺序排出来,跟流水线同属"调度"这一家子。
互动提问:你当年上学时食堂打饭排过最久的队是多久?如果把打饭窗口改成流水线,你会怎么拆这几道工序?评论区聊聊,我挑两个典型回复在下篇开头点评。
自测五题答案:
- 流水周期 = max(1,2,1,3,1) = 3Δt。错了回"一段耗时多长才算流水周期"。
- 建立时间 = 1+2+1+3+1 = 8Δt。错了回"流水线建立时间是多少"。
- 总耗时 = 8 +(10−1)×3 = 8 + 27 = 35Δt。错了回第四节手算推导。
- 最大吞吐率 = 1/3Δt。错了回"最大吞吐率怎么算"。
- 建立时间 = 2×6 = 12ns,总耗时 = 12 +(100−1)×2 = 12 + 198 = 210ns。错了回例题 3 的四步走。