首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C程序数据流图的生成

C程序数据流图的生成
EN

Stack Overflow用户
提问于 2012-07-20 01:42:57
回答 1查看 5K关注 0票数 3

我需要为C代码制作数据流图。我所说的数据流图指的是图中的节点表示加法和乘法等操作,边表示节点之间的操作数(数据)流。我的目标是分析计算密集型内核的数据流图的并行性和执行时间。我使用了许多工具从C程序生成数据流图,如Trimaran、Oink、GCC等。在这些工具中,GCC的Gimple内部表示为我提供了一些SSA (静态单赋值)形式的每个基本块的数据流分析。SSA表单简化了我的分析。下面是我使用GCC的方法:

-fdump-tree-cfg为每个函数生成控制流图,其中节点表示基本块,边表示控制依赖。还显示了每个基本块中的数据依赖关系。但是,它没有给出每个基本块的数据流图。我需要可视化数据依赖,以便分析每个基本块中的数据流。

例如,如果将-fdump-tree-cfg应用于以下代码

代码语言:javascript
复制
for (i1=0; i1<=N1-N2; i1++)
    for (i2=0; i2<N2; i2++) //N2=31
        y[i1] = y[i1] + w[i2]*x[i1+i2];

你会得到这个:

代码语言:javascript
复制
...
<bb 3>:
  i2 = 0;
  goto <bb 5>;

<bb 4>: //the inner-most loop, where real computation happens
  i1.0 = i1;
  i1.1 = i1;
  D.1608 = y[i1.1];
  i2.2 = i2;
  D.1610 = w[i2.2];
  D.1611 = i1 + i2;
  D.1612 = x[D.1611];
  D.1613 = D.1610 * D.1612;
  D.1614 = D.1608 + D.1613;
  y[i1.0] = D.1614;
  i2 = i2 + 1;

<bb 5>:
  if (i2 <= 31)
    goto <bb 4>;
  else
    goto <bb 6>;
...

-fdump-tree-vcg生成VCG格式的控制流图,但不携带任何数据依赖信息。

然而,GCC也有一些局限性。例如,GCC没有为每个基本块生成可视化的数据流图。我想知道是否有任何工具可以为C程序生成数据流图?或者可能有一个从Gimple表示生成数据流图的GCC插件。

PS:这些工具应该是独立于平台的,并且不限于特定的架构。例如,GCC中的Gimple表示是独立于体系结构的。

EN

回答 1

Stack Overflow用户

发布于 2012-07-20 02:44:46

没有特定的插件可以做到这一点。但是你可以使用“点”来绘制图表。由于gimple表示具有特定的格式,您可以很容易地制作一个解析器,该解析器将gimple表示作为输入,并给出点文件作为输出。从点文件你可以很容易地画出图表。只要做man dot,你就会得到一切。无论如何,这是一个很好的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11566404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档