首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测量哈斯韦尔微结构上的晚期胎儿和死亡预胎儿?

如何测量哈斯韦尔微结构上的晚期胎儿和死亡预胎儿?
EN

Stack Overflow用户
提问于 2017-12-28 13:53:22
回答 1查看 329关注 0票数 2

我正在使用英特尔Xeon 2660 v3,并发布了大量的软件预取,以利用MLP以及减少失速时间。现在,我想对应用程序进行分析,以获得软件预取带来的总体收益。

在“利用自适应执行提高软件预取的有效性”一文中,讨论了与软件预取相关的硬件性能计数器支持。

我把论文中的文字放在这里,作者们在这里讨论了性能计数器。

此外,最佳自适应方案所需的唯一硬件支持是一对计数器:一个计数器测量延迟预取(处理器请求数据后到达的计数器)的数量,另一个计数器测量由于缓存冲突而死亡的预取数。

我想分析一下Haswell微体系结构的应用程序,但是在PerfPAPI中找不到任何这样的性能计数器。那么,是否还有其他性能计数器来获取这样的事件?对于代码的一小部分来说,最好的方法是什么,而不是为整个应用程序执行呢?

纸链

EN

回答 1

Stack Overflow用户

发布于 2017-12-28 16:23:42

ocperf.pyperf的包装器,具有特定于load_hit_pre.sw_pf等特定事件的符号名称(当分配到加载端口的需求负载到达分配给软件预取的L1D填充缓冲区(FB)时,会进行计数)。ocperf.py list有描述和名称。

这可能是一个有用的研究,但我还没有使用它自己,所以IDK,如果它真正做的正是你所需要的。一定要查看事件列表(ocperf.py list | less)。

您还应该查看L1D的命中率;如果成功的预取能够保持在需求负载的前面,那么实际的加载指令应该会在L1D中命中。(普通的perf可以通过L1-dcache-load-misses跟踪这一点。)

为了测量预先取走但在使用前被逐出的线条,有l2_lines_out.useless_hwpf。“计算硬件预取但未使用的行数,现在已被L2缓存逐出”。l2_lines_out.useless_pref是它的别名;看起来没有类似的事件,其中包括SW预取。

您可能只需要查看L1D的命中率;这将告诉您预取距离的甜蜜点在哪里。如果load_hit_pre.sw_pf如我所希望的那样工作,那么L1D错过了load_hit_pre.sw_pf的低计数意味着您的预取距离太高了。(或者SW预取请求由于其他原因而被删除,但我认为只有HW预取请求在有大量的需求负载利用率时才会被删除)。

用于存储的perf计数器硬件事件比对负载的限制要大得多,所以如果您试图预取一个只写的流,它将很难测量。L1D中的HW预取器甚至可能根本不为商店预取,所以对于只写流,不同的访问模式可能会受到很大的影响。。请参见@BeeonRope对这个答案的评论:如果商店点击L2而不是L1D,SW预取可能会有所帮助。prefetchw是理想的,但是普通的prefetcht0仍然很有用。(prefetchw作为NOP运行在Haswell和ealier上。)

还请参阅x86标记wiki中的其他链接。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48008741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档