微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux perf 用于测量多线程 C 程序的缓存未命中是否准确?

如何解决linux perf 用于测量多线程 C 程序的缓存未命中是否准确?

linux perf 可以测量多线程程序的缓存未命中,还是只能报告主线程的结果?我在使用pthread的C程序中使用它,似乎缓存未命中数低于预期数。

解决方法

是的,perf stat 是所有线程的准确总数。 (除非您的 CPU 有一个勘误表,其中某个 PMU 事件计数过高或过低。这些确实发生,比实际架构状态的正确性错误更常见,因此请查看勘误表,也就是英特尔 CPU 的“规格更新”。)>

不过,请确保您确切了解每个缓存事件的重要性,例如L1d-misses 在像 Skylake 这样的现代 Intel 上计数 l1d.replacement,因此同一行上的多次未命中只是一个替换。 (How does Linux perf calculate the cache-references and cache-misses events)。

还请注意,如果内存可以跟上,硬件预取可以避免顺序访问的大量未命中。还相关:L2 instruction fetch misses much higher than L1 instruction fetch misses


还相关:Difference Between mem_load_uops_retired.l3_miss and offcore_response.demand_data_rd.l3_miss.local_dram Events 详细介绍了这些特定事件的确切含义。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。