1

まず第一に、これはマイクロベンチマークの有用性についてではありません。私はそれらの目的をよく知っています。単一の側面を強調するために、非常に特殊なケースでのパフォーマンス特性と比較を示します。これがあなたの仕事に何らかの影響を与えるべきかどうかは別の話です。

数年前、誰か(Heinz Kabutz?)は、結果を確認する価値のあるすべてのベンチマークを少なくとも数分実行する必要があり、少なくとも3回実行する必要があると指摘しましたが、最初の実行は常に破棄されます。これは、JVMのウォーミングアップ、環境の不整合(バックグラウンドプロセス、ネットワークトラフィックなど)、および測定の不正確さを説明するためでした。それは私には理にかなっており、私の個人的な経験は似たようなことを示唆していたので、私は常にこの戦略を採用しました。

ただし、多くの人(たとえば、Jeff)が、数ミリ秒(!)だけ実行され、1回だけ実行されるベンチマークを作成していることに気付きました。近年、短期間のベンチマークの精度が上がっていることは知っていますが、それでも奇妙なことに思います。ある程度有用な出力を得るために、すべてのマイクロベンチマークを少なくとも1秒間実行し、少なくとも3回実行する必要がありますか?それとも、そのルールは最近廃止されていますか?

4

1 に答える 1

0

私の経験では、次のことを行う必要があります。

  • 複数回実行する (そして最初の結果を破棄する - VM およびその他の効果)
  • 計算集約型のコードを見ている場合は、最小限の時間をかけてください
  • ループとタイミング関数のコストを軽減するのに十分な時間実行する
  • 理想的には、1 つの OS タイム スライス (通常は 10 ミリ秒) 内で実行する、複数のタイム スライスで実行します。たとえば、約 5 ミリ秒または約 500 ミリ秒実行します。

私は計算量の多いコードのみを扱う傾向があります。別のプロファイル (メモリを大量に使用する、または大量の I/O) を使用している場合は、タイミング戦略を変える必要があるかもしれません。

于 2010-05-18T13:40:26.853 に答える