一个“无用”的if让代码性能翻4倍

Quadrupling code performance with a "useless" if

6birdculture💬 0

最近在优化一个专用压缩器时,我遇到了一个看似简单的循环性能瓶颈。这个循环的核心只是 `j = next_j[i][j]`,按理说应该极快,但现代处理器的指令级并行特性让依赖链成了拦路虎。我灵机一动,加了一个看似完全多余的 `if` 判断:`if (j != next_j[i][j])`。这个“无用”的条件欺骗了编译器和 CPU 的分支预测器,让 CPU 认为 `j` 不会改变,从而打破了迭代间的依赖,将瓶颈从延迟限制转变为吞吐量限制。虽然编译器通常会优化掉这种逻辑,但我不得不借助 `volatile` 强制保留它。结果令人震惊:在合成测试中,运行时间从 320 微秒骤降至 80 微秒,性能直接翻了四倍。

"愚蠢的编译器根本没有意识到整数拥有硬件来源。"

同日更多故事 · 2026-07-13