papi中的PAPI_L1_LDM
和性能中的L1-dcache-load-misses
之间有什么区别?
我使用了相同的设置,例如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
16,539似乎对N=1000000
更合理。 load-data-miss(papi中的PAPI_L1_LDM)和数据缓存未命中(papi中的PAPI_L1_DCM)之间有什么区别?为什么这些数字在papi和perf中有所不同? perf中的cache-misses:u
是否与L2缓存未命中有关?
编辑:硬件(Xeon E5-2600 v3系列,Haswell-EP 12核心)
答案 0 :(得分:4)
一些说明:
从PAPI man page,您可以看到PAPI_L1_LDM
=“加载失误次数”。换句话说,PAPI_L1_LDM
是仅从 加载 (有时 pre-fetches )发生的未命中
加载是程序执行加载指令以检索内存的时间。
预取是指进程猜测您将在不久的将来加载内存并提前获取内存。
在L1-dcache-load-misses
L1
是Level-1缓存,是最小和最快的缓存。另一方面,LLC
指的是cache hierarchy的最后一级,因此表示最大但最慢的缓存。i
与d
区分指令缓存与数据缓存。只有L1以这种方式分割,其他缓存在数据和指令之间共享。您似乎认为perf中的cache-misses:u
与L2缓存相关 - 未命中。事实并非如此。
cache-misses
事件表示任何缓存无法提供的内存访问次数。
我承认perf的文档不是最好的。
然而,人们可以通过阅读(假设你已经很好地了解CPU和性能监视单元如何工作,这显然不是计算机体系结构课程)来学习{{{{{ 3}}功能:
例如,通过阅读,您可以看到perf列表显示的cache-misses
事件对应PERF_COUNT_HW_CACHE_MISSES
L1-dcache-load-misses
是 硬件缓存事件 ,而cache-misses
是 硬件事件 (这是硬件缓存事件的超级集合)。关于你的不同,你可以参考perf_event_open()回答,原因是你的阵列大小增加了100倍甚至10000,因为它说“我发现时间结果有很大的波动否则长度为1,000,000,阵列几乎完全适合您的L3缓存。“