首页 文章

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

提问于
浏览
3

我正在尝试确定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) Does L1-dcache-load-misses count both load and store misses?

Intel software developer manual(表19.5)中,对于L2缓存,我找到了两个指标

  • i) L2_TRANS.L2_FILL (r20f0)

  • ii) L2_TRANS.L2_WB (r40f0)

ii) What is the exact meaning of L2_TRANS.L2_FILL? Is it the total number of L2 transactions?

iii) What is the exact meaning of L2_TRANS.L2_WB? Is it the total number of L2 write transactions?

1 回答

  • 1

    Perf使用映射到预定义计数器事件和掩码的这些事件别名,但由于每个CPU可能具有不同的映射,这有时会发生变化,并且您可能最终会计算其他内容 .

    在英特尔论坛上的讨论表明,至少有一些系统(Haswell,但Broadwell应该非常相似)将 L1-dcache-load-misses 错误地映射到L1替换,这将解释双值(存储也会将行提取到L1缓存中) .

    对于L2_trans事件,假设它们被正确映射,它们应该确实计算L2中的总填充和驱逐 . 请注意,这可能包括更多的负载存储,因为L2也有代码(在这么小的内核中可能忽略不计)和预取(可能很重要,因为您的数据在空间上布局并且易于预取) .

相关问题