gpt4 book ai didi

c++ - 我可以在现代 Intel Core CPU 上测量分支预测失败吗?

转载 作者:IT老高 更新时间:2023-10-28 22:15:18 33 4
gpt4 key购买 nike

This question它的答案最近被标记为史诗般的答案,这让我想知道;我可以根据 CPU 分支预测失败来衡量 Windows 中正在运行的应用程序的性能吗?我知道存在一些静态分析工具,它们可能有助于优化代码以在分支预测情况下获得良好的性能,并且手动技术可以通过简单地进行更改和重新测试来提供帮助,但我正在寻找一些可以在 Windows 应用程序运行时报告一段时间内分支预测失败的总数,我希望 Visual C++ 的一些 Profiler 工具可以帮助我。

就这个问题而言,所讨论的应用程序要么是使用原生编译器(例如 Windows 的 Visual C++)构建的,要么是使用其他一些原生编译器(例如 GCC、FreePascal、Delphi 或 TurboAssembler)构建的。可执行文件可能根本没有任何调试信息。我想知道我是否可以检测和计算分支预测失败,可能是通过某些 Windows 服务(如 WMI)读取内部 CPU 信息,或者可能完全在运行 Windows 的虚拟化环境中运行,例如使用 VirtualBox,然后完全运行使用我的测试应用程序在 VirtualBox 中虚拟化 Windows 环境,并对虚拟 CPU 进行运行时分析。或者其他一些我不知道的技术,因此这个问题。

是的,我用谷歌搜索过。唯一看起来很有希望的是this PDF来自 AMD。第 18 页提到了一些非常接近我想做的事情,但似乎是为那些在原始评估硬件平台上没有任何操作系统的人编写的:

5.1. Branches. Applicability. Conditional branch mispredictions may be a significant issue in code with a lot of decision-making logic.

Conditional branches may be mispredicted when the likelihood of choosing the true or false path is random or near a 50-50 split. The branch prediction hardware cannot "learn" a pattern and branches are not predicted correctly. Collection. Collect the events in this table to measure branch prediction performance:

Branches Compute the rate at which branches are taken and the ratio of the number of instructions per branch using these formulas: Branch taken rate = Taken_branches / Ret_instructions Branch taken ratio = Taken_branches / Branches
Instructions per branch = Ret_instructions / Branches

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

最佳答案

VTune 性能分析器可以做到!顺便说一句,如果您正在研究这些主题,请查看 Intel Press 的“Optimization Cookbook”。

注意:评论给出了相同的答案,但存在一些不确定性,我使用了 VTune 并测量了 Intel CPU 的分支预测率。所以我百分百确定。

here is the link for VTune

here is the link for the book

关于c++ - 我可以在现代 Intel Core CPU 上测量分支预测失败吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11437523/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com