性能:找不到“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 事件的表并取消选中所有不需要/添加需要的事件。
问候
【讨论】:
好的,是的,这些都是有用的硬件事件,但是 Linuxperf
将其 branch-loads
和 branch-load-misses
映射到什么硬件事件?你没有回答那部分,或者询问者试图衡量总的误判 penalties 而不仅仅是误判 rate。
(如果您要求 Linux perf stat
同时测量 branches
和 branch-misses
,则它已经计算了未命中率,我认为在英特尔硬件上映射到 br_misp_retired.all_branches
或 br_misp_retired.all_branches_pebs
)
是的,CPU 必须从错误的路径中丢弃微指令,但是周围的代码和微架构条件会影响有多少微指令,以及需要多少总吞吐量。 Avoid stalling pipeline by calculating conditional early 讨论了一种可以降低分支缺失的方法,即不将分支条件作为长时间无法确认的长 dep 链的末端。以上是关于性能:找不到“branch-load-misses”指标的有用描述的主要内容,如果未能解决你的问题,请参考以下文章
升级到 Visual Studio 2017 后找不到 Microsoft.VisualStudio.TestTools.LoadTesting