我正在使用gprof分析矩陣乘法C程序。該C程序具有這樣的一般結構;使用GPROF自動化C程序的分析
int main()
{
int n;
printf("enter size of square matrices");
scanf("%d", &n);
data(matM); //fill matrices with n x n random data
data(matN);
// this is unoptimized algo
matUnopt(int *matM, int *matN, int *MatOut, int size);
// this is optimized algo
matOpt(int *matM, int *matN, int *MatOut, int size);
return(0);
}
目前
現在我如何剖析是:
我跑我的可執行墊子,給大小100
然後
$ gprof mat gmon.out > analysis1.txt
這產生從那裏我手動記下計時analysis1.txt
matOpt();
和matUnopt();
然後我再次運行可執行文件,並給出n=150
,然後
$ gprof mat gmon.out > analysis2.txt
這產生從我手動注意定時matOpt();
和matUnopt();
等analysis2.txt
。
這是非常耗時和無聊的方式。我想自動執行此過程。一些這方面是這樣的:
int main()
{
int n;
for (n=50; n<50000; n++)
{
data(matM); //fill matrices with n x n random data
data(matN);
// this is unoptimized algo
matUnopt(int *matM, int *matN, int *MatOut, int size);
//gprof records the time of completion of matUnopt for the particular value of n, and
puts in a file
// this is optimized algo
matOpt(int *matM, int *matN, int *MatOut, int size);
//gprof records the time of completion of matOpt for the particular value of n, and
puts in a file
}
return(0);
}
一旦應用程序退出,我期待有這樣一個表的文件:
run# (x 50) profiling result (as usual we get from gprof)
1 matUnopt time .....
matOpt time .....
2 matUnopt time .....
matOpt time .....
3 matUnopt time .....
matOpt time .....
4 matUnopt time .....
matOpt time .....
and so on.
請注意,上述「分析的結果」就是我們通常從gprof的獲得。 重要的是我有一個自動的方式來獲取多個運行可執行文件的函數的時間,這也與不同的輸入大小。
這個解釋只是一個粗略的想法。我會很高興得到任何接近此的東西。例如,應用程序可能會退出,然後重新啓動以獲取新的性能分析結果。這就是我實際上在做的。但我想自動執行此操作。
我該如何實現這一目標?
這看起來很有用。但是,通過這種方式,我將獲得很多分析文件,我將不得不手動打開每個文件,然後查看函數的時間。我們可以從單個文件中的所有文件中獲得所有結果嗎?以便我可以輕鬆比較每種尺寸的結果? – user2799508
grof mat gmon.out $ i >> inasinglefile.txt,使用>>來代替> –