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

最新のスーパースカラプロセッサは、複数の命令を順不同で同時にスケジュールおよび実行します。これらの「実行中」の命令は、メモリへのアクセス、キャッシュヒット、パイプラインのストールなど、さまざまな要因に応じていつでも終了する可能性があります。そのため、パフォーマンスカウンタのイベントが誤った命令に帰属される可能性があり、正確なパフォーマンス分析が困難または不可能になる場合があります。
AMDは、これらの欠点のいくつかを軽減する方法を導入しました。たとえば、Opteronプロセッサは2007年に命令ベースサンプリング(IBS)と呼ばれる技術を実装しました[ 4 ]。AMDのIBSの実装では、フェッチサンプリング(スーパースカラパイプラインの先頭)とopサンプリング(パイプラインの末尾)の両方にハードウェアカウンタが提供されます。これにより、実行済み命令を「親」AMD64命令に関連付ける離散的なパフォーマンスデータが得られます。