这个问题和它的答案,这是最近标记为史诗答案,促使我想知道; 我可以用来衡量在Windows中运行的应用程序在其CPU的分支预测失败方面的表现? 我知道有些静态分析工具存在,这可能与在分支预测情况下取得良好的性能优化代码帮助,而且手工技术可以通过简单地更改并重新测试帮助,但我正在寻找一些自动机制,可报告的分支预测失败的总数,过了一段时间,作为Windows应用程序运行,并且我希望为Visual C ++一些Profiler工具可以帮助我。
对于这个问题的缘故,有问题的应用程序或者与本地编译器内置如Visual C ++为Windows,或使用一些其他本地编译器,如GCC,FreePascal的,德尔福,或TurboAssembler。 该可执行文件可能没有任何调试信息都没有。 我想知道我是否可以检测和计数分支预测失败,或许可以通过一些Windows服务像WMI读取CPU内部信息,或者通过完全运行Windows,如使用VirtualBox,然后运行一个完全虚拟化环境中运行虚拟化的Windows环境,我的测试程序,在VirtualBox和虚拟CPU的做运行时分析。 或其他一些技术,我不知道的,所以这个问题。
是的,我用Google搜索。 这看起来很有希望的唯一的事情是这个PDF来自AMD。 第18页提到的东西非常接近,想什么,我做的,但对于那些没有任何操作系统的工作,对原材料的评估硬件平台似乎写的:
5.1。 分行。 适用性。 有条件的分支预测失误,可能会在代码中显著的问题有很多的决策逻辑。
条件分支可能在选择true或false路径的可能性是随机的或接近50-50被错误预测。 分支预测硬件不能“学习”的图案和分支不正确地预测。 采集。 收藏此表中的事件来衡量分支预测性能:
分支计算在被采纳分支的速率和使用这些公式每个分支指令的数量的比率:分支采取率= Taken_branches / Ret_instructions处所采取比= Taken_branches /分支
每个分支= Ret_instructions /分行指令
更新:我想我可以说,我在寻找一种方式来阅读英特尔酷睿i7 PMU模块,或其它CPU的同等功能。 它看起来像英特尔VTune(由阿德里安评论)非常接近我问。