我可以在现代英特尔酷睿CPU上测量分支预测故障吗?

这个问题及其答案,最近被标记为一个史诗般的答案,促使我想知道; 在CPU分支预测失败方面,我可以测量Windows中正在运行的应用程序的性能吗? 我知道存在一些静态分析工具,这可能有助于在分支预测情况下优化代码以获得良好性能,手动技术可以通过简单地进行更改和重新testing来提供帮助,但是我正在寻找一些自动机制在一段时间内报告一个分支预测失败的总数,当一个Windows应用程序运行时,我希望一些用于Visual C ++的Profiler工具可以帮助我。

为了这个问题,有问题的应用程序要么使用本地编译器(例如Visual C ++ for Windows),要么使用其他本机编译器(如GCC,FreePascal,Delphi或TurboAssembler)构build。 可执行文件可能根本没有任何debugging信息。 我想知道是否可以检测并计算分支预测失败,也许可以通过像WMI这样的Windows服务读取内部CPU信息,也可以通过运行Windows的虚拟环境(如使用VirtualBox)完全运行,然后完全运行使用我的testing应用程序在VirtualBox中虚拟化Windows环境,并对虚拟CPU进行运行时分析。 或者其他一些我不知道的技术,就是这个问题。

是的,我GOOGLE了。 唯一看起来很有前途的是来自AMD的PDF 。 提到的东西与我想要做的非常接近,但似乎是针对没有任何操作系统的人员在原始评估硬件平台上编写的:

5.1。 分行。 适用性。 有条件的分支预测失误可能是代码中的一个重要问题,有很多决策逻辑。

当select真或假path的可能性是随机的或接近50-50分裂时,条件分支可能被错误预测。 分支预测硬件不能“学习”模式,分支预测不正确。 采集。 收集此表中的事件以测量分支预测性能:

分支使用以下公式计算分支采取的比率和每个分支的指令数量的比率:分支采取率= Taken_branches / Ret_instructions分支采取比率= Taken_branches /分支
每个分支的指令= Ret_instructions /分支

更新:我想我可以说我正在寻找一种方法来阅读英特尔酷睿i7 PMU模块,或其他CPU的等效function。 看起来英特尔VTUNE(来自Adrian的评论)非常接近我所要求的。

VTune性能分析器可以做到这一点! 顺便说一句,如果您正在研究这些主题,请参阅“英特尔新闻”的“优化手册”。

注:评论陈述相同的答案,但有一些不确定性,我用VTune和我测量了英特尔CPU的分支预测率。 所以我100%肯定

这里是VTune的链接

这里是本书的链接