我正在尝试计算Intel Haswell处理器上程序的缓存不同级别(L1,L2和L3)的缓存命中数 .

我编写了一个程序,通过监视相应的事件来计算L2和L3缓存命中数 . 为此,我检查了英特尔x86软件开发手册,并使用cache_all_request事件和cache_miss事件进行L2和L3缓存 . 但是, I didn't find the events for L1 cache. 也许我错过了什么?

My questions are:

我应该使用哪个事件编号和UMASK值来计算L1缓存命中事件?

Clarifications*

1)我想要实现的最终目标是在程序的所有缓存命中变为缓存未命中时上限程序的执行时间 . 如果我可以计算缓存命中请求的数量,我可以将它们视为缓存未命中并计算增加的执行时间;

2)我检查了英特尔SDM中的事件MEM_LOAD_UOPS_RETIRED.L1_ HIT,它说“退出加载uop,L1缓存命中为数据源 . ” . 我不确定1 uops是否需要1个周期 . 有没有关于如何将uops转移到循环的参考?

3)计算负载和存储量会更好 . (我可以忍受不计算商店请求 . )

非常感谢你的帮助!