ベンチマーク比較表

複数実装の生の計測値を貼り付けるだけで、平均・中央値・標準偏差・最小・最大・相対倍率をまとめた比較表を生成します。Markdown 版も同時に出力します。

散らばった計測値を一枚の比較表に。 1 行に 1 グループ、ラベル・コロン・生の計測値の順で入力します。よく使う統計量を計算し、最速のグループを基準に相対倍率を並べ、PR にそのまま貼れる Markdown 表も出力します。

1 行を「名前: 値, 値, 値」の形式で入力します。カンマ・セミコロン・スペースはいずれも区切り文字として扱われます。

グループ 回数 平均 中央値 標準偏差 最小 最大 相対

「名前: 1, 2, 3」形式の行を 1 つ以上入力すると比較表が表示されます。

ベンチマーク表を誤読しないための読み方

平均と中央値がずれるのには理由がある

この表は両方を表示します。そして最初に見るべきなのは二つの差です。平均が中央値よりかなり高ければ、少数の遅い実行が平均を引き上げています。GC の停止、キャッシュミスの集中、OS がそのコアに別の処理を割り当てた、といった原因が考えられます。中央値はそれらを無視しますが、平均は無視しません。

どちらが自動的に正しいというものではありません。定常状態のスループットでサーバーをサイジングするなら平均が重要です。遅い実行も実際に時間を消費しているからです。二つの実装を比べてどちらのアルゴリズムが優れているかを判断するなら、通常は中央値のほうが公平です。外れ値はあなたのコードではなくあなたのマシンを測っているからです。実際に論じている側の数字を引用し、どちらを使ったかを明示してください。

標準偏差はその比較が成立するかを教えてくれる

平均の差は、ばらつきに対して十分大きいときだけ意味を持ちます。12.0 ミリ秒と 12.4 ミリ秒で標準偏差が 0.05 なら、本当に違います。同じ二つの平均で標準偏差が 3.0 なら、それは帽子を替えただけの同じ数字であり、そこから導いた結論はノイズです。

このツールは標本標準偏差を使い、n ではなく n-1 で割ります。ここではそれが正解です。あなたの実行は「あり得るすべての実行」という母集団から抽出された標本であって母集団そのものではなく、n で割るとばらつきを系統的に過小評価してしまいます。実行が 1 回だけならばらつきは計算できず、この列は 0 になります。これは「1 回の計測はベンチマークではない」という注意喚起でもあります。

相対倍率こそが記憶される数字

最後の列は各グループを最速グループの倍数で表します。結果が復唱されるときはたいていこの形だからです。「新しいパーサーは 2.4 倍速い」は伝わりますが、「新しいパーサーは平均 8.2 ミリ秒」は、聞き手が基準値を知っていない限り伝わりません。

注意が二つあります。第一に、この比はその背後にある二つの平均の不確かさをそのまま引き継ぐので、ノイズの多いデータでの 1.05 倍は差とは言えません。第二に、「平均の比」と「比の平均」は別物であり、各実行の規模が大きく異なる場合には逆方向を指すことすらあります。数字が近いときは、倍率とあわせてばらつきも示し、読み手に判断を委ねてください。

すべてブラウザ内のネイティブ JavaScript で計算します。外部ライブラリなし、アップロードなし、追跡なし。

よくある質問

計測値はどんな形式で入力しますか。
1 グループ 1 行で、ラベル・コロン・数値の順です。カンマ、セミコロン、スペース、タブはすべて区切り文字として扱われるため、コピーした出力の多くは編集せずに使えます。
単位セレクタは換算を行いますか。
行いません。出力のラベルを変えるだけです。統計量は入力された数値そのままで計算されるため、ページ上のすべてのグループはあらかじめ同じ単位に揃えておく必要があります。
実行が 1 回だと標準偏差が 0 になるのはなぜですか。
標本標準偏差は n-1 で割るため、n が 1 のときは 0 になります。1 回の計測に報告すべきばらつきは存在せず、この 0 はもっと回数を増やすべきという合図です。
「相対」はどう計算していますか。
各グループの平均を、ページ上で最小の平均で割っています。最速のグループは 1.00 倍と表示する代わりに「最速」と表記します。書き出した表で読みやすいためです。
ベンチマークツールの出力をそのまま貼れますか。
たいていは貼れます。各行に名前・コロン・数値があれば、余分な記号は区切り文字として扱われます。コロンのない行はエラーにならず単に読み飛ばされます。
Markdown 表はプルリクエストにそのまま貼れますか。
貼れます。ヘッダ行と区切り行を備えた標準的な GitHub 風 Markdown です。列見出しはページの言語に従うため、英語の見出しが必要な場合は先に言語を切り替えてください。