2012-04-17 15 views
4

私は、包括的なコールグラフを生成しようとしています(Linux、ランタイム、ロットへの低レベルの呼び出しを完了しています)。GCCとエジプトを使用した包括的なコールグラフの生成

私はソースファイルを "-fdump-rtl-expand"で静的にコンパイルし、RTLファイルを作成しました。これをエジプトと呼ばれるPERLスクリプト(Graphviz/Dotと思われます)に渡して、コールグラフ。これは完璧に動作し、全く問題はありません。

ただし、組み込みとして表示されているライブラリがいくつかあります。私は、コールグラフが印刷されないようにする方法があり、代わりに実際の呼び出しがライブラリに作られているかどうかを探していましたか?

質問が不明な場合はお知らせください。

http://i.imgur.com/sp58v.jpg

基本的に、私はそれをする方法はあり<ビルトイン>

生成からのコールグラフを避けるためにしようとしていますか?私はソースからのCilkライブラリをコンパイル---------

#include <cilk/cilk.h> 
#include <stdio.h> 
#include <stdlib.h> 

unsigned long int t0, t5; 
unsigned int NOSPAWN_THRESHOLD = 32; 

int fib_nospawn(int n) 
{ 
    if (n < 2) 
    return n; 
    else 
    { 
     int x = fib_nospawn(n-1); 
     int y = fib_nospawn(n-2); 
     return x + y; 
    } 
} 

// spawning fibonacci function 
int fib(long int n) 
{ 
    long int x, y; 
    if (n < 2) 
    return n; 
    else if (n <= NOSPAWN_THRESHOLD) 
    { 
     x = fib_nospawn(n-1); 
     y = fib_nospawn(n-2); 
     return x + y; 
    } 
    else 
    { 
     x = cilk_spawn fib(n-1); 
     y = cilk_spawn fib(n-2); 
     cilk_sync; 
     return x + y; 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    int n; 
    long int result; 
    long int exec_time; 

    n = atoi(argv[1]); 
    NOSPAWN_THRESHOLD = atoi(argv[2]); 
    result = fib(n); 

    printf("%ld\n", result); 
    return 0; 
} 

-------- CODE。

+0

」を生成するサンプルコードを投稿できますか?私が試したコードは 'egtpt'の' rtl'または 'dotty'出力に' built-in'を生成しませんでした。また、 ''ノードまたはその子ノードを削除するだけですか?そして、私は 'egypt -omit'オプションがあなたの要求を満たしていないと仮定します。また、使用しているgccのバージョンとその他のコマンドラインオプションは何ですか?私がgcc 4.1.2から抜けたrtlファイルには、パラメータの説明は含まれていませんでした。 –

+0

ありがとうございました... – boffin

+1

質問にEDITとしてコードを追加しました。後でコンパイルプロセスの後にダンプをベースにする方が良いかもしれませんか? Expandは後で取り除かれるたくさんの塊を作り出します。すべての機能を表示するには、インライン展開を無効にする必要があります。 – ams

答えて

4

私が問題に部分的解決発見した可能性があります

をあなたはエジプト

に次のオプションを渡す必要があり
--include-external 

依然として存在しているが、これは、もう少し包括的なコールグラフを生成「目に見える

http://i.imgur.com/GWPJO.jpg?1

コールグラフで深みが増したら誰でも提案できますか?

0

GCC VCG Plugin:gccのデバッグ時にロードできるgccプラグインを使用して、内部構造をグラフィカルに表示できます。

gcc -fplugin=/path/to/vcg_plugin.so -fplugin-arg-vcg_plugin-cgraph foo.c

コールグラフは、相互手続きの最適化のための を必要なデータを格納する場所です。 機能を分析しながら、製造されるlocal_infoglobal_infoコンパイルの端 にコールグラフのグローバル歩行 の結果であり、伝播するRTL バックエンドで使用rtl_info:すべてのデータ構造は は三つの成分に分割され既にコンパイルされたデータは、呼び出し元には が機能します。

関連する問題