这个问题及其答案最近被标记为史诗般的答案,这让我感到好奇;我可以根据CPU分支预测故障来衡量Windows中运行的应用程序的性能吗?我知道存在一些静态分析工具,它们可能有助于优化代码,以在分支预测情况下获得良好的性能,手动技术可以通过简单地进行更改和重新测试来提供帮助,但我正在寻找一些自动机制,当Windows应用程序运行时,它可以在一段时间内报告分支预测失败的总数,我希望一些Visual C++的Profiler工具可以帮助我
为了解决这个问题,所讨论的应用程序要么使用本机编译器(如Visual C++For Windows)构建,要么使用其他本机编译器,如GCC、FreePascal、Delphi或TurboAssembler。可执行文件可能根本没有任何调试信息。我想知道我是否可以检测和计数分支预测失败,也许是通过WMI之类的Windows服务读取内部CPU信息,也许是完全在运行Windows的虚拟化环境中运行,比如使用VirtualBox,然后在VirtualBox中使用我的测试应用程序运行完全虚拟化的Windows环境,以及对虚拟CPU进行运行时分析。或者其他一些我不知道的技巧,所以这个问题。
是的,我在谷歌上搜索过。唯一看起来有希望的是AMD的PDF。第18页提到了一些非常接近我想做的事情,但似乎是为那些在没有任何操作系统的情况下在原始评估硬件平台上工作的人写的:
5.1.分支机构。适用性。在具有大量决策逻辑的代码中,条件分支预测失误可能是一个重要问题。
当选择真路径或假路径是随机的或接近五五开。这个分支预测硬件无法"学习"模式,而分支没有正确预测。收集收集此表中的事件衡量分支预测性能:
分支计算分支的速率take和每个分支使用的指令数的比率这些公式:分支执行率=taken_branches/Ret_instructions分支占用率=占用分支数/分支数
每个分支的指令=Ret_Instructions/Branches
更新:我想我可以说我正在寻找一种读取英特尔酷睿i7 PMU模块或其他CPU等效功能的方法。看起来英特尔VTUNE(来自Adrian的评论)非常接近我的要求。
VTune性能分析器可以做到!顺便说一句,如果你正在研究这些主题,可以看看英特尔出版社的"优化食谱"。
注意:注释给出了相同的答案,但有一些不确定性,我使用了VTune,并测量了英特尔CPU的分支预测率。所以我百分之百肯定。
这是VTune 的链接
这是这本书的链接