VTune でキャッシュのヒット/ミス回数を取得するには

VTune が収集するイベントでキャッシュのヒット/ミス回数を取得することができます。
プログラムの実行中に発行されたロード命令の内、何%でヒットミスが発生したか確認します。
PMU(Performance Monitoring Unit) から取得可能なイベント名は、プロセッサー世代ごとに異なるので、
解析対象となるプログラムが動作しているプロセッサーを確認した上で解析を行います。
プロセッサー毎のイベント情報は製品ドキュメント内の help フォルダから確認できます。
今回試した環境には 第4世代 Core プロセッサーが搭載されているので、
Events for Intel® Microarchitecture Code Name Haswell
をもとにメモリー関連を中心に取得するイベントをまとめます
※注意
キャッシュのヒットミス率を把握することが直接のパフォーマンス改善のアプローチにつながることは少ないです。
アクセスによるレイテンシーを確認したうえで、どの関数のヒットミスが一番パフォーマンスに影響しているか
把握することが重要です。
各キャッシュ レベル、メモリーごとのアクセスコストは、 Micro Architecture 毎にドキュメントに記載されているので、
確認することをお勧めします。
——————————————————————————————————————–
[他の L2 キャッシュにアクセスした際のイベント]
MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_HIT
MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_HITM
MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_HITM_PS
MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_HIT_PS
MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_MISS
MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_MISS_PS
MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_NONE
MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_NONE_PS
※HITM = Hit modifiy
[L3 ミスから DRAM にアクセスを行った回数]
MEM_LOAD_UOPS_L3_MISS_RETIRED.LOCAL_DRAM
MEM_LOAD_UOPS_L3_MISS_RETIRED.LOCAL_DRAM_PS
[各 キャッシュレベルで ヒット/ミスした回数]
MEM_LOAD_UOPS_RETIRED.HIT_LFB
(キャッシュラインはヒットしているけど、データ自体がまだ対象のキャッシュに上がってきていない)
MEM_LOAD_UOPS_RETIRED.HIT_LFB_PS
MEM_LOAD_UOPS_RETIRED.L1_HIT
MEM_LOAD_UOPS_RETIRED.L1_HIT_PS
MEM_LOAD_UOPS_RETIRED.L1_MISS
MEM_LOAD_UOPS_RETIRED.L1_MISS_PS
MEM_LOAD_UOPS_RETIRED.L2_HIT
MEM_LOAD_UOPS_RETIRED.L2_HIT_PS
MEM_LOAD_UOPS_RETIRED.L2_MISS
MEM_LOAD_UOPS_RETIRED.L2_MISS_PS
MEM_LOAD_UOPS_RETIRED.L3_HIT
MEM_LOAD_UOPS_RETIRED.L3_HIT_PS
MEM_LOAD_UOPS_RETIRED.L3_MISS
MEM_LOAD_UOPS_RETIRED.L3_MISS_PS
※LFB = Line Fill Buffer
[ロードにかかったレイテンシー(CPU サイクル数)]
MEM_TRANS_RETIRED.LOAD_LATENCY_GT_128
MEM_TRANS_RETIRED.LOAD_LATENCY_GT_16
MEM_TRANS_RETIRED.LOAD_LATENCY_GT_256
MEM_TRANS_RETIRED.LOAD_LATENCY_GT_32
MEM_TRANS_RETIRED.LOAD_LATENCY_GT_4
MEM_TRANS_RETIRED.LOAD_LATENCY_GT_512
MEM_TRANS_RETIRED.LOAD_LATENCY_GT_64
MEM_TRANS_RETIRED.LOAD_LATENCY_GT_8
[メモリのロード/ストア数]
MEM_UOPS_RETIRED.ALL_LOADS
MEM_UOPS_RETIRED.ALL_LOADS_PS
MEM_UOPS_RETIRED.ALL_STORES
MEM_UOPS_RETIRED.ALL_STORES_PS
[アトミック操作を行った回数]
MEM_UOPS_RETIRED.LOCK_LOADS
MEM_UOPS_RETIRED.LOCK_LOADS_PS
[キャッシュラインを跨いだアクセス回数]
MEM_UOPS_RETIRED.SPLIT_LOADS
MEM_UOPS_RETIRED.SPLIT_LOADS_PS
MEM_UOPS_RETIRED.SPLIT_STORES
MEM_UOPS_RETIRED.SPLIT_STORES_PS
[STLB( Second level TLB(Translation Lookaside Buffer)) のヒットミス回数]
MEM_UOPS_RETIRED.STLB_MISS_LOADS
MEM_UOPS_RETIRED.STLB_MISS_LOADS_PS
MEM_UOPS_RETIRED.STLB_MISS_STORES
MEM_UOPS_RETIRED.STLB_MISS_STORES_PS
——————————————————————————————————————–
ローカル/リモート DRAM
NUMA 構造のシステム上には各 CPU 毎に割り当てられているメモリがある。
実行中の CPU に割り当てられているメモリ領域をローカルメモリといい、
他の CPU に割り当てられているメモリ領域をリモートメモリという
ローカルDRAM :  実行中のコア直下に配置されているDRAM
リモートDRAM :  他のCPU直下に配置されているDRAM

NUMA 構造の例 (Global Memory は多くの場合考えない)
参考
[ローカル/リモート DRAM]
[L1、L2、L3(LL) キャッシュのヒット回数、ミス回数の計測]