我正在尝试确定L1caching(Intel Broadwell处理器)中加载的caching行数。 我的内核代码是
a[i] = 2*b[i] + 2.3 // i from 0 to pow(10,8)
我正在使用perf事件L1-dcache-load-misses
。 测量的数字是预期的两倍。 我期待6M的负载和6M的商店。 但L1-dcache-load-misses
大约是12M。 然而, LLC-stores
正如预期的那样(6百万)
i) L1-dcache-load-misses
是否包括加载和存储缺失?
在英特尔软件开发人员手册 (表19.5)中,对于二级caching,我find了两个指标
L2_TRANS.L2_FILL
(r20f0) L2_TRANS.L2_WB
(r40f0) ii)L2_TRANS.L2_FILL的确切含义是什么? 这是L2交易的总数吗?
iii)L2_TRANS.L2_WB的确切含义是什么? 这是L2写交易的总数吗?
Perf使用映射到预定义计数器事件和掩码的这些事件别名,但是由于每个CPU可能有不同的映射,所以这有时会转移,最终可能会计算其他值。
在英特尔论坛上的讨论表明,至少有一些系统(Haswell,但Broadwell应该非常相似)有L1-dcache-load-misses
错误地映射到L1替换,这将解释double值(商店也会获取行进入L1缓存)。
至于L2_trans事件,假设他们正确映射,他们应该确实计算L2的总填充和驱逐。 请注意,这可能包括更多的负载+商店,因为L2也有代码(在这样一个小内核中可能忽略不计),以及预取(可能是重要的,因为您的数据空间布局易于预取)。