Skip to content

计算机的性能指标

2026 大纲 一(二)计算机性能指标:吞吐量、响应时间;CPU 时钟周期、主频、CPI、CPU 执行时间;MIPS、MFLOPS、GFLOPS、TFLOPS、PFLOPS、EFLOPS、ZFLOPS。

「哪台机器更快」这个问题不能直接回答

问一台机器快不快,第一件事不是找公式,是问清楚快在什么意义上。同样一台服务器,一秒钟能处理多少个请求,和一个请求从提交到拿到结果要等多久,是两个方向的事——前者叫吞吐率(吞吐量),后者叫响应时间。把批处理的活排得满满当当能把吞吐率拉高,但每个请求排队更久、响应时间反而变差。两个指标互相推不出来,是两个独立的优化目标。

再往下还要分清一层:你说的时间,包不包括不是这个程序在跑的那部分? 操作系统会让多个进程轮流用 CPU,所以一个程序从按下回车到出结果的那段墙钟时间里,夹着等 I/O 的时间、别的程序占着 CPU 的时间、以及 CPU 在执行操作系统代码的时间。把这些都算进来,衡量的是系统性能;只留下真正执行该用户程序代码的那一段,衡量的才是 CPU 性能

🔴 本节所有公式算的一律是用户 CPU 时间,不含 I/O 等待,也不含其他程序占用。题面出现"响应时间""墙钟时间"而你套了 T=IC×CPI×Tc,口径就已经错了。

口径定下来之后,比性能才有意义:完成同样工作量所需时间最短的那台机器性能最好。性能是时间的倒数,所以两台机器的性能之比等于它们时间之比的倒数——这个倒数关系后面会反复咬人。

先动手看一眼

加载可视化中...

拨的时候盯住一件事:主频、CPI、指令条数这三个滑块,任意动一个,总时间怎么变。特别留意把主频拉高时 CPI 那一栏跟着涨——这不是模拟器的 bug,是下面第二节要讲的相互制约。

四种时间口径分别包含什么(题面出现"墙钟时间""系统 CPU 时间"这类词、拿不准该不该把 I/O 算进去时展开)
口径包含什么
用户 CPU 时间真正用于执行该用户程序代码的时间
系统 CPU 时间CPU 执行操作系统程序(系统调用等)的时间
CPU 时间上面两者之和
响应时间(墙钟时间)CPU 时间 + 等待 I/O 完成的时间 + CPU 被其他用户程序占用的时间

由此引出必须分开的一对概念:系统性能指系统的响应时间,它与 CPU 相关、也与 CPU 以外的部分有关;CPU 性能指用户 CPU 时间,只包含 CPU 运行用户程序代码的那段。

一、时钟周期:下限被关键路径钉死

一条指令的执行分成若干步骤,每步的控制信号何时发出、作用多久都要靠定时信号同步,这个信号就是 CPU 的主脉冲信号。时钟周期是它的宽度,主频是它的频率,二者互为倒数(Tc=1/f)。时钟脉冲由机器脉冲源(晶振)发出,经整形与分频后形成——注意是"整形分频后形成",不是晶振本身的频率直接就是主频。

周期能压到多短由电路决定,不由设计者拍脑袋定:信号必须在一个周期之内从上一级寄存器出发、穿过组合逻辑、稳定到达下一级寄存器输入端。所有路径中最长的那条(关键路径)就是下限。由此直接推出三种 CPU 的时钟周期:

CPU 类型相邻状态单元之间隔着什么因此时钟周期 =一个周期内完成
单周期一条指令的全部组合逻辑最耗时那条指令的完整执行时间一条完整指令(CPI = 1,但周期极长)
多周期一个执行步骤的组合逻辑(中间插了寄存器)单个步骤的关键路径,远短于单周期一条指令的一个阶段(CPI > 1)
流水线一个流水段的组合逻辑 + 段间锁存器最长流水段的延迟 + 锁存器开销每条指令的一个流水段

这张表也解释了多周期与流水线为什么能提主频:它们在数据通路中间插入状态单元,把一整条长路径切断成若干短路径,最长的那段就短了。

顺着这张表还能立刻纠掉一个很常见的直觉错误:一个时钟脉冲不等于开始执行一条新指令。只有单周期 CPU 才是一条指令一个周期;流水线说的"每周期一条"是吞吐意义上的,机器里同时装着好几条处于不同阶段的指令;多周期和带冒险的流水线连吞吐都到不了每周期一条。

二、三个因子各由谁决定,又如何互相顶

T=IC×CPI×Tc=IC×CPIf
因子由哪一层决定具体受什么影响谁能改动它
IC 指令条数ISA 与编译器指令集的表达能力(一条指令能干多少活)、编译优化的质量指令集设计者、编译器
CPI处理器的实现(微体系结构)数据通路结构、流水线深度与冒险处理、Cache 组织与命中率硬件设计者
Tc 时钟周期电路与器件工艺关键路径上的门延迟、器件工艺水平电路设计者、工艺

从上往下读就是一条完整的推理链:程序要跑多久 = 一共要执行多少条指令(软件层说了算)× 平均每条要几个周期(处理器组织说了算)× 每个周期多长(电路工艺说了算)。

这张表最直接的用途是给一条改进措施定位它动的是哪个因子:提高主频动的是 Tc,优化数据通路结构动的是 CPI,对程序做编译优化动的是 IC——三条各压一个因子,所以三条都能缩短执行时间。

但三个因子并不独立,改一个通常把另一个顶上去。把流水线切得更细能压低 Tc,可段数一多,冒险和预测失败的代价按段数放大,CPI 就涨上来;改用功能更强的复杂指令能压低 IC,可单条指令要拆成更多步骤、关键路径也变长,CPI 与 Tc 双双上升;反过来只保留简单定长指令能压低 CPI,代价是同样的活要用更多条指令来干,IC 上升

三条直接结论都从这里来:指令条数最少的程序不一定跑得最快;主频提高 k 倍速度到不了 k 倍;不同型号的 CPU 不能仅凭主频比性能(同型号才可以)。CISC 与 RISC 的分歧正好落在这上面:CISC 走压 IC 的路线、代价是 CPI 高且 Tc 难压,RISC 反之。两条路线争的不是谁的公式对,而是三个因子的乘积在哪种组合下更小。

🔴 两台机器比时间时,先看题面有没有说"相同的 ISA、跑同一个程序"。说了就意味着 IC 两边相等、可以整个约掉,比值只剩 T1T2=CPI1/f1CPI2/f2——不必也无法去求 IC 具体是多少。

CPI 分两层:指令的 CPI 是定值,程序的 CPI 是实测值

一条指令的 CPI 由指令类型与微架构决定,是个确定值。一个程序的 CPI 是加权平均:

CPI=iCPIi×Fi=总时钟周期数IC

其中 Fi 是第 i 类指令在该程序中所占的比例。与 CPI 互为倒数的是每秒指令数 IPS=f/CPI

但加权平均只算了"指令本身在理想情况下要几个周期"。真实程序的 CPI 还要加上被迫等待的周期,其中最大的一块是 Cache 缺失:

CPI有效=CPI理想+每条指令平均访存次数×缺失率×缺失代价

代入一组数看量级:理想 CPI 为 1.0,每条指令平均访存 1.3 次,缺失代价 100 个周期。缺失率 5% 时 CPI有效=1.0+1.3×0.05×100=7.5;缺失率降到 2%,则降到 1.0+1.3×0.02×100=3.6缺失率变动 3 个百分点,CPI 变了一倍还多——存储层次的影响完全盖过了指令本身。除 Cache 缺失外,流水线冒险造成的阻塞、分支预测失败的开销,也都计入实测的 CPI。

🔴 所以"程序的 CPI 由 ISA 决定、是个常数"是错的。程序的 CPI 是运行时测出来的,跟微架构、访存行为、缺失率全部相关。这部分等待的来源见 Cache 性能分析流水线性能指标

四个公式其实是一条链

给一组指令比例就能一路算到底,四步用的是同一个公式的四种变形。以"主频 1.6 GHz,访存类 CPI 5、运算类 2、转移类 3,程序 Q 共 5×107 条指令,三类比例 25%、60%、15%"为例:

① 加权求综合 CPI:0.25×5+0.60×2+0.15×3=2.9

② 总时钟周期数 =IC×CPI=5×107×2.9=1.45×108

③ 除以主频得执行时间:T=1.45×1081.6×109=90.625 ms

④ MIPS 直接用主频与 CPI,不必回头去用 ICT1.6×1092.9×106551.7

综合 CPI 一旦算错,后面三个量会一起错——它是这条链唯一的入口。反过来,若题目直接给了"x% 的指令要 1 个周期、y% 要 10 个周期",那第一步同样是加权,只是权重换成了条数比例。

三、Amdahl 定律:局部加速的整体收益

阿姆达尔定律是计算机系统设计中重要的定量原则之一,1967 年由 IBM 360 系列机的主要设计者阿姆达尔提出。基本思想只有一句:对系统中某个部分进行改进所带来的系统性能改进程度,取决于该部分被使用的频度、或其执行时间占总执行时间的比例

方法也只有一句话:把总时间拆成"能加速的"和"不能加速的"两段,只除能加速的那一段。

改进后的执行时间=改进部分执行时间改进部分的改进倍数+未改进部分执行时间S=1(1p)+pn

p 是可加速部分的时间占比,n 是该部分的加速倍数。三个边界值:1p=0S=n(全部可加速,加速比等于局部倍数);p=0S=1(改了等于没改);nS11p

第三个才是这条定律真正的分量:不可加速的那部分是整体性能的天花板。哪怕把占总时间 90% 的那部分加快 10 倍,整体也只能快到 5.26 倍;加快到无穷倍,整体也只到 10 倍。想改进整体性能不能只盯着加速某个部件——整体性能仍然受慢速部件的制约

🔴 "速度提高到 1.5 倍"不等于"时间减少 50%"。 "速度""性能"这类词是时间的倒数,要取倒数才落到时间上:速度提到 1.5 倍 ⇒ 那一段时间变为原来的 1/1.50.667。而"时间减少 50%"是直接乘 0.5。一道 100 秒里有 90 秒 CPU 时间、"CPU 速度提高 50%"的题,CPU 那段变成 90/1.5=60 秒,加上原样不动的 10 秒 I/O,总共 70 秒——不是 55 秒。

这条定律的两个用法、上限为什么压不动、以及给定整体目标时怎么反解局部倍数(碰到"要整体快 X 倍,局部需快几倍"这类反向条件时展开)

它适用于对特定任务的一部分进行优化的所有情况,可以是硬件优化也可以是软件优化,两个典型方向:

  • 判断优化值不值得做。系统中异常处理程序的执行时间只占整个程序运行时间非常小的一部分,即使把它优化得再好,对整个系统带来的性能提升也几乎为零。优化的收益上界由被优化部分的时间占比决定,与优化本身做得多漂亮无关。
  • 判断并行化的天花板。把 p 理解成"程序中可并行部分的占比"、n 理解成"核数",同一个公式就给出多核的加速比上限——串行段的占比决定了核数堆到多少都突破不了的那条线,见 多处理器基本概念

为什么 1/(1p) 一定是上限,从分母就能看出来:分母 (1p)+p/n 由两项组成,加大 n 只能把 p/n 往 0 压,压不动 (1p)——它是与 n 无关的常数项。所以分母怎么优化都降不到 1p 以下,S 只能从下方无限逼近 1/(1p),取不到、更超不过。

给定的条件如果是倒过来的——不给 n、而给一个整体加速目标 S目标,问局部要加速多少倍——那么第一步不是列方程,而是比大小:

  • S目标11p无解。局部加速倍数取到无穷大都达不到,硬解会得到 n
  • S目标<11p:有解,回代反解 n

举个数:p=75% 时上限是 1/(10.75)=4 倍。"要求整体提速到 4 倍"从一开始就不成立,不必去算;"提速到 3 倍"可行,反解

10.25+0.75/n=30.25+0.75n=13n=0.751/30.25=9

局部要快 9 倍,整体才快 3 倍——局部投入与整体收益之间严重不对称,S 越靠近上限,所需的 n 涨得越猛。

四、MIPS 与 FLOPS

MIPS(每秒百万条指令)反映的是机器执行定点指令的速度:

MIPS=ICT×106=fCPI×106

同一个量换个数量级词头就换个名字,109 那一档写作 GIPS,题面出现"指令执行速度 0.8 GIPS"时算的仍是 f/CPI,只是以 109 为单位。

用 MIPS 比较不同机器有两条硬伤:① 不同机器的指令集不同、指令功能强度不等,M1 上一条指令的活在 M2 上可能要好几条,一台机器 MIPS 高可能只是因为它的指令做的事少;② 不同机器的 CPI 和时钟周期也不同,同一条指令耗时也不同。另有两个派生说法:峰值 MIPS 是特意选一组使平均 CPI 最小的指令组合算出来的,实际性能通常比它差;相对 MIPS 是相对于某个公认参考机型的倍数值。

与之相对、度量浮点操作速度的是 MFLOPS 系列。关键差别只有一处,也正是判"哪个指标描述浮点操作速度"这类题的判据:FLOPS 基于所完成的浮点操作次数,而不是指令数——一条浮点指令可能完成不止一次浮点运算,也有大量指令根本不做浮点运算。所以 FLOPS 与指令集强弱脱钩,代价是它只覆盖浮点负载。

指标数量级中文
MFLOPS106百万次浮点运算/秒
GFLOPS109十亿次
TFLOPS1012万亿次
PFLOPS1015千万亿次
EFLOPS1018百亿亿次
ZFLOPS1021十万亿亿次

相邻两级差 103,按 M、G、T、P、E、Z 排。

换成中文数量级时的两个坑

英文词头每三位一进103),中文大数每四位一进104)——两套阶梯不对齐,所以换算时必须一步步落到 10 的幂上再翻,不能凭语感对应:

中文量级中文量级
104千万亿1015
亿108亿亿1016
万亿(兆)1012万亿亿1020

第二个坑是题面给的系数要一起带上。上表写的"PFLOPS =1015= 千万亿次"说的是 1 PFLOPS;题目若给 93.0146 PFLOPS,实际是 93×10159.3×1016,翻成中文是 9.3 亿亿次而不是 9.3 千万亿次。把系数忘在一边、直接照搬词头对应的中文,落点正好差 10 倍,而那个数通常就摆在选项里。

🔴 K / M / G 有两套约定,别混。 存储容量、地址空间走 210;速率、频率、运算次数走 103。判据是这个量是不是由二进制位数决定的。所以 1 KB=1024 B,而 1 GHz=109 Hz1 MIPS=106 条指令/秒。

五、基准程序

基准程序(benchmarks)是专门用于性能评测的一组程序,在不同机器上跑同一组程序、比较运行时间即可评测性能。它是一个测试程序集,由一组程序组成而不是单个程序——用一组是为了避免单一负载的偏向。

基准程序的两个局限,以及结论冲突时怎么综合(题面出现"P1 在 M2 上更快而 P2 相反"这类对照数据时展开)
  • 同一组程序在两台机器上可能给出方向相反的结论:程序 P1 在 M2 上更快,程序 P2 却在 M1 上更快。这时的做法是取所有程序执行时间的算术平均值或几何平均值来综合评价;如果进一步考虑每个程序的使用频度而采用加权平均,结果会更准确。
  • 更根本的一条:硬件或编译器可能针对基准程序中的关键代码做特殊优化,使评测结果不能代表处理一般负载的能力。

考点速记

  1. T=IC×CPI×Tc 的三个因子分属三个层次IC 归 ISA 与编译器、CPI 归处理器实现、Tc 归电路与工艺)且互相制约——所以指令条数最少的程序不一定最快,主频提高 k 倍速度也到不了 k 倍。
  2. 口径必须分清:系统性能指响应时间,CPU 性能指用户 CPU 时间;时钟周期由关键路径钉死,一个时钟脉冲不等于开始一条新指令;程序的 CPI 是含 Cache 缺失与阻塞的实测值,不是常数
  3. Amdahl 定律的上限 1/(1p) 之所以成立,是因为分母里 (1p)n 无关的常数项——优化的收益上界由被优化部分的时间占比决定,与优化做得多漂亮无关。

这一节在真题里被考过的形式(下方「真题练习」逐题对应):

  • 给几条改进措施,问哪些能缩短执行时间:把每条对到 T=IC×CPI×Tc 的某个因子上——提高主频动 Tc、优化数据通路动 CPI、编译优化动 IC。三条各压一个因子,所以都算数。
  • 给主频与各类指令的比例和 CPI,问 MIPS / 平均 CPI / 执行时间:一律先加权求综合 CPI,再按问的量走链条(IC×CPI 得总周期、÷f 得时间、f/(CPI×106) 得 MIPS)。⚠️ 比例可以按指令类型给,也可以按"80% 的指令要 1 个周期"这样给,都是加权。
  • 给原执行时间和"IC 变为 70%、CPI 变为 1.2 倍",问新时间T 与三因子成正比,直接乘系数(20×0.7×1.2),不必回头求 IC
  • 给两台机器的主频与 CPI,问执行时间之比:先认出"相同 ISA、同一个程序"⇒ IC 约掉,比值只剩 (CPI1/f1)÷(CPI2/f2)。⚠️ 看清问的是时间之比还是性能之比,两者互为倒数。
  • 给总时间与其中某部分,问某部分提速后的总时间:只除能加速的那一段,不能加速的原样加回去。
  • 问哪个指标描述浮点操作速度 / 给 PFLOPS 数值问每秒多少次浮点操作:前者认 MFLOPS——判据是它数的是操作次数不是指令数;后者先把词头落到 10 的幂(P =1015),带上系数,再按中文四位一进翻。
  • 挑关于时钟脉冲或 CPI 的错误叙述:常设的两个错点是"每来一个时钟就开始执行一条新指令"(只有单周期成立)和"程序的 CPI 与 Cache 缺失率无关"(缺失代价直接进有效 CPI 公式)。

易错:「速度 / 性能提高到 k 倍」要取倒数才落到时间上(那段时间变成 1/k),「时间减少 x%」才是直接乘。"CPU 速度提高 50%"是指 CPU 那段时间除以 1.5,不是乘 0.5。

易错:中文换算漏乘题面系数。93 PFLOPS 是 9.3×1016(9.3 亿亿次),照词头直接念成"9.3 千万亿次"正好差 10 倍,而它通常就摆在选项里。

易错:K / M / G 两套约定混用。容量和地址空间走 210,频率、速率、运算次数走 103

易错:Amdahl 反求局部倍数时先拿目标与 1/(1p) 比大小, 上限直接判无解;硬列方程会解出 n 还以为自己算错了。

易错:MIPS 跨指令集不可比,"MIPS 高的机器跑同一个程序一定更快"不成立;同理不同型号 CPU 不能仅凭主频比性能。

教材出处
  • 吞吐率与响应时间的定义、用户 CPU 时间与其他时间的划分、系统性能与 CPU 性能的区别、时钟周期与主频与 CPI 的定义:袁春风《计算机组成与系统结构》第 3 版 §1.5.1,印刷页 p16–p17
  • CPU 执行时间的各种等价公式、综合 CPI 的加权平均式、"三个因素相互制约"与"指令条数最少的程序不一定执行得最快":同上,印刷页 p17–p18
  • MIPS 的定义与跨机器比较的局限、峰值 MIPS 与相对 MIPS、MFLOPS 及 GFLOPS/TFLOPS/PFLOPS/EFLOPS 的量级:同上 §1.5.2,印刷页 p18
  • 基准程序的定义、结论冲突时取算术/几何/加权平均、针对性优化的局限:同上 §1.5.3,印刷页 p18–p19
  • Amdahl 定律:基本思想、两种表达形式、三个边界值、加速比上限 1/(1t)、"整体性能受慢速部件制约"、异常处理程序优化收益几乎为零的例子:同上 §1.5.4,印刷页 p19–p20
  • 时钟信号对指令内各操作的定时、一条指令的执行时间包含一个或多个时钟周期:同上 §1.4.4,印刷页 p16

相关知识

计算机系统层次结构Cache 性能分析流水线性能指标CISC 与 RISC多处理器基本概念

真题练习