用perf和papi测量L1数据缓存未命中

问题描述:

papi中的PAPI_L1_LDML1-dcache-load-misses在perf中有什么区别?用perf和papi测量L1数据缓存未命中

我使用了相同的设置,如this post here

所以,作为一个结果,我获得PAPI:

PAPI_L1_DCM: 515 <- L1 data cache miss (probably L1D_READ_MISSES_ALL + L1D_READ_MISSES_RETRIED?) 
PAPI_L1_ICM: 300 <- L1 Instruction cache miss 
PAPI_L1_LDM: 441 <- L1 Load data miss 
PAPI_L1_TCM: 815 <- L1 Total cache miss 

可惜PAPI_L1_DCA目前不支持的机器。

而对于PERF(只在用户空间,因为PAPI措施也只是用户空间且无内核空间): 电话:perf stat -B -e L1-dcache-load-misses:u,cache-misses:u ./perf

16,539  L1-dcache-load-misses 
     128  cache-misses:u 

16539似乎是N=1000000更加合理。 load-data-miss(papi中的PAPI_L1_LDM)和一个数据缓存未命中(papi中的PAPI_L1_DCM)之间的区别和为什么这些数字在papi和perf中有所不同? perf的cache-misses:u与L2缓存有关吗?

编辑:硬件(至强E5-2600 V3系列,Haswell的EP 12芯)

+0

现在我用Vtune去,因为GUI给你一个命令行片段。 – boraas

一些解释:

从PAPI man page,你可以看到PAPI_L1_LDM = “加载未命中数” 。换句话说PAPI_L1_LDM负载仅存在的所述未命中(有时预取)。

加载是当您的程序执行加载指令来检索内存。

预取是当进程猜测您将要在不久的将来加载内存并提前提取内存时。


L1-dcache-load-misses

  • L1是Level-1的缓存,最小的和最快的国家之一。另一方面,LLC指的是cache hierarchy的最后一级,因此表示最大但是最慢的缓存。
  • id区分指令缓存和数据缓存。这种方式仅分割L1,其他缓存在数据和指令之间共享。

你似乎认为,在PERF的cache-misses:u有关L2缓存缺失。其实并非如此。

cache-misses事件表示不能由任何缓存来服务存储器访问次数。

我承认perf的文档不是最好的。

但是,通过阅读(假设您已经对CPU和性能监控单元的工作原理有了很好的了解,这显然不是计算机体系结构课程),您可以通过阅读文档perf_event_open()功能:

例如,通过阅读它,你可以看到cache-misses事件表明通过PERF列表对应PERF_COUNT_HW_CACHE_MISSES

  • 另外,你可以发现,L1-dcache-load-misses硬件缓存事件cache-misses硬件事件(这是一个超集硬件的高速缓存事件)。

和关于你的区别,你可以咨询this答案的原因,它说,由100倍,甚至10000增加数组的大小,因为它说:“我注意到大的波动时序结果否则,长度为1,000,000,阵列几乎适合您的L3缓存。“

+0

我不确定PAPI中'L1_DCM'和'L1_LDM'之间有什么区别,可能'L1_LDM'更高,因为它会多次尝试查看'L1D_READ_MISSES_RETRIED',或者这是硬件事件和硬件高速缓存事件的区别? – boraas