繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM