コンピュータにおいて、ハードウェアパフォーマンスカウンタ(HPC)[1]またはハードウェアカウンタは、コンピュータシステム内のハードウェア関連のアクティビティのカウントを格納するために最新のマイクロプロセッサに組み込まれた一連の専用レジスタです。上級ユーザーは、低レベルのパフォーマンス分析やチューニングを実行するためにこれらのカウンタに頼ることがよくあります。
実装
プロセッサで使用できるハードウェア カウンターの数は限られていますが、各CPUモデルには開発者が測定したいさまざまなイベントが多数存在する可能性があります。各カウンターは、L1 キャッシュ ミスや分岐予測ミスなど、監視するイベント タイプのインデックスを使用してプログラムできます。
RDPMCこのようなカウンターとそれにアクセスするための関連命令を実装した最初のプロセッサーの1つはIntel Pentiumでしたが、Terje Mathisenが1994年7月のByte誌でそれらのリバースエンジニアリングに関する記事を書くまで文書化されていませんでした。 [2]
次の表は、CPU と使用可能なハードウェア カウンターの数の例を示しています。
ソフトウェア技術との比較
ソフトウェアプロファイラーと比較すると、ハードウェア カウンターは、CPU の機能ユニット、キャッシュ、メイン メモリなどに関連する豊富な詳細なパフォーマンス情報への低オーバーヘッド アクセスを提供します。ハードウェア カウンターを使用するもう 1 つの利点は、一般にソース コードの変更が不要なことです。ただし、ハードウェア カウンターの種類と意味は、ハードウェア構成の多様性により、アーキテクチャの種類によって異なります。
低レベルのパフォーマンス メトリックをソース コードに関連付けるのは難しい場合があります。カウンターを格納するレジスタの数が限られているため、必要なパフォーマンス メトリックをすべて収集するには、ユーザーが複数の測定を実行する必要があることがよくあります。
指示ベースのサンプリング

最新のスーパースカラプロセッサは、複数の命令を一度にアウトオブオーダーでスケジュールして実行します。これらの「実行中の」命令は、メモリ アクセス、キャッシュのヒット、パイプラインの停止、その他の多くの要因に応じて、いつでもリタイアできます。これにより、パフォーマンス カウンタ イベントが間違った命令に起因するものと見なされ、正確なパフォーマンス分析が困難または不可能になる可能性があります。
AMD は、これらの欠点のいくつかを軽減する方法を導入しました。たとえば、Opteron プロセッサは、 2007 年に[4]命令ベース サンプリング (IBS) と呼ばれる手法を実装しました。AMD の IBS 実装では、フェッチ サンプリング (スーパースカラー パイプラインの先頭) とオペレーション サンプリング (パイプラインの最後尾) の両方にハードウェア カウンターが提供されます。これにより、廃止された命令と「親」AMD64 命令を関連付ける個別のパフォーマンス データが生成されます。
参照
参考文献
- ^ マローン、コーリー、ザハラン、モハメド、カリ、ラメシュ (2011)。「ハードウェア パフォーマンス カウンターは、プログラムの整合性チェックにコスト効率の高い方法か」(PDF)。スケーラブルトラステッド コンピューティングに関する第 6 回 ACM ワークショップの議事録。pp. 71–76。doi : 10.1145 /2046582.2046596。ISBN 9781450310017. S2CID 16409864 . 2022年11月17日閲覧。
- ^ 「Pentium Secrets」。Gamedev.net 。 2012年2月14日閲覧。
- ^ 「ドキュメント – Arm Developer」。developer.arm.com。
- ^ 「命令ベースのサンプリング: AMD ファミリー 10h プロセッサ向けの新しいパフォーマンス分析手法」(PDF)。AMD 。2015年 10 月 16 日閲覧。
