1. ホーム
  2. java

ストップウォッチによるベンチマークは認められるか?

2023-09-14 12:32:35

質問

ストップウォッチによるベンチマークを使ったことがある人はいますか? Java 用に利用可能な無料の良いツールはありますか。 あなたはどのようなツールを使っていますか?

私の懸念を明確にするために、ストップウォッチ ベンチマークは、オペレーティング システムのスケジューリングによる誤差の影響を受けます。 プログラムの特定の実行時に、OS は、タイミングをとっている関数の途中で別のプロセス (または複数) をスケジュールする可能性があります。 Java では、JVM スケジューラーがミックスにさらに少し多くのランダム性を投げるため、スレッド化されたアプリケーションをタイムアウトさせようとしている場合、状況はさらに少し悪くなります。

ベンチマークを行う際、オペレーティング システムのスケジューリングにどのように対処しますか?

どのように解決するのですか?

ストップウォッチによるベンチマークは、以下を測定していれば問題ありません。 十分な の繰り返しを測定すれば問題ありません。 一般的に、私は一桁の秒数の合計経過時間を必要とします。 そうでなければ、スケジューリングやその他の O/S によるプロセスの中断により、結果が大きく歪んでしまいます。

このために、私はずっと前に構築した静的メソッドの小さなセットを使用します。 System.currentTimeMillis() .

プロファイリング作業には jプロファイラ を何年か使っていて、とても良いものだとわかっています。 最近、私は ユアキット を検討しましたが、個人的にはまったく使っていません。

割り込みのスケジューリングに関する質問に答えるために、一貫性が達成/観察されるまで繰り返し実行することは、プロセス スケジューリングから異常な結果を除外するために実際に機能することがわかります。 また、スレッドスケジューリングは、5 秒から 30 秒の実行では実用的な影響がないことがわかります。 最後に、数秒のしきい値を超えた後、スケジューリングは、私の経験では、結果に対して無視できるほどの影響を及ぼします。

また、実際の生活で時間をかけてテストされるコードの実行回数に応じて、JIT をウォームアップするために約 10,000 回テストされたコードを事前に実行することを考慮したいと思うかもしれません。