![](/img/trans.png)
[英]Why does Perf and Papi give different values for L3 cache references and misses?
[英]Measure L1 data cache miss with perf and papi
PAPI_L1_LDM
中的PAPI_L1_LDM
与perf中的L1-dcache-load-misses
PAPI_L1_LDM
什么区别?
我使用了相同的设置,就像这篇文章一样。
因此,我得到了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也只测量用户空间而没有内核空间):call: perf stat -B -e L1-dcache-load-misses:u,cache-misses:u ./perf
16,539 L1-dcache-load-misses
128 cache-misses:u
对于N=1000000
1000000,16,539似乎更合理。 load-data-miss(papi中的PAPI_L1_LDM)和数据缓存未命中(papi中的PAPI_L1_DCM)之间有什么区别?为什么这些数字在papi和perf中有所不同? cache-misses:u
是否与L2缓存未命中相关?
编辑:硬件(Xeon E5-2600 v3系列,Haswell-EP 12核心)
一些说明:
从PAPI 手册页 ,您可以看到PAPI_L1_LDM
=“负载未命中数”。 换句话说, PAPI_L1_LDM
是仅从负载 (有时是预取 )发生的未命中。
加载是程序执行加载指令以检索内存的时间。
预取是指进程猜测您将在不久的将来加载内存并提前获取内存。
在L1-dcache-load-misses
L1
是Level-1缓存,是最小和最快的缓存。 另一方面, LLC
指的是缓存层次结构的最后一级,因此表示最大但最慢的缓存。 i
vs. d
将指令缓存与数据缓存区分开来。 只有L1以这种方式分割,其他缓存在数据和指令之间共享。 您似乎认为cache-misses:u
在与L2缓存未命中相关的性能中。 实际上并非如此。
cache-misses
事件表示任何缓存无法提供的内存访问次数。
我承认perf的文档并不是最好的。
但是,通过阅读(假设您已经很好地了解CPU和性能监视单元如何工作,这显然不是计算机体系结构课程), perf_event_open()函数的文档可以学到很多东西:
例如 ,通过阅读它,您可以看到perf list显示的cache-misses
事件对应于PERF_COUNT_HW_CACHE_MISSES
L1-dcache-load-misses
miss是硬件缓存事件,而cache-misses
是硬件事件 (这是硬件缓存事件的超集)。 关于你的差异你可以参考这个答案,原因就是说你的阵列大小增加了100倍甚至10000倍,因为它说“我注意到时间结果有很大的波动,否则长度为1,000,000阵列几乎适合进入你的L3缓存。“
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.