ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

计算机性能指标全解析:从MIPS到FLOPS的实用指南

计算机性能指标全解析:从MIPS到FLOPS的实用指南 打开任何一台服务器的参数页面或者超级计算机的榜单第一眼看到的大概率是 MIPS、MFLOPS、GFLOPS以及一串让人眼花缭乱的 TFLOPS、PFLOPS、EFLOPS。不少朋友的直觉反应是数字越大就越厉害。可真要问一句这些指标分别代表什么同一台机器为什么在某个指标下是几千、换个指标就变成几百万大多数时候会卡壳。这篇文章就把这套计算机性能指标体系从头到尾捋一遍。我会先讲清楚每个单位到底在“量”什么物理含义再给出可以直接套用的峰值计算公式最后聊一聊在不同的工作场景里到底该信哪个指标、怎么避免被纸面参数带偏。内容不挑基础哪怕你是刚接触计算机组成原理的学生或者正在做软硬件选型的工程师都能拿这份内容当一套“指标避坑参考”。1. 性能的本质所有指标都在回答同一个问题1.1 计算机性能到底是什么在拆具体单位之前得先把“性能”这两个字定义清楚。计算机性能的本质是单位时间内能完成多少“事”。这里的事可以是一次整数加法、一次浮点乘法、一帧图像的渲染也可以是一条数据库查询。度量方式不同指标就不同但背后都离不开两个基础视角。响应时间单个任务从发起请求到拿到结果需要多久。关注它的人通常在意“等得久不久”。吞吐率单位时间内系统能处理多少个任务。关注它的人通常在意“扛不扛得住”。MIPS 和 FLOPS 系列本质上都是吞吐率指标只不过它们把“任务”定义成了非常底层的硬件操作执行一条指令、完成一次浮点运算。这也是为什么它们看起来“很硬核”——它们不关心业务只关心芯片本身能在单位时间里把多少电路层面的活干完。理解这一点很关键因为后面所有指标的差异、适用范围、局限性都源于对“一件事”的不同定义。1.2 为什么需要一长串指标原因其实很朴素计算机要干的“事”种类太多量级跨度又太大。一个 CPU 既要跑整数指令也要跑浮点指令。整数运算负责地址计算、逻辑判断、状态控制浮点运算负责科学计算、图形渲染、AI 矩阵运算。在很多现代处理器里这两类运算走的物理执行单元根本不是同一套电路所以需要单独统计各自的吞吐能力。同时量级跨度惊人。一台普通手机芯片的浮点能力可能只有几百 GFLOPS一台 AI 训练服务器轻松就是几十 TFLOPS而一台进入全球 TOP500 榜单的超级计算机峰值已经来到了几百 PFLOPS 甚至更高。如果只用一个固定单位去描述数字要么长到没法读要么小到没法看。于是就有了从 M兆到 Z泽的整套前缀体系每个前缀代表 1000 倍就像米、千米、光年一样让数字保持在可读的尺度内。这套前缀体系在接下来会反复用到建议顺手收藏一张换算关系表。单位英文全称数值常见应用场景MIPSMillion Instructions Per Second10^6 条指令/秒嵌入式MCU、DSP、经典处理器MFLOPSMillion FLOPS10^6 次浮点运算/秒早期工作站、PC处理器GFLOPSGiga FLOPS10^9 次浮点运算/秒手机SoC、普通游戏GPUTFLOPSTera FLOPS10^12 次浮点运算/秒服务器CPU、AI训练卡、高端GPUPFLOPSPeta FLOPS10^15 次浮点运算/秒超级计算机整机EFLOPSExa FLOPS10^18 次浮点运算/秒百亿亿次超算、大规模AI集群ZFLOPSZetta FLOPS10^21 次浮点运算/秒未来核聚变、全球级算力设想2. MIPS最老牌也是最容易被误读的指标2.1 MIPS 的计算公式和基本含义MIPS 全称 Million Instructions Per Second每秒百万条指令。它统计的是处理器每秒钟能执行多少条机器指令适合用来衡量整数运算为主的负载因为很多指令加载、存储、跳转、逻辑判断本质都是整数类的控制操作。计算方式很简单MIPS 指令数 /执行时间 × 10^6如果换成处理器内部参数来表达又可以得到另一个常用公式MIPS 主频 /CPI × 10^6其中 CPICycles Per Instruction是每条指令平均需要的时钟周期数主频是每秒多少周期。举个例子一颗 3GHz 的 CPU跑某段程序的 CPI 平均为 1.5那么它的 MIPS 就是 3×10^9 /1.5×10^6 2000 MIPS。这个数字意味着它每秒大约执行 20 亿条指令。这里要特别提醒一点MIPS 会因为所跑程序的不同而不同因为不同程序的指令混合比例不一样CPI 也会跟着变。所以你看到某个 CPU 标注“XX MIPS”时一定要问一句“这是跑什么程序测出来的”2.2 为什么现代 CPU 已经不拿 MIPS 当宣传卖点MIPS 最大的问题在于它把“一条指令”当成等价的度量单位但不同指令集架构里一条指令的含义可能天差地别。用一个生活类比A 公司员工每人每小时能处理 100 张“简单表格”B 公司员工每人每小时能处理 80 张“复杂表格”。如果只看“表格张数”A 公司好像更强但 B 公司处理的复杂表格可能需要 A 公司员工处理 200 张才等价。此时“张数”这个度量就直接失真了。指令集也是同样的道理。RISC 指令集大多是一条指令做一件简单的事而 CISC 指令集里一条指令也许就能完成一次带内存操作数的复杂计算。同一个程序在不同指令集上编译出来的指令条数完全不同单纯比 MIPS 就好比拿“张数”去比较两种难度不同的工作结论毫无意义。还有一个更隐蔽的问题MIPS 数值和程序优化质量强相关。编译器越聪明把循环展开、向量化做得越好程序需要执行的动态指令数就越少跑完同样任务的 MIPS 反而可能越低。所以用 MIPS 去衡量“处理器快不快”或者“编译器好不好”很容易得出反直觉的结论。2.3 MIPS 现在还在哪些地方用虽然桌面 CPU 和服务器 CPU 的宣传页上已经很少见到 MIPS但它在三个领域依然活跃。嵌入式与单片机领域MCU 的指令集相对固定程序也相对简单MIPS/MHz 常被用来对比不同内核的“每兆赫兹指令执行能力”。DSP 信号处理选型很多 DSP 厂商依然会给出 MMACS每秒百万次乘加运算或 MIPS因为它们的软件生态通常绑定特定指令集可比性比通用 CPU 好一些。计算机体系结构教学比如用 Logisim 做多周期 MIPS 处理器设计时课程作业里常会让你统计每条指令的周期数然后估算处理器的 MIPS。这时候 MIPS 就是一个很好的“设计成绩单”——不比绝对值比的是你的数据通路和控制逻辑设计是否高效。顺带一提学习多周期 CPU 设计时看 MIPS 有个好处它直接把主频和 CPI 联系起来了。你不需要跑操作系统只需要在波形仿真里统计指令条数和周期数就能算出一个贴近真实的吞吐率。3. FLOPS 家族从 MFLOPS 一路数到 ZFLOPS3.1 FLOPS 统计的到底是什么运算FLOPS 全称 Floating-point Operations Per Second每秒浮点运算次数。它不再数“指令”而是数“浮点运算操作”。浮点运算指的是对单精度、双精度等浮点数进行的加减乘除运算。很多人一开始会对“一次浮点运算”的定义犯迷糊。具体来说一次加法、一次减法、一次乘法、一次除法各算 1 次运算。一次融合乘加 FMAFused Multiply-Add也就是 a×bc 一把算完的指令在统计 FLOPS 时通常算 2 次运算因为它同时完成了乘法和加法两件工作。现代 CPU 和 GPU 之所以大量使用 FMA 指令原因就在于此一条指令能贡献两倍的 FLOPS 数值。很多处理器宣传“双精度浮点性能”时默认算的就是 FMA 指令下的峰值。理解这个细节之后你再看到厂商标注的 FLOPS 数字至少知道它是“满负荷执行 FMA 指令”的理想值还是普通指令的更保守估计。3.2 从 MFLOPS 到 ZFLOPS 的跨度到底有多大FLOPS 系列单位每跳一档就是 1000 倍这个跨度用语言很难体会我用几个典型场景帮大家建立体感。MFLOPS一台 80486 级别的早期 PC浮点能力大约就是这个量级主要用于简单的数值计算。GFLOPS现在随便一台智能手机的 SoC单精度浮点能力都能到几百 GFLOPS足够实时处理拍照、视频、AR 效果。TFLOPS现代游戏显卡和服务器 CPU 的量级。一块高端游戏 GPU 的单精度浮点性能约为 40 至 80 TFLOPS。PFLOPS超级计算机整机的量级。近年登上 TOP500 榜首的系统实测 Linpack 性能普遍在百 PFLOPS 量级。EFLOPS每秒百亿亿次浮点运算这是当前“超大规模算力集群”正在冲刺的关卡一台 EFLOPS 级别的机器通常要由数万台加速卡联动构成。ZFLOPS10^21 次浮点运算对应百亿亿亿次级别目前主要出现在概念设计和未来规划中用于想象“全球算力聚合”的终极形态。这里要特别强调一个容易混淆的点FLOPS 的“S”是每秒per Second它和存储容量GB、TB不是一回事。1 TFLOPS 是指每秒做 10^12 次浮点运算不是“1TB 的文件在流动”。虽然它们都用 T 这个前缀但一个是运算速率一个是存储或传输量。3.3 理论峰值不等于实测性能厂商页面上的 FLOPS 数字绝大多数是理论峰值意味着“硬件电路在理想状态下火力全开”的数值。实测性能则要小得多。以超级计算机为例TOP500 榜单上用的就是 Linpack 基准测试的实际成绩而不是纸面峰值。一台宣传峰值 400 PFLOPS 的系统Linpack 实测往往只有 300 PFLOPS 出头。这是因为 Linpack 要真实执行大规模矩阵运算数据搬运、内存带宽、互联通信、负载均衡都会拖后腿。另外还有一套 HPCG 基准测试它模拟的是稀疏矩阵迭代求解对内存访问模式极不友好测出来的成绩通常只有 Linpack 的百分之几。同样是百 PFLOPS 的机器跑 HPCG 可能只剩几个 PFLOPS。这也是为什么大家经常说“峰值是理论实测才是江湖。”4. 实操环节手把手计算一台机器的理论浮点峰值4.1 CPU 侧的理论峰值怎么算对于 CPU理论浮点峰值可以用一个通用公式估算理论浮点峰值 物理核数 × 主频 × 每周期每条指令的浮点运算数 × 每核支持的同时执行指令通道数简化成大多数同学能直接套用的版本就是理论浮点峰值 物理核数 × 主频 × 每周期可执行的 FMA 次数 × 2关键在于“每周期可执行的 FMA 次数”这个参数取决于指令集扩展和微架构设计。以支持 AVX-512 的服务器 CPU 为例FMA 指令操作 512 位向量。单精度 float 占 32 位一个 512 位向量能装下 16 个单精度数。一条 FMA 指令对这 16 个数同时做乘加等价于 16 次乘法和 16 次加法共 32 次浮点运算。再加上 FMA 指令本身的乘加融合每条指令贡献的 FLOPS 就是 16×232。实际操作中现代 CPU 每个周期能发射不止一条这样的 FMA 指令。假设某颗 28 核处理器主频 2.0GHz支持每核每周期 2 条 512 位 FMA 指令那么单颗芯片的单精度理论峰值就是28 × 2.0×10^9 × 2 × 32 3.584×10^12 FLOPS约 3.58 TFLOPS如果换成双精度512 位向量只能装下 8 个 double每条 FMA 贡献的运算数减半同一个公式算出来的峰值就只剩 1.79 TFLOPS 左右。双路服务器就是再乘以 2整机单精度浮点理论峰值约 7.17 TFLOPS。这就是服务器宣传页上那些“XX TFLOPS”的主要来源。4.2 GPU 和 AI 加速卡的理论峰值怎么算GPU 的算力公式和 CPU 类似只是并行单元多到令人发指理论浮点峰值 CUDA 核心数或流处理器数× 主频 × 每周期每核心 FMA 次数 × 2绝大部分 GPU 的每个流处理器每周期只能执行 1 次 FMA 指令少数架构可以执行 2 次所以理论单精度峰值 核心数 × 主频 × 2举一个真实架构的近似例子某款 GPU 拥有约 16384 个单精度核心Boost 频率 1.83GHz它的单精度理论峰值就是16384 × 1.83×10^9 × 2 ≈ 6.0×10^13 FLOPS约 60 TFLOPS如果算双精度很多消费级 GPU 会有特殊的裁剪设计双精度峰值可能只有单精度的 1/32 甚至 1/64。所以同样一块卡厂商宣传单精度 60 TFLOPS但你要做双精度科学计算实际只有 1.9 TFLOPS 左右。这中间的落差太大了选型时务必看清楚。至于新一代 AI 加速卡情况更复杂。它们引入了专用矩阵计算单元比如 Tensor Core一张卡宣传的“AI TFLOPS”往往比传统 CUDA 核心算出的峰值高一个数量级。这类数字只适用于矩阵乘加密集的 AI 负载跑普通浮点代码时完全不能参考。4.3 实操示例双路服务器的算力估算我以一套常见的深度学习训练服务器为例演示完整估算过程。硬件配置双路 CPU每颗 32 核基频 2.5GHz支持 AVX-512每核每周期 2 条 FMA 指令。按单精度计算单颗 CPU 峰值 32 × 2.5×10^9 × 2 × 32 5.12×10^12 FLOPS双路整机 5.12×10^12 × 2 1.024×10^13 FLOPS即约 10.24 TFLOPS再配 4 张加速卡每张单精度峰值约 60 TFLOPS整机单精度理论峰值就是10.24 4×60 250.24 TFLOPS这个数字就是厂商配置单上经常出现的那种“整机约 250 TFLOPS”。但请注意这250 TFLOPS 只有在所有 CPU 核、所有加速卡同时满载运行纯单精度 FMA 指令时才能逼近实际训练任务还要扣掉数据加载、通信同步、算子切换的时间最终有效吞吐往往只有理论峰值的 40% 到 60%。用 Python 写个小工具你可以随时算def cpu_peak_fp32(cores, freq_ghz, fma_per_cycle, vector_width_bits512): # vector_width_bits512 时单精度能装 16 个数 flops_per_fma (vector_width_bits // 32) * 2 return cores * freq_ghz * 1e9 * fma_per_cycle * flops_per_fma def gpu_peak_fp32(cores, freq_ghz, ops_per_core_per_cycle2): return cores * freq_ghz * 1e9 * ops_per_core_per_cycle print(cpu_peak_fp32(32, 2.5, 2)) # 5.12e12 print(gpu_peak_fp32(16384, 1.83)) # 约 5.99e13建议把这两个函数存下来以后看到任何“XX TFLOPS”的宣传先反推一下它的硬件配置能不能支撑这个数字。如果算出来明显对不上那大概率是把不同精度、不同计数方式混在一起宣传了。5. 什么时候该看哪个指标一套使用框架5.1 MIPS 适合的场景MIPS 更适合“指令行为高度确定”的场合。如果你在评估 MCU 或 DSP通常跑的是定点信号处理、控制逻辑、协议栈这类整数型负载。此时指令集相对固定、程序路径明确MIPS 可以大致估算每秒能处理多少条指令从而推算任务是否有余量。还有一个典型场景是处理器设计课。用 Logisim 实现多周期 MIPS CPU 时你手上的成果就是一个带数据通路、控制器、寄存器和 ALU 的硬件模型。此时你没有操作系统、没有编译器优化干扰MIPS 就是衡量数据通路设计好坏的直接指标同一段汇编程序你的设计需要的时钟周期越少MIPS 越高处理器就越快。不过要记住这种场景下的 MIPS 只在“同一基准程序、同一指令集”下才有比较价值换个汇编程序结果就会变。5.2 FLOPS 适合的场景FLOPS 系列指标适用于数值计算密集型的负载包括科学与工程计算有限元分析、流体力学模拟、分子动力学、气象预测都是双精度浮点运算为主直接对应“双精度 FLOPS”。图形渲染与游戏单精度浮点运算是 GPU 着色器的核心负载。AI 训练与推理矩阵乘加、卷积运算可以转化成大量 FMA 操作厂商经常用“AI TFLOPS”来标注但这通常包含稀疏加速和低精度FP16、INT8加成。在这些领域里FLOPS 能反映一台机器的“理论肌肉上限”但选型时一定要问清楚是单精度还是双精度是稠密矩阵还是稀疏加速是理论峰值还是实测吞吐。5.3 一个指标打天下的陷阱实际工作中最常踩的坑是拿着一个指标去对比两种完全不同类型的负载。举个例子数据库服务器可能更关心整数指令吞吐、缓存命中和 IOPS你给它堆一张 FP32 算力极高的 GPU 并不会提升多少数据库性能。反过来AI 训练集群的核心负载是矩阵张量运算你拿“MIPS很高”的传统 CPU 去跑算力再大也推不动大模型训练。所以更合理的方式是建立一套“多指标组合”的评估体系。下表是我在选型时常用的对照思路。场景首要指标辅助指标嵌入式控制MIPS、MCU 主频功耗、中断响应时延科学计算双精度双精度 TFLOPS内存带宽、互联带宽、Linpack 实测深度学习训练低精度 TFLOPSFP16/BF16显存容量、卡间互联、实际吞吐数据库/后端服务QPS、核数、缓存内存通道数、磁盘 IOPS桌面办公单核性能、响应时间内存容量、硬盘速度没有哪个单指标能回答所有问题FLOPS 只是一把尺子测的是浮点运算这一项。6. 常见误区与实战避坑指南6.1 误区一数字越大就一定越好这个看似正确的直觉在性能指标里经常翻车。两个原因第一前提条件可能完全不同。一块专业计算显卡 FP32 为 60 TFLOPS另一块游戏显卡 FP32 也是 60 TFLOPS但前者可能双精度为 30 TFLOPS后者双精度只有 1 TFLOPS。如果你跑的是双精度科学计算前者的“同数字”价值高得多。第二持续表现可能完全不同。峰值数字是瞬间的极限而散热设计、功耗墙会导致实际运行时频率迅速下降。一块峰值高的板卡如果散热差长时间跑任务反而比峰值低但散热稳的板卡更慢。6.2 误区二把峰值 FLOPS 当实际吞吐前面提到过 Linpack 和 HPCG 的差距。我再给一组典型的数字某台机器理论峰值 100 PFLOPSLinpack 实测可能约 70 至 80 PFLOPSHPCG 实测可能只有 2 至 5 PFLOPS。如果项目负载是稀疏迭代求解而你用宣传峰值 100 PFLOPS 去估工期工期会差出好几倍。正确做法是无论买服务器还是租云算力都要先跑与业务负载相似的小规模基准测试用实测数据外推而不是直接在宣传峰值上乘一个经验系数。6.3 误区三混用精度和计数口径“这卡有 60 TFLOPS”这句话如果不带精度基本没有意义。同样的硬件FP3260 TFLOPSFP642 TFLOPSFP16 使用 Tensor Core240 TFLOPSINT8 使用 Tensor Core480 TFLOPS厂商宣传时通常会挑最好看的数字。所以看性能参数时第一件事就是在心里追问这是 FP32 还是 FP16是稠密矩阵还是稀疏加速是 FMA 运算还是分离的加法和乘法至于稀疏加速有些卡宣称通过“2:4 结构化稀疏”可以让有效算力翻倍。这种数字只在权重稀疏度达标时才成立真实模型往往达不到这个条件。6.4 一套速查卡片最后分享一张我贴在工位上的速查笔记方便随手对照。概念一句话理解CPI每条指令平均占用的时钟周期数越小越好MIPS每秒执行多少百万条指令适合定点/控制类负载FLOPS每秒浮点运算次数单位前缀每跳 1000 倍FMA乘加融合指令一次算出 a×bc统计时常算 2 次运算理论峰值全额运行的理想上限实测通常只有 40% 到 70%Linpack常用实测基准稠密线性代数为主接近理论峰值HPCG稀疏迭代基准非常考验访存和通信数据通常很低精度口径FP32/FP64/FP16/INT8 务必分清楚否则数据不可比能效比MFLOPS/W 或 TFLOPS/W同样性能下功耗越低越好这条速查表也适合配合 CPU 设计实践使用。比如你在 Logisim 里做多周期 MIPS CPU 时数据通路的延迟决定了最高主频控制器状态数决定了 CPI两者合起来其实就是在做一个“微缩版”的 MIPS 指标优化。7. 写在最后指标是指南针不是终点我在实际选型和性能优化里的体会是指标这个东西最大的价值不是用来排名而是用来判断“瓶颈在哪”。一台机器标称 250 TFLOPS实际跑任务只有 120 TFLOPS这不一定是坏事。真正的问题是搞清楚少掉的那 130 TFLOPS 到底消耗在哪里——是通信带宽不够是访存冲突是算子调度不充分还是负载本身就无法并行化。如果能顺着这个思路去排查性能指标就不再是纸上的数字而是整个系统调优的“地图”。同样如果你是正在学习处理器设计的学生与其纠结 MIPS 和 FLOPS 哪个更先进不如把自己设计的 CPU 放在不同基准程序下统计 CPI、指令数、频率亲手画一条“性能曲线”。这种实践经验比单纯背单位换算有用得多。最后再分享一个我自己经常用的小技巧拿到任何一份配置单先别急着看峰值数字先看测试条件那一栏。如果连精度、测试负载、有无稀疏加速都没有写清楚那这份参数的可信度就要打个折扣。反过来如果有人能把条件写清楚哪怕数字低一些也值得认真对待。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进