gpt4 book ai didi

gcc - C 程序的数据流图生成

转载 作者:行者123 更新时间:2023-12-02 02:13:45 24 4
gpt4 key购买 nike

<分区>

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

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

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

for (i1=0; i1<=N1-N2; i1++)
for (i2=0; i2<N2; i2++) //N2=31
y[i1] = y[i1] + w[i2]*x[i1+i2];

你明白了:

...
<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 不会为每个基本 block 生成可视化的数据流图。我想知道是否有任何工具可以为 C 程序生成数据流图?或者可能有一个 GCC 插件可以从 Gimple 表示中生成数据流图。

PS:工具应该是平台无关的,不限于特定的架构。例如,GCC 中的 Gimple 表示是体系结构无关的。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com