测量分支被错误预测的频率
假设我在 C++ 中有一个 if-else 分支,我如何(在代码中)测量分支被错误预测的频率?我想在分支周围添加一些调用或宏(类似于自下而上分析的方式),以报告分支错误预测。
如果有一个通用方法就好了,但首先让我们使用 Intel i5 2500k。
Assuming I have a if-else branch in C++ how can I (in-code) measure how often the branch is mispredicted? I would like to add some calls or macros around the branch (similar to how you do bottom-up profiling) that would report branch mispredictions.
It would be nice to have a generic method, but lets do Intel i5 2500k for starters.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您使用的是 AMD CPU,AMD 的 CodeAnalyst 正是您所需要的(适用于 Windows 和 Linux)*。
如果您没有,那么您可能需要购买 VTune 许可证或使用说明手册中的 CPU 性能寄存器和计数器详细信息构建一些东西。
您还可以查看 gperf & OProfile(仅限 Linux),看看它们的性能如何(我从未使用过这些,但我看到他们提到了很多)。
*CodeAnalyst 应该在 Intel CPU 上工作,您只是无法获得所有出色的 CPU 级别分析。
If you are using an AMD CPU, AMD's CodeAnalyst is just what you need (works on windows and Linux)*.
if your not, then you may need to fork out for a VTune licence or build something using the on CPU performance registers and counters details in the instruction manuals.
You can also check out gperf & OProfile (linux only), see how well they perform (I've never used these, but I see them referred to quite a bit).
*CodeAnalyst should work on an Intel CPU, you just don't get all then nice CPU level analysis.
我想知道是否可以从
g++ -fprofile-arcs
中提取这些信息?它必须准确地测量这一点,以便反馈到优化器中,从而优化分支。I wonder if it would be possible to extract this information from
g++ -fprofile-arcs
? It has to measure exactly this in order to feed back into the optimizer in order to optimize branching.OProfile
OProfile 相当复杂,但它可以分析 CPU 跟踪的任何内容。
查看事件类型参考并查找您的特定CPU。
例如,这里是 core2 事件。经过快速搜索后,我在 core2 架构上没有看到任何用于错过分支预测的事件计数器。
OProfile
OProfile is pretty complex, but it can profile anything your CPU tracks.
Look through the Event Type Reference and look for your particular CPU.
For instance here is the core2 events. After a quick search I don't see any event counters for missed branch prediction on the core2 architecture.