性能:找不到“branch-load-misses”指标的有用描述

Posted

技术标签:

【中文标题】性能:找不到“branch-load-misses”指标的有用描述【英文标题】:Perf: Could not find an useful description of "branch-load-misses" metric 【发布时间】:2021-09-08 12:46:02 【问题描述】:

我试图表明由于某些优化可能会减少由于分支错误预测导致的停顿。我的直觉表明,这可能是由于与延迟分支结果的负载相关的停顿周期减少。

为此,我计划使用 Linux Perf 实用程序来获取硬件性能计数器值。有一个名为 branch-load-misses 的相关指标,但是没有提供有用的描述。

谁能确认这是否是正确使用的指标?如果没有,请提出一个可能有帮助的相关指标。

谢谢

【问题讨论】:

【参考方案1】:

要测量分支预测和分支预测错误率,您可以使用 VTune Profiler。 下载链接: https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/vtune-profiler.html#gs.bh5zrq

只需使用 2 个事件创建自定义 VTune 分析:

BR_INST_RETIRED.ALL_BRANCHES

BR_MISP_RETIRED.ALL_BRANCHES

不过,您需要手动逐个分配才能获得口粮。

BR_INST_RETIRED.ALL_BRANCHES

计算所有已停用的(宏)分支指令。

BR_MISP_RETIRED.ALL_BRANCHES

计算处理器未预测到的所有退出分支指令。

当处理器错误地预测了分支的目的地时,就会发生分支错误预测。

当在执行时发现错误预测时,必须丢弃在错误(推测)路径中执行的所有指令,并且处理器必须开始从正确路径获取。

如果您不知道 - 可以通过选择任何预定义的分析并按右上角的“自定义...”按钮来创建 VTune 中的自定义分析。

例如,您可以选择 Microarchitecture Exploration,取消选中所有复选框,按“自定义...”,向下滚动到包含 CPU 事件的表并取消选中所有不需要/添加需要的事件。

问候

【讨论】:

好的,是的,这些都是有用的硬件事件,但是 Linux perf 将其 branch-loadsbranch-load-misses 映射到什么硬件事件?你没有回答那部分,或者询问者试图衡量总的误判 penalties 而不仅仅是误判 rate (如果您要求 Linux perf stat 同时测量 branchesbranch-misses,则它已经计算了未命中率,我认为在英特尔硬件上映射到 br_misp_retired.all_branchesbr_misp_retired.all_branches_pebs 是的,CPU 必须从错误的路径中丢弃微指令,但是周围的代码和微架构条件会影响有多少微指令,以及需要多少总吞吐量。 Avoid stalling pipeline by calculating conditional early 讨论了一种可以降低分支缺失的方法,即将分支条件作为长时间无法确认的长 dep 链的末端。

以上是关于性能:找不到“branch-load-misses”指标的有用描述的主要内容,如果未能解决你的问题,请参考以下文章

微信性能检测工具有啥用

设备参数优化更新点完稍后就找不到了

宝塔找不到node

14.性能优化答疑二

升级到 Visual Studio 2017 后找不到 Microsoft.VisualStudio.TestTools.LoadTesting

appium-代码优化--H5页面点击后元素变更,查找元素时,找不到元素