计算机的主要性能指标

第 1 章唯一有计算大题的一节,也是全书性能分析的总口径。

这一节要立住的核心结论只有一句:

任何单一指标都不能评价性能;能评价性能的只有跑完一个具体程序要多久

主频、CPI、MIPS、峰值 FLOPS——每一个单独拿出来都能骗人。 后面所有章节谈”这个改进有多大用”,用的都是这一节的公式。

机制

静态指标:三个”多宽多大”

指标定义边界
机器字长CPU 一次能处理的二进制位数通常等于通用寄存器的位数;与存储字长、指令字长没有必然关系
数据通路带宽数据总线一次能并行传送的位数是外部数据总线宽度,可以小于机器字长
主存容量主存能存储的信息总量位数位数(1.2.2)

“机器字长 / 存储字长 / 指令字长”三者互不相同,这是高频陷阱:

字长是什么由什么决定
机器字长CPU 一次处理的位数ALU 和通用寄存器宽度
存储字长一个存储单元的位数MDR 位数
指令字长一条指令的位数IR 位数,通常是存储字长的整数倍

动态指标:时间才是硬通货

指标定义越大越好?
响应时间(执行时间)一个任务从提交到完成的时间越小越好
吞吐量单位时间内完成的任务数越大越好
CPU 时钟周期 一个时钟节拍的长度越小越好
主频 每秒时钟周期数,越大越好
CPI执行一条指令平均所需时钟周期数越小越好
IPC每个时钟周期完成的指令数,越大越好

核心公式,全书都在用:

三个因子分别由谁决定——这张表是理解全书优化手段的钥匙:

因子主要由什么决定哪一章在动它
(指令条数)程序、编译器、指令系统4.4 CISC 想减少它
指令系统 + 微体系结构5.6 流水线想降它;3.5 Cache 想降访存带来的 CPI
(主频)工艺 + 关键路径长度5.6.4 分段越细, 越短

关联对照:三个因子方向相反,这是全书的核心张力

几乎每一项”优化”都不是三个因子一起变好,而是一个变好、另一个变差。

优化手段
CISC 加复杂指令(4.4.1)↓↑↓
RISC 精简指令(4.4.2)↑↓↑
加深流水线(5.6.4)—↑(冒险更多)↓,↑
加 Cache(3.5)—↓—
超标量(5.6.5)—↓(IPC>1)—

所以”某某技术让计算机变快了”永远是一句不完整的话——必须问:它动的是哪个因子,另外两个付出了什么。4.4.3 的 CISC/RISC 之争,本质就是在这张表上选一列。

平均 CPI 必须按动态条数加权

若第 类指令有 条、每条 个周期:

为动态比例

绝不能对各类 CPI 直接取算术平均。

另一个高频错法: 是动态指令条数,不是程序里写了几条。 循环体写一遍、执行一万遍,算一万条。

MIPS 与 FLOPS:为什么它们会骗人

若 以 MHz 给出,直接 。

MIPS 的三条致命缺陷:

  1. 不同 ISA 的一条指令做的事不一样——CISC 的一条抵 RISC 的五条,比 MIPS 等于比谁的指令更”碎”。
  2. 同一台机器跑不同程序,MIPS 不同——指令组合变了,CPI 就变了。
  3. MIPS 高不等于程序快——编译器优化后用更少但更复杂的指令,程序更快而 MIPS 下降。
浮点运算次数
单位数量级
MFLOPS / GFLOPS / TFLOPS / PFLOPS / EFLOPS

这里的 k、M、G 按十进制解释(),而容量单位的 K、M、G 按二进制解释()。这条不对齐是计算题的常见失分点。

疑问点:现在 CPU 的"骚操作"这么多,为什么营销页面上只有核心数、线程数、主频、睿频、架构、缓存、工艺

这个观察很准,而且它的答案正是这一节存在的理由。

先看那份营销清单是什么东西:

参数在本书里是什么为什么能上营销页
核心数、线程数5.7.3、5.7.2一个整数,谁都会比大小
主频、睿频本节的 一个数字,单调
缓存容量3.5一个数字
工艺(nm)1.1.1 的集成度一个数字,越小越先进
架构(代号)1.2.4 的”组成”一个名字,用来表示”新一代”

共同点:全都是”一个可以直接比大小的数,而且与跑什么程序无关”。


再看没上榜的那些”骚操作”是什么:

分支预测器的准确率、乱序窗口有多深、有几个执行端口、Cache 的组相联度和替换策略、预取器的激进程度、TLB 有多大、访存流水线能容忍多少个未完成的缺失……

它们全都有同一个毛病:收益取决于跑什么程序。

营销参数微结构”骚操作”
是不是一个数✅❌ 是一堆参数
能不能直接比大小✅❌ 更深的乱序窗口不一定更快
收益依不依赖程序看起来不依赖强烈依赖
能不能一句话说清✅❌

分支预测器从 95% 提到 97%,对分支密集的程序可能提速 10%,对科学计算可能一点用没有。 这种东西没法印在包装盒上。


而这一节要教的恰恰是:那份营销清单本身也是不可靠的。

主频最典型。 由 ,主频只是三个因子之一。历史上最著名的反例是奔腾 4:为了把主频冲上 3.8 GHz,把流水线加到 31 级,结果 涨了但 涨得更多,实际性能反被主频更低的对手压制。这正是 5.6.4 里”流水线段数不是越多越好”那条结论的现实版本。

所以业界真正用来比较的是基准程序(Benchmark)——见下一小节。营销页上的参数是给消费者看的代理指标,基准程序才是这一节承认的评价方式。


最后一层,也是最值得记的一层:那些”骚操作”其实是被间接卖掉的。

“架构”这一栏就是它们的打包名。 说”这是 Zen 5 架构”,卖的正是那一整套没法逐条列出的微结构改进。营销不是不卖它们,是把它们压缩成了一个代号——因为除此之外没有别的办法把它们变成一个可比的量。

这件事在考试里的对应结论是:1.2.4 说”组成对程序员透明”,透明的东西没法直接标价。可见的(主频、核心数)能标价,透明的(分支预测、乱序)只能靠一个架构名字和最终的基准分数说话。

基准程序:唯一诚实的评价方式

基准程序(Benchmark)是用一组有代表性的真实程序来测性能。

它比单一指标可靠,但仍有边界:

  • 结果只对测试覆盖的负载负责——用 SPEC 的分数推断游戏性能不成立。
  • 必须固定编译器版本、优化选项、输入规模、系统配置,否则不可比。
  • 归一化性能比的汇总用几何平均,不能用算术平均。

阿姆达尔定律:局部优化的天花板

设可优化部分占原时间比例 ,该部分加速 倍:

这个公式说的话很朴素:不能被优化的那部分,最终会成为天花板。

算例。 某功能占原时间 ,把它加速 4 倍:

局部快 4 倍,整体只快 43%。 而即使把它加速到无穷倍,——永远突破不了。

两个必须防的错法:

① 是在原执行时间中的占比,不是优化后的占比。

② 多核加速比要代 : 。这就是 5.7.3 里”核数翻倍性能不翻倍”的公式来源。

三种”提高性能”的说法要分清

说法含义
”A 的性能是 B 的 倍"
"A 比 B 快 "
"执行时间减少 “,性能提高

“时间减少 20%“对应”性能提高 25%“——两个数字不一样,题目问哪个就答哪个。

边界

说法判断理由
”主频越高性能越好”❌还要看 和
“机器字长 = 存储字长”❌三个字长互相独立
” 是程序里写的指令条数”❌是动态执行条数
”各类指令的 CPI 直接取平均”❌必须按动态条数加权
”MIPS 可以比较不同 ISA 的机器”❌一条指令做的事不同
”MIPS 越大程序跑得越快”❌见三条缺陷
”峰值 FLOPS 代表实际性能”❌是理论上限
”CPU 时间 = 程序运行的墙钟时间”❌墙钟还含 I/O 等待、调度等待
”局部加速 倍,整体就快 倍”❌阿姆达尔
” 与 互为倒数”✅同一统计口径下成立
” 不可能大于 1”❌超标量可以(5.6.5)
“1 GHz 主频的时钟周期是 1 ns”✅

对照速查

主频时钟周期
1 GHz1 ns
2 GHz0.5 ns
500 MHz2 ns
200 MHz5 ns
三个字长由什么决定
机器字长ALU / 通用寄存器宽度
存储字长MDR 位数
指令字长IR 位数

审题四问:① 是动态的吗?② 多类指令加权了吗?③ 单位是十进制还是二进制?④ 问的是”快多少倍”还是”时间少多少”?

考点

  • 及两台机器的比较——必考。
  • 加权平均 CPI。
  • 阿姆达尔定律及其上限。
  • MIPS 的局限。
  • 三个字长的区分。
  • “快 “与”时间减少 “的换算。

链接