2014-01-06 44 views
0

我正在使用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.txtmatOpt();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的獲得。 重要的是我有一個自動的方式來獲取多個運行可執行文件的函數的時間,這也與不同的輸入大小。

這個解釋只是一個粗略的想法。我會很高興得到任何接近此的東西。例如,應用程序可能會退出,然後重新啓動以獲取新的性能分析結果。這就是我實際上在做的。但我想自動執行此操作。

我該如何實現這一目標?

回答

0

您可以使用腳本語言並將大小作爲分析二進制文件的參數嗎?

有關使用c:passing arguments to main中的參數的示例。

這個bash腳本將自動運行與50的矩陣大小到50000程序tee命令可以確保輸出打印並保存在相應的文件:analysisxxx.txt

#!/bin/bash 

for i in {50..50000} 
do 
    gprof mat gmon.out $i | tee analysis${i}.txt 
done 

我希望這有助於你有點。

+0

這看起來很有用。但是,通過這種方式,我將獲得很多分析文件,我將不得不手動打開每個文件,然後查看函數的時間。我們可以從單個文件中的所有文件中獲得所有結果嗎?以便我可以輕鬆比較每種尺寸的結果? – user2799508

+0

grof mat gmon.out $ i >> inasinglefile.txt,使用>>來代替> –