这个问题及其答案最近被标记为史诗般的答案,这让我感到疑惑;我可以根据 CPU 分支预测失败来衡量 Windows 中正在运行的应用程序的性能吗?我知道存在一些静态分析工具,它们可能有助于在分支预测情况下优化代码以获得良好的性能,并且手动技术可以通过简单地进行更改和重新测试来提供帮助,但我正在寻找一些可以在 Windows 应用程序运行时报告一段时间内分支预测失败的总数,我希望 Visual C++ 的一些 Profiler 工具可以帮助我。
对于这个问题,所讨论的应用程序要么是使用原生编译器(例如 Windows 的 Visual C++)构建的,要么是使用其他一些原生编译器(例如 GCC、FreePascal、Delphi 或 TurboAssembler)构建的。可执行文件可能根本没有任何调试信息。我想知道我是否可以检测和计算分支预测失败,可能是通过某些 Windows 服务(如 WMI)读取内部 CPU 信息,或者可能完全在运行 Windows 的虚拟化环境中运行,例如使用 VirtualBox,然后完全运行使用我的测试应用程序在 VirtualBox 中虚拟化 Windows 环境,并对虚拟 CPU 进行运行时分析。或者我不知道的其他一些技术,因此这个问题。
是的,我用谷歌搜索。唯一看起来很有希望的是来自 AMD的PDF 。第 18 页提到了一些非常接近我想做的事情,但似乎是为那些在原始评估硬件平台上没有任何操作系统工作的人编写的:
5.1。分支机构。适用性。条件分支错误预测可能是具有大量决策逻辑的代码中的一个重要问题。
Conditional branches may be mispredicted when the likelihood of choosing the true or false path is random or near a 50-50 split. 分支预测硬件无法“学习”模式,因此无法正确预测分支。收藏。收集此表中的事件以衡量分支预测性能:
分支 使用以下公式计算执行分支的速率和每个分支的指令数比率: 分支执行率 = Taken_branches / Ret_instructions 分支执行率 = Taken_branches / Branches
每个分支的指令 = Ret_instructions / Branches
更新:我想我可以说我正在寻找一种方法来读取英特尔酷睿 i7 PMU 模块或其他 CPU 的等效功能。看起来英特尔 VTUNE(来自 Adrian 的评论)非常接近我的要求。