【发布时间】:2011-05-12 03:47:17
【问题描述】:
是否有任何标准方法(使用分析器)来检查使用这些 gcc 识别的分支预测宏是否可以在指令流水线方面使某些时钟周期受益?我们如何在程序中使用和不使用这些宏来衡量这一点?测量经过的时间是唯一的方法吗?
Windows 中是否有类似的分支预测宏(例如假设 keywork?)
-卡特里
【问题讨论】:
标签: windows gcc compiler-construction linux-kernel profiler
是否有任何标准方法(使用分析器)来检查使用这些 gcc 识别的分支预测宏是否可以在指令流水线方面使某些时钟周期受益?我们如何在程序中使用和不使用这些宏来衡量这一点?测量经过的时间是唯一的方法吗?
Windows 中是否有类似的分支预测宏(例如假设 keywork?)
-卡特里
【问题讨论】:
标签: windows gcc compiler-construction linux-kernel profiler
我不熟悉任何可以显示分支效率的分析器。 Linux time 程序应该可以很好地帮助您进行基准测试。
在所有现代 x86 CPU 上,如果 JMPcc 指令不分支,而是直接进入下一条指令,它们会更快。
GCC 的 __builtin_expect 函数向编译器提供了一个提示——它告诉 if() 的哪一侧应该是fall-through,哪一侧应该是分支。仅当您 100% 确定时才应使用此功能。 VC++ 没有等效的功能。我不确定 ICC。
更好的方法是避免使用这些非标准函数并使用配置文件引导优化 (PGO),您可以在其中运行程序并记录所有这些分支以找出内容的去向。
【讨论】: