The Right Call for Software Benchmarking: Consistent Decisions in Stateful Environments
本文认为,在自适应机制会使绝对性能测量产生偏差的有状态计算环境中,软件基准测试应当被重新定义为一个决策问题,其核心在于通过旨在获得一致的性能差异估计值而非绝对值的实验设计,来识别出最快的程序。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下你是一名赛车工程师,正试图弄清楚两种新引擎设计中哪一个更快。你把它们带到了赛道上,但出现了一个问题:赛道本身是不可预测的。有时会刮风,有时沥青路面很烫,有时会有流浪狗跑过终点线,有时计时器会出现故障。这些就是论文中提到的“有状态(stateful)”因素——即那些你无法完全控制或预测的事物。
如果你只是运行引擎 A 五次,然后再运行引擎 B 五次,最后取平均值,你可能会得到错误答案。为什么?因为可能在运行引擎 A 时风平浪静,而在运行引擎 B 时却刮起了大风。环境的“噪声”使你的结果产生了偏差。
这篇由 Google DeepMind 的 Gábor Melis 撰写的论文指出,在这样一个混乱的世界里,试图测量单个程序的绝对速度是徒劳的。相反,我们应该停止关注“有多快”,而开始关注“哪一个更快”。
以下是该论文的核心内容,通过简单的概念进行了拆解:
1. 问题所在:“绝对速度”的幻象
论文指出,在现代计算机中,试图测量一个程序运行时间的完美、绝对数值,就像是在测量一个站在蹦床上的人的精确高度一样,而蹦床本身是在跳动的。环境(蹦床)会根据之前发生的事情而改变。
- 陷阱: 如果你先测量程序 A,然后再测量程序 B,计算机的“情绪”(缓存、温度、后台任务)可能在两者之间发生了变化。
- 结果: 你的测量结果会产生偏差。你无法信任那些绝对数值。
2. 解决方案:“面对面”竞赛(差值/Delta)
与其问“程序 A 有多快?”(这很难),不如问“程序 A 是否比程序 B 快?”(这更容易)。
- 类比: 想象两名跑者在泥泞的赛道上跑步。如果泥泞变得更深了,两名跑者都会变慢。如果你分别测量他们,你可能会因为第二个跑者时泥泞变深了而认为第二个跑者更慢。但如果你让他们同时进行(或者进行一场紧密交替的比赛),泥泞会对他们产生同等的影响。即使绝对时间很混乱,他们之间的差异依然是清晰可见的。
- 论文的观点: 通过关注在同一次实验中测得的两个程序之间的差异(即“delta”),环境噪声会被抵消。你不需要知道为什么计算机变慢了,你只需要知道它对两个程序来说都同样变慢了。
3. 策略:“分组(Block)”对比“随机化(Shuffle)”
论文测试了两种进行这种“面对面”比赛的方法,以确保“泥泞”不会欺骗你。
- “分组”法(旧方法): 你运行程序 A 10 次,然后运行程序 B 10 次。
- 缺陷: 论文表明这种方法存在风险。如果计算机的状态发生缓慢变化(例如赛道随时间推移逐渐变热),程序 A 可能会得到一个“凉爽”的开始,而程序 B 则会得到一个“炎热”的结束。即便你运行一百万次,这种偏差也不会消失。这就像是在早上让第一个跑者跑,然后在中午让第二个跑者跑。
- “随机化”法(新方法): 你为每一次运行抛掷硬币。正面:运行 A。反面:运行 B。
- 优势: 这是论文的大力推荐。通过随机混合这些运行过程,你可以确保任何环境“噪声”(比如突然的温度升高)对两个程序的影响大致相等。即使噪声非常狡猾并试图作弊,随机混合也会让噪声无法一致地偏袒其中一个程序。
4. 保障:“我们知道自己是对的”
论文不仅仅是说“尝试这样做”,它还使用数学证明了,如果你使用这种随机混合方法:
- 一致性: 如果你运行实验足够长的时间,无论计算机多么混乱,你最终都会找到真正的赢家。
- 有限预算: 你不需要无限的时间。论文提供了一种方法,可以让你计算出需要进行多少次运行,才能达到比如 95% 的把握确定程序 A 比程序 B 快。
5. 关于其他方法
论文还研究了人们衡量软件的其他流行方法,例如“配对基准测试(paired benchmarking)”(运行 A 然后 B,再运行 A 然后 B)或使用像 Google Benchmark 这样的库。
- 结论: 这些方法可能会减少数值中的“抖动(jitter)”(方差),让结果看起来更平滑。然而,论文认为它们并没有解决**偏差(bias)**问题。由于它们没有考虑到计算机状态的长期漂移,它们仍然可能选错赢家。随机混合法是唯一被证明在数学上能对抗这些隐藏“诡计”的方法。
总结
把软件基准测试想象成在一间灯光不断闪烁的房间里玩“石头剪刀布”。
- 旧方法: 测量玩“石头”用了多久,然后再测量玩“剪刀”用了多久。闪烁的灯光可能会让“剪刀”看起来更慢,仅仅是因为那个时刻灯光不好。
- 新方法(本论文): 在同一轮中同时玩“石头”和“剪刀”,并随机切换谁先出招。闪烁的灯光对两者的影响是平等的。即使你无法准确判断这一轮到底用了多久,你也能清晰地看出谁赢得了这一轮。
论文的结论是,为了构建更好的软件(如编译器或数据库),我们必须停止追求完美的绝对数值,而开始使用这些“随机化的面对面”竞赛来寻找真正的赢家。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。