[英]How much of an object (containing std::vectors) is loaded in to the L1/L2/L3 cache?
[英]Measure the number of lines loaded in l1/l2 cache for reads(including prefetch)?
我正在尝试确定L1缓存(处理器Intel Broadwell)中加载的缓存行数。 我的内核代码是
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
如预期(6M)
i) L1-dcache-load-misses
是否计算加载和存储未命中?
在英特尔软件开发人员手册 (表19.5)中,对于L2缓存,我发现了两个指标
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替换,这可以解释双重值(商店也会获取行进入L1缓存)。
对于L2_trans事件,假设它们被正确映射,它们应该确实计算L2中的总填充和驱逐。 请注意,这可能包括更多的负载+存储,因为L2也有代码(在这么小的内核中可能忽略不计)和预取(可能很重要,因为您的数据在空间布局并且易于预取)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.