假设我在C ++中有一个if-else分支,我怎么能(在代码中)测量分支被错误预测的频率?我想在分支机构周围添加一些调用或宏(类似于自下而上的分析),它会报告分支错误预测。
拥有通用方法会很不错,但让初学者使用Intel i5 2500k。
答案 0 :(得分:2)
如果您使用的是AMD CPU,那么AMD的CodeAnalyst就是您所需要的(适用于Windows和Linux)*。
如果不是,那么您可能需要使用指令手册中的CPU性能寄存器和计数器详细信息来获取VTune许可证或构建内容。
您还可以查看gperf& OProfile(仅限linux),看看它们的表现如何(我从未使用过它们,但我看到它们的含义相当多)。
* CodeAnalyst应该在Intel CPU上工作,你只是没有得到所有不错的CPU级别分析。
答案 1 :(得分:1)
OProfile非常复杂,但它可以分析您的CPU跟踪的任何内容。
查看Event Type Reference并查找您的特定CPU。
例如,这里是core2 events。在快速搜索之后,我没有在core2架构上看到任何错过分支预测的事件计数器。
答案 2 :(得分:1)
我想知道是否可以从g++ -fprofile-arcs
中提取这些信息?它必须准确测量这一点才能反馈到优化器中以优化分支。