0

この質問では、Visual Studio 2012 と GCC 4.7 に焦点を当てます。

一方では、プロファイル ガイド付きコンパイルは、実行時にコードを計測し、2 回目のコンパイル中にこの情報を使用することで、分岐予測を最適化します。一方、多くのコンパイラは、どの分岐が最も可能性が高いかをコンパイラに示唆する拡張機能を提供しています: GCC が提供するもの__builtin_expectと Visual Studio が提供するもの__assumeです。

両方のコンパイラ拡張機能を使用してコードを書き直すことができるように、(どちらかのコンパイラの) プロファイル ガイド情報を抽出する方法はありますか? 目標は、独自のバージョンのバイナリを再コンパイルすることをいとわない人々のために、「最適化された」ソース コードを提供することです。

4

1 に答える 1

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:}
于 2012-11-24T11:06:53.413 に答える