Lobsters | 📄 原文链接 | 2026-07-14 收录

一个"无用"的 if 让代码性能翻四倍:CPU 投机执行的奇妙世界

来源:purplesyringa.moe — 2026-07-12

📋 概述

作者在优化一个领域专用压缩器时,发现一个看似无用的 if 语句——在条件几乎总是成立的情况下再加一层检查——竟然让代码性能提升了四倍。核心原理是:原循环 j = next_j[i][j] 形成了一条依赖链,每次迭代必须等上一次内存读取完成,循环受限于内存访问延迟。加入一个 CPU 预测为"不成立"的 if (j != next_j[i][j]) 分支后,CPU 投机执行跳过赋值,打破依赖链,循环从延迟受限变为吞吐量受限。但编译器会优化掉这个"无用"分支,需要用 volatile 强制保留。合成基准测试从 320μs 降至 80μs(4 倍),真实场景约 2 倍提升。文章还讨论了用 pshufb 向量化来并行计算多路径的替代方案。

🔑 核心要点

💡 金句

愚蠢的编译器不理解整数的硬件来源——我们不得不用 volatile 来"欺骗"它,让一个无用的 if 成为 CPU 投机执行的关键触发器。
← 返回 Lobsters 首页