Caliper 0.5と1.0の間で用語が少し変更されましたが、これは両方について説明する必要があります。0.5では物事が少し曖昧だったことを覚えておいてください。したがって、1.0で行われた変更のほとんどは、物事をより明確かつ正確にすることでした。
キャリパー0.5
Caliperの1回の呼び出しは実行です。各実行にはいくつかの試行があります。これは、実行で実行されたすべての作業の単なる別の反復です。各試行内で、Caliperはいくつかのシナリオを実行します。シナリオは、VM、ベンチマークなどの組み合わせです。シナリオの実行時間は、実行時にベンチマークメソッドに渡される数であるいくつかの担当者の実行のタイミングによって測定されます。もちろん、マイクロベンチマークでの1回の呼び出しで正確な測定値を取得することは不可能であるため、複数の担当者が必要です。
キャリパー1.0
Caliper 1.0は、非常によく似たモデルに従います。Caliperの1回の呼び出しは、引き続き実行されます。各実行はいくつかの試行で構成されますが、試行は、より正確には、機器で測定されたシナリオの呼び出しとして定義されます。
シナリオは、測定対象(ホスト、VM、ベンチマーク、パラメーター)として大まかに定義され、計測器は、測定を実行するコードとその構成方法です。完全に再現可能なベンチマークが形式の関数である場合f(x)=y
、Caliperはとして定義されるという考えinstrument(scenario)=measurements
です。
ランタイムインスツルメントの実行内(他のインスツルメントでも同様)には、ベンチマークコードに渡される反復回数である、同じ担当者の概念があります。各楽器は独自の計算を実行してそれがどうあるべきかを決定するため、rep値を直接制御することはできません。
Caliperは、実行時に、機器、ベンチマーク、VM、およびパラメーターの組み合わせであるいくつかの実験を計算することにより、実行を計画します。各実験は--trials
何度も実行され、独自のIDを持つ個別の試行として報告されます。
reps
パラメータの使用方法
従来、repsパラメーターを使用する最良の方法は、ベンチマークコードに次のようなループを含めることです。
for (int i = 0; i < reps; i++) {…}
これは、担当者の数が報告された実行時間に比例して増加することを保証するための最も直接的な方法です。Caliperは、多数の総コストに基づいて単一の均一な操作のコストを推測しようとしているため、これは必要なプロパティです。実行時間が担当者の数と線形でない場合、結果は無効になります。これは、担当者がベンチマークコードに直接渡されるべきではないことも意味します。