可能和不太可能的宏

时间:2011-05-12 03:47:17

标签: windows gcc compiler-construction linux-kernel profiler

是否有任何标准方法(使用分析器)检查使用这些gcc识别的分支预测宏是否可以在指令流水线方面使某些时钟周期受益?我们如何在程序中使用和不使用这些宏来衡量这一点?测量经过的时间是唯一的方法吗?

Windows中是否有类似的分支预测宏(例如假设关键字?)

-Kartlee

1 个答案:

答案 0 :(得分:2)

我不熟悉任何能够显示分支效率的分析器。 Linux time程序应该可以很好地帮助您进行基准测试。

在所有现代x86 CPU上,如果JMPcc指令不分支,则会更快,而只是落到下一条指令。

GCC的__builtin_expect函数向编译器提供了一个提示 - 它告诉if()的哪一侧应该是直通,哪一侧应该是分支。如果你100%确定它,你应该只使用这个功能。 VC ++没有等效的功能。我不确定ICC。

更好的方法是避免使用这些非标准函数并使用Profile Guided Optimization(PGO),在其中运行程序并记录所有这些分支以找出内容的位置。