【发布时间】:2012-01-08 20:22:21
【问题描述】:
假设我在 C++ 中有一个 if-else 分支,我如何(在代码中)测量分支被错误预测的频率?我想在分支周围添加一些调用或宏(类似于您如何进行自下而上的分析),以报告分支错误预测。
如果有一个通用方法会很好,但让我们先使用 Intel i5 2500k。
【问题讨论】:
-
可能类似于 Valgrind 的
massif分析器...我怀疑您是否可以“在代码中”执行它,因为程序执行对程序本身是完全透明的。 -
根据 CPU,您可能能够访问 CPU 的性能寄存器,但该问题缺乏足够的细节来提供具体建议。
-
请注意,您获得的结果非常依赖于 cpu,并且您可能无法通过任何侵入性获得准确的测量值(因为更改分支周围的任何代码都会改变其位置,这确实可以有对分支预测的影响)。但是,您究竟希望从这些信息中获得什么?对您而言,错误预测特定分支的频率是否重要(而不是执行需要多长时间,这可能很重要)?
-
@LuchianGrigore:见en.wikipedia.org/wiki/Branch_prediction。
-
所以我添加了CPU信息。我希望获得的收获是更好地了解要进行哪些优化 - 即,当我查看分支时,我想看看错误预测是否是一个问题。