2011-05-12 41 views
2

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

在Windows中有类似的分支预测宏(假设例如keywork?)

-Kartlee

回答

2

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

在所有现代的x86 CPU上,如果JMPcc指令不转移并转向下一条指令,则指令速度更快。

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

更好的方法是避免使用这些非标准功能,并使用简介指导优化(PGO),在该程序中运行程序并记录所有这些分支以找出问题所在。