【问题标题】:Reporting profile-guided compilation to the source code将 profile-guided 编译报告到源代码
【发布时间】:2012-11-12 07:54:06
【问题描述】:

在这个问题中,我将重点关注 Visual Studio 2012 和 GCC 4.7

一方面,配置文件引导编译通过在运行时检测代码,然后在第二次编译期间使用此信息来优化分支预测。另一方面,许多编译器提供扩展来提示编译器最有可能采用哪个分支:GCC 提供__builtin_expect,Visual Studio 提供__assume

有没有办法提取配置文件引导信息(任一编译器的),以便能够使用两个编译器扩展重写代码?目标是为愿意重新编译自己的二进制版本的人们提供“优化”的源代码。

【问题讨论】:

  • 请注意,__assume 不会告诉编译器“这个表达式很可能是真的”,它会告诉编译器“这个表达式总是真的”。有很大的不同。
  • @JamesMcNellis 我不知道!谢谢

标签: visual-studio optimization gcc compilation branch-prediction


【解决方案1】:

您可以使用gcov 提取此信息。

编译如下来源:

gcc -ftest-coverage -fprofile-arcs x.c

运行可执行文件

./a.out

在源文件上运行gcov -b。选项-b 告诉它生成分支概率信息。

gcov -b x.c

gcov 将创建文本文件x.c.gcov,其中将包含所需的信息,这是一个示例:

        -:    5:int
function foo called 1 returned 100% blocks executed 100%
        1:    6:foo (unsigned int N)
        -:    7:{
        1:    8:  int i, s = 0;
        -:    9:
    10001:   10:  for (i = 0; i < N; ++i)
branch  0 taken 99%
branch  1 taken 1% (fallthrough)
        -:   11:    {
    10000:   12:      if ((rand () % 100) < 30)
call    0 returned 100%
branch  1 taken 30% (fallthrough)
branch  2 taken 70%
     3027:   13:        s++;
        -:   14:      else
     6973:   15:        s--;
        -:   16:    }
        -:   17:
        1:   18:  return s;
        -:   19:}

【讨论】:

    猜你喜欢
    • 2016-10-25
    • 1970-01-01
    • 2013-04-23
    • 2015-04-27
    • 2011-03-26
    • 1970-01-01
    • 2010-11-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多