2016-10-17 8 views
1

私の現在の設定:コントロール数JMH

public void launchBenchmark() throws Exception { 
    Options opt = new OptionsBuilder() 
      .include(this.getClass().getName()) 
      .mode(Mode.Throughput) //Calculate number of operations in a time unit. 
      .mode(Mode.AverageTime) //Calculate an average running time per operation 
      .timeUnit(TimeUnit.MILLISECONDS) 
      .warmupIterations(1) 
      .measurementIterations(30) 
      .threads(Runtime.getRuntime().availableProcessors()) 
      .forks(1) 
      .shouldFailOnError(true) 
      .shouldDoGC(true) 
      .build(); 

    new Runner(opt).run(); 
} 

はどのようにして操作の数が、ベンチマークごとに実行される(可能な場合)/コントロールを知ることができますか?

ウォームアップ時間と測定時間を設定することは重要ですか?

ありがとうございます。

答えて

3

反復ごとの操作数を制御することはできません。 JMHの全ポイントは正しくその数字を測定することです。

@Warmup(iterations = 10, time = 500, timeUnit = MILLISECONDS) 

をし、測定することにより:

あなたは、アノテーションを使用してウォームアップを設定することができ

@Measurement(iterations = 200, time = 200, timeUnit = MILLISECONDS) 

ちょうどあなたのユースケース

+0

私が見るああに適切な値を設定します。あなたは反復時間について良い提案をしていますか?例えば私は各操作がx時間のコストを知っている場合。それから各反復ごとにどれくらいの時間を設定すべきですか? – Xitrum

+0

それは異なります。デフォルト設定では、JITはC1を使用して10kの反復後にネイティブにコンパイルし、30k後にC2を使用します。したがって、JITがC2コンパイラを使用してすべてをコンパイルしていることを確認するのに十分な反復回数と反復時間を設定する必要があります。そうしないと、ベンチマークで不正確な統計がレポートされます。これらの値を高すぎる値に設定すると、時間の無駄になりますが、その他の悪影響はありません。 –

+0

また、反復時間は、ジッタを補償するのに十分な大きさでなければなりませんが、操作の所要時間によって異なります。たとえば、1回の操作で100ミリ秒かかる場合、少なくとも数秒のアニタレーション時間が必要ですが、ナノ秒かかる場合は100ミリ秒以上で十分でしょう –

関連する問題