高速化の結果を報告するための正しい統計


12

いくつかのコードの低速バージョンと高速バージョンがあり、2つのコードを比較して高速化した数値を報告したいとします。低速バージョンを回、高速バージョンをm回実行して、時間s 1s nおよびf 1f m)を生成します。高速化を生成する最も簡単な方法は、手段を平均化することである。 ˉ nm(s1,,sn)(f1,,fm) ただし、これは外れ値を考慮していません。

s¯f¯=mi<nsinj<mfj

質問:スピードアップの数値を報告するときに使用するのに最適な統計は何ですか?


3
平均と比較した標準偏差の大きさは?何をするにしても、何をしたかを報告し、エラーバーが大きい場合はおそらくエラーバーを配置する必要があります。それらが非常に大きい場合は、ソースを調査する必要があります。ほとんどのコンピューターコードは、プログラム自体にランダムなコンポーネントがない限り、またはコンピューターリソースを他のユーザーと共有している場合(クラスターノードだけでなく、ネットワークやディスクでもよい)を除いて、かなり確定的に実行する必要があります。ディスクリソースの競合が問題になる場合は、I / Oを無効(非常に一般的)にしてパフォーマンスを報告することを検討してください。必ず注意してください。
ビルバース14

Edison(Crayスーパーコンピューター)では、2つのサンプルの間に2%の差があります。私のラップトップでは、10個のサンプルで6-8%の標準偏差が測定されています。どちらも計算カーネル専用であり、I / Oはありません。
ジェフリーアーヴィング14

分散がすでに合理的に低い場合に異常値を言及している理由を明確にするために:これは十分に基本的な統計量であり、それを報告する理想的な方法を知りたいです。
ジェフリーアーヴィング14

2
問題は、あなたが何を伝えようとしているのか、そしてフォーミュラはそれを最高に伝えますか?原因が論文の中心でなかった限り、高速化の実行ごとの変動性を報告する論文を見たことがないと思います。実行時間とプロセッサ/タスク/スレッドカウントの間に線形関係があると仮定すると、おそらく平均の比率を使用しても問題ありませんが、最大と最小および最小と最大の比率のエラーバー範囲を示すことが重要だと思われる場合。また、変動性を抑えるために、おそらく周波数スケーリングとタスク固定オプションを確認する必要があります。:)
ビルバース14

IOを排除するには、多くの策略があります。コンパイラーの最適化から「書き込み時のコピー」トリックへの間に、実際には非自明な関係があります。私は通常、d1 = loadData();のプロトタイプに従います。d2 = copy(d1); r1 = algo(d2); r2 = algo(d1)、2回目の実行の時間のみを考慮します。
meawoppl 14

回答:


9

ビル・バースが既に上記で述べたことに加えて、いくつかのランの中で最も速い人がしばしば報告することを言及させてください。根拠は、実際の実行時間があるということである理想的なのこれらが使用して、我々が興味を持っていないすべてのノイズ、されているので、実行時間に加え、他のプロセスから生じる遅い浮き沈みの任意の数の実行中、OSの遅延、ネットワークの遅延など最速の実行時間が来ます本当に知りたいものに最も近い。


残念ながら、2つのアルゴリズム間の高速化を報告する場合、この原則は役に立ちません。
ジェフリーアーヴィング14

3
@GeoffreyIrving、なぜですか?両方のアルゴリズムには、問題のサイズ(またはプロセッサ数やその他の非統計的なパラメーター)に対する理論的なパフォーマンスの期待値があり、低次のパラメーターに依存しない項は無視されます。最速の時間を使用する(そしてこの事実に注目する)ことは、単にこれらの追加用語を無視するのに役立ちます。これは素晴らしい戦略のようです。別の言い方をしない限り、アルゴリズムとの違いを最も効果的に伝える方法を見つけようとしているように見えます。Wolfgangの提案は従来のものであり、その情報が最もよく伝えられるようになっています。
ビル・バルト

1
ああ、そうだね。私は喜んで声明を撤回します。
ジェフリーアーヴィング14

(+1)側面の質問:非対称ノイズ分布などについてのあなたのポイントを完全に確認します。実装Aと実装Bを作成し、それらをベンチマークし、妥当な量の実行後、 25番目の分位点と中央値と平均値は、Aの方がBよりも4.5倍速く、0%の分位点は3倍です。実装AとBを比較するとき、次の事実にもかかわらず:yes A is theoretically only ~3x faster、Bの代わりに実装Aを使用する場合に期待される高速化の非代表的な最大3倍の高速化ではないでしょうか?(これは仕方によって現実の一例である)
usεr11852は回復モニック言う

1
@usεr11852:それはすべてあなたが使用しているシステムに依存します。ここで仮説を立てる方法で統計値を歪めるほど中央値または第25分位数が離れている場合は、ノイズの多いシステムにいる可能性があります。たとえば、他の人が同時に使用することなどがあります。これは、他の人が繰り返し実験するためのシステムの代表ではない可能性があります。だから、私はまだ最高の実行を報告することをお勧めします。何をするにしても、どの統計を使用するかを論文で報告する必要があります。
ヴォルフガングバンガース

1

中央値を使用して統計的推定を与えることをお勧めします。平均とは異なり、中央値は外れ値によって破損していません。


1
すべてのノイズが正である(つまり、非対称のノイズ分布がある)データの場合、中央値は他の統計値と同じくらい悪いです。ランタイムについては、これが実際に当てはまります。上記の私の答えを参照してください。
ウォルフガングバンガース14

0

標準偏差が無視できない場合、2つのボックスプロットを並べて使用し、それぞれ1つのアルゴリズムのタイミングで作成することができます。これらは数値解析の標準ではありませんが、この種の情報を表示するのに非常に役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.