リタイアした命令ごとのクロック数 (CPI) は、命令ごとのサイクル数とも呼ばれ、ハードウェア・イベントベース・サンプリング収集の基本的なパフォーマンス評価基準の 1 つです。このイベント比率は、クロック数 (Clockticks) / リタイアした命令 (Instructions Retired) で計算します。
コードのどの部分にパフォーマンス・チューニングの焦点を置くかを決定する際に、最初にチェックする必要のある評価基準です。優良な CPI 比率は、コードが最適に実行していることを示します。
以下の値は、一般的な目安として経験豊富なパフォーマンス・エンジニアによって算出された数字です。
Good (優良) | Poor (低) |
---|---|
0.75 | 4 |
この比率が高い場合は、現在のコード領域の命令が実行に多数のプロセッサー・クロックを費やしていることを示します。また、命令のほとんどが高いレイテンシーを持たない場合やマイクロコード ROM である場合は、問題があることを示します。この場合、コードを編集することで、プロセッサーで実行される命令の効率を向上できる可能性があります。
ハイパースレッディング・テクノロジー対応プロセッサーでは、この比率は物理パッケージがスリープモードではないフェーズ (つまり、物理パッケージ内の少なくとも 1 つの論理プロセッサーが使用中である状態) での CPI 値を測定します。論理プロセッサーが HALT ステート (命令を実行していない状態) にあっても、論理プロセッサー上でクロック数は継続してカウントされます。Instructions Retired イベントが変更されない間も Clockticks イベントはカウントされ続けるので、これは論理プロセッサーの CPI 比率に影響を与えます。高い CPI 値はパフォーマンス問題を示しますが、特定の論理プロセッサー上の高い CPI 値は実行問題ではなく、低い CPU 使用率を示すことがあります。
アプリケーションがスレッド化されている場合、すべてのコードレベルの CPI が影響を受けます。Clockticks イベントは、並列実行を考慮しないで各論理プロセッサー上で別々にカウントされます。
例えば、次の例を考えてみてください。
論理プロセッサー 0 上の関数 XYZ |------------------------| 4000 Clockticks / 1000 Instructions
論理プロセッサー 1 上の関数 XYZ |------------------------| 4000 Clockticks / 1000 Instructions
関数 XYZ の CPI は (8000 / 2000) 4.0 です。並列実行を考慮する場合、CPI 値は ( 4000 / 2000 ) 2.0 になります。Clockticks イベントデータの割り込みを行うためには、アプリケーションの動作に関する知識が必要になります。
© 2010 Intel Corporation. 無断での引用、転載を禁じます。