7

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

ソースファイルを「-fdump-rtl-expand」で静的にコンパイルし、RTLファイルを作成しました。これをEgyptというPERLスクリプト(Graphviz / Dotと思います)に渡して、コールグラフのPDFファイルを生成しました。これは完全に機能し、まったく問題はありません。

ただし、組み込みとして表示される一部のライブラリに対して呼び出しが行われている場合を除きます。コールグラフを印刷せず、代わりにライブラリに実際に呼び出される方法があるかどうかを確認していましたか?

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

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

基本的に、コールグラフが<組み込み>を生成しないようにしています。

それを行う方法はありますか?

--------コード---------

#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;
}

Cilkライブラリをソースからコンパイルしました。

4

2 に答える 2

4

問題の部分的な解決策を見つけたかもしれません:

次のオプションを egypt に渡す必要があります

--include-external

これにより、もう少し包括的なコールグラフが作成されましたが、まだ「可視」

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

callgraph をさらに深く掘り下げれば、誰でも提案できますか?

于 2012-04-17T22:31:25.757 に答える
0

You can use the GCC VCG Plugin: A gcc plugin, which can be loaded when debugging gcc, to show internal structures graphically.

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

Call-graph is place to store data needed for inter-procedural optimization. All datastructures are divided into three components: local_info that is produced while analyzing the function, global_info that is result of global walking of the call-graph on the end of compilation and rtl_info used by RTL back-end to propagate data from already compiled functions to their callers.

于 2015-07-12T14:47:32.360 に答える