用perf和papi测量L1数据缓存未命中
papi中的PAPI_L1_LDM
和L1-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芯)
一些解释:
从PAPI man page,你可以看到PAPI_L1_LDM
= “加载未命中数” 。换句话说PAPI_L1_LDM
从负载仅存在的所述未命中(有时预取)。
加载是当您的程序执行加载指令来检索内存。
预取是当进程猜测您将要在不久的将来加载内存并提前提取内存时。
在L1-dcache-load-misses
-
L1
是Level-1的缓存,最小的和最快的国家之一。另一方面,LLC
指的是cache hierarchy的最后一级,因此表示最大但是最慢的缓存。 -
i
与d
区分指令缓存和数据缓存。这种方式仅分割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缓存。“
我不确定PAPI中'L1_DCM'和'L1_LDM'之间有什么区别,可能'L1_LDM'更高,因为它会多次尝试查看'L1D_READ_MISSES_RETRIED',或者这是硬件事件和硬件高速缓存事件的区别? – boraas
现在我用Vtune去,因为GUI给你一个命令行片段。 – boraas