このセクションでは 2 つの実験を比較します。test.1.er 実験は、測定に基づくイベント記録しきい値を使用して記録されました。test.2.er 実験は、mttest プログラムの実行で発生したすべての同期イベントが含まれるよう、しきい値をゼロにして記録されました。
ツールバーにある「実験を比較」ボタン をクリック、または「ファイル」>「実験を比較」を選択します。
「実験を比較」ダイアログボックスが開きます。
すでに開いている test.1.er 実験は「ベースライン」グループに表示されます。ベースライン実験と比較する実験のリストを「比較グループ」パネルで作成する必要があります。
このチュートリアルでは、各グループには 1 つの実験のみが含まれます。
「比較グループ」の隣にある「追加」ボタンをクリックし、「実験の選択」ダイアログで test.2.er 実験を開きます。
「実験を比較」ダイアログで「了解」をクリックし、2 番目の実験をロードします。
両方の実験のデータが含まれた状態で、「概要」ページがふたたび開きます。
「クロックプロファイリング」メトリックは、それぞれの実験に対応する 2 本の色付きバーをメトリックごとに表示します。test.1.er ベースライン実験のデータは上側です。
データバーにマウスカーソルを合わせると、ベースライングループおよび比較グループのデータと、数値および % で表されたグループ間の差がポップアップテキストで表示されます。
2 番目の実験では、記録された「CPU 時間合計」がわずかに多い一方、「同期待ちカウント」は 2 倍を超え、「同期待ち時間」は約 10% 多くなっています。
「関数」ビューに切り替え、「test.1.er 包括的同期待ちカウント」のラベルが付いた列見出しをクリックして、最初の実験でのイベント数で関数をソートします。
関数 pthread_mutex_lock() は、test1.er と test.2.er のイベント数の差が 2 番目に大きくなっています。もっとも差が大きいのは do_work() であり、これには、pthread_mutex_lock() など、この関数が直接または間接的に呼び出すすべての関数で生じた差が含まれます。
「呼び出し元-呼び出し先」ビューを選択します。
2 つの呼び出し元 lock_global() および lock_local() に注目します。
lock_global() 関数は、test.1.er では「属性同期待ちカウント」に対して 3 つのイベントを示しますが、test.2.er では 4 つのイベントを示します。理由は、test.1.er ではロックを獲得するための最初のスレッドがストールしなかったため、イベントが記録されなかったことです。test.2.er 実験では、すべてのイベントを記録するようにしきい値が記録されていたため、最初のスレッドのロック獲得も記録されました。
同様に、最初の実験では、ロックの競合がなかったため lock_local() に対してはイベントが記録されませんでした。2 番目の実験では 4 つのイベントがありましたが、遅延は合算しても無視できる程度でした。