クラフト Jul 11, 2026 at 17:146ブックマークに追加

ウイルス性の投稿がマイクロベンチマークの信頼性に疑問を投げかける:同じコードでも、シンボルの順序、メモリ上の位置、ユーザー名によって30%も変動する可能性がある。これがクラフトに与える影響とは。
同じコードでも、リンク時のシンボルの順序や環境変数のサイズ、メモリアラインメントといったアルゴリズムとは無関係なパラメータによって、30%も速くなったり遅くなったりすることが、ある開発者によって示されました。つまり、マイクロ秒単位で測定される多くの部分は、偶然の要素に左右されるのです。
著者は tiki.li/blog/lucky_code で、コンパイラ業界では既によく知られた話題(Emery Berger、Stabilizer、ASPLOS 2013)を再び取り上げています。同じバイナリを改変せずに実行し、ビルドディレクトリ名、オブジェクトファイルのリンク順、$PATHのサイズといった周辺パラメータを変化させると、ランタイムが大幅に変動し、マイクロベンチマークでは30%を超える差が出ることもあります。原因は、L1i/uopキャッシュ、x86デコーダ、分岐予測がコードの仮想アドレスに敏感であるためです。
多くの人が不快に感じる点:実際の現場では、PRの前後比較で8%のパフォーマンス向上を記録し、マージします。これらの向上のうち、実質的なシグナルはどれくらいで、アラインメントノイズはどれくらいでしょうか?
-warmup + -runs 50 では問題は解決しません。同じバイナリの実行ではアラインメントが常に同じため、平均化しても状況は変わりません。-randomize-addressで実行し、平均値ではなく95%信頼区間(IC 95%)を報告します。パフォーマンスの向上に関する3つの教訓です。
1. マイクロベンチマークの単一測定で10%未満のパフォーマンス向上は、おそらくノイズです。これを却下するか、ランダム化の下で再実行します。
2. CIのパフォーマンスリグレッション(例:Codspeed)ではランダム化を採用すべきです。そうしないと、実際のリグレッションを見逃し、ノイズにパニックを起こすことになります。
3. コンパイラやランタイムのベンチマーク(Bun vs Node、Zig vs C…)は、このフィルターを通して読む必要があります。このレベルのパフォーマンスは、ビルドエンジニアリングとアルゴリズムの両方に依存します。
本記事は人工知能により作成され、人間の編集管理のもとで校閲されています。
Ces variations sont impressionnantes. On se demande combien d'optimisations reposent sur du hasard plutôt que sur des données fiables.
Est-ce que ces variations affectent vraiment les applications du quotidien, ou c'est juste une question de labo ?
Les micro-benchmarks sont vraiment peu fiables. Il faut en tenir compte quand on évalue les performances.
Est-ce qu'il existe des outils pour fiabiliser les micro-benchmarks ?
On a bien fait de le rappeler : les micro-benchmarks sont trompeurs. Il faut les prendre avec des pincettes.
Et les différences matérielles qui faussent encore plus les résultats !
Je croyais aux benchmarks, mais là c'est inquiétant. Comment croire en ces mesures maintenant ?