いくつかのコードの低速バージョンと高速バージョンがあり、2つのコードを比較して高速化した数値を報告したいとします。低速バージョンを回、高速バージョンをm回実行して、時間(s 1、… 、s n)および(f 1、… 、f m)を生成します。高速化を生成する最も簡単な方法は、手段を平均化することである。 ˉ 秒 ただし、これは外れ値を考慮していません。
質問:スピードアップの数値を報告するときに使用するのに最適な統計は何ですか?
3
平均と比較した標準偏差の大きさは?何をするにしても、何をしたかを報告し、エラーバーが大きい場合はおそらくエラーバーを配置する必要があります。それらが非常に大きい場合は、ソースを調査する必要があります。ほとんどのコンピューターコードは、プログラム自体にランダムなコンポーネントがない限り、またはコンピューターリソースを他のユーザーと共有している場合(クラスターノードだけでなく、ネットワークやディスクでもよい)を除いて、かなり確定的に実行する必要があります。ディスクリソースの競合が問題になる場合は、I / Oを無効(非常に一般的)にしてパフォーマンスを報告することを検討してください。必ず注意してください。
—
ビルバース14
Edison(Crayスーパーコンピューター)では、2つのサンプルの間に2%の差があります。私のラップトップでは、10個のサンプルで6-8%の標準偏差が測定されています。どちらも計算カーネル専用であり、I / Oはありません。
—
ジェフリーアーヴィング14
分散がすでに合理的に低い場合に異常値を言及している理由を明確にするために:これは十分に基本的な統計量であり、それを報告する理想的な方法を知りたいです。
—
ジェフリーアーヴィング14
問題は、あなたが何を伝えようとしているのか、そしてフォーミュラはそれを最高に伝えますか?原因が論文の中心でなかった限り、高速化の実行ごとの変動性を報告する論文を見たことがないと思います。実行時間とプロセッサ/タスク/スレッドカウントの間に線形関係があると仮定すると、おそらく平均の比率を使用しても問題ありませんが、最大と最小および最小と最大の比率のエラーバー範囲を示すことが重要だと思われる場合。また、変動性を抑えるために、おそらく周波数スケーリングとタスク固定オプションを確認する必要があります。:)
—
ビルバース14
IOを排除するには、多くの策略があります。コンパイラーの最適化から「書き込み時のコピー」トリックへの間に、実際には非自明な関係があります。私は通常、d1 = loadData();のプロトタイプに従います。d2 = copy(d1); r1 = algo(d2); r2 = algo(d1)、2回目の実行の時間のみを考慮します。
—
meawoppl 14