我需要爲C代碼生成數據流圖。數據流圖是指圖中的節點表示加法和乘法等操作,邊表示節點間的操作數(數據)流。我的目標是分析計算密集型內核的數據流圖的並行性和執行時間。我使用了許多工具從C程序(如Trimaran,Oink,GCC等)生成數據流圖。在這些工具中,GCC的Gimple內部表示爲我提供了一些針對SSA中每個基本塊的數據流分析(靜態單一分配)表單。 SSA表格簡化了我的分析。以下是我如何使用GCC:C程序的數據流圖生成
-fdump-tree-cfg
爲每個函數生成控制流圖,其中節點表示基本塊,邊表示控制依賴性。還顯示了每個基本塊中的數據依賴性。但是,它不會爲每個基本塊提供數據流圖。我需要將數據依賴性可視化,以便分析每個基本塊中的數據流。
舉個例子,如果你申請-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不會爲每個基本塊生成可視化的數據流圖。我想知道是否有任何工具可以爲C程序生成數據流圖?或者可能有一個GCC插件來從Gimple表示生成數據流圖。
PS:這些工具應該是平臺無關的,不限於特定的架構。例如,GCC中的Gimple表示與體系結構無關。
看看多面模型(可能有助於您的具體示例)。但在一般情況下,至少需要完整的抽象解釋。 – 2012-07-20 08:50:08
[提出建議列表的問題在SE上不太合適](http://meta.stackexchange.com/questions/158809/why-are-shopping-list-questions-bad) – 2013-06-04 15:39:51