繁体   English   中英

测量l1 / l2缓存中加载的行数(包括预取)?

[英]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缓存,我发现了两个指标

  • i) L2_TRANS.L2_FILL (r20f0)
  • ii) 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.

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