2012-11-15 84 views
4

我有MPI/OpenMP混合代碼。我想知道每個MPI過程花費的特定功能的時間,比如說A。這個函數在OpenMP do/for循環中被其它函數以非常複雜的方式調用(也就是說一些其他函數可以說B和C可能調用A,這也可能在OpenMP do/for循環中) 。我正打算這樣做如下:MPI/OpenMP混合代碼中的計時單功能

double A() 
{ 
time1 = MPI_Wtime(); 
//compute result... 
//Note: inside this function there is no OpenMP or MPI calls... 
//  just pure computation of results... 
time2 = MPI_Wtime(); 
printf("myRank=%d timeSpent=%f\n", myRank, (time2-time1)); 
return result; 
} 

會的每每一個MPI過程中的所有時間的總和是由MPI過程花了這個功能的總時間?如果不是,請你能告訴我如何正確地得到它,謝謝!

+0

你正在做它的每一個主題的方式/ MPI進程將有自己的時間1和時間2 – pyCthon

+0

@pyCthon你可以提出一個方法只有每MPI進程得到?謝謝!!! – tiki

+1

@torem,VampirTrace處於完全插裝模式(默認模式)將跟蹤代碼中每個函數的執行情況(或者您可以編寫一個過濾器將其限制爲僅限於「A()」)跨MPI作業中的所有進程然後可以使用Vampir(商業)或Scalasca(開源)來分析OTF蹤跡。 –

回答

1

我們不想重新發明輪子,我們不想重塑MPI分析器。那會很難。

許多集羣系統的製造商都提供非常強大的工具。例如Cray機器通常配備CrayPat,其中spits out magic

此外,還有免費的軟件,因爲這http://mpip.sourceforge.net/

+0

我用crayPat。對於我的函數A只有一個結果,即不是我正在運行的每個MPI進程,它在表中表示「MPI進程爲此的用戶時間(大約)100.055秒」? – tiki

+0

@torem您正在試圖解決負載不平衡問題?我認爲我提到的鏈接給出了關於如何做到這一點的確切說明。你應該發佈你的編譯行,也許在SO上打開一個CrayPat特定的問題。也許你應該使用你發出的patreport命令修改你的文章。因爲CrayPat是用來顯示這些信息的。 – Mikhail

0

我建議不要推倒重來,而是使用已經內置了剖析,如TAU,或MPIPGprof一些專業級的軟件...

繼承人一個體面presentation讓你開始

+0

我嘗試過使用gprof,但它沒有爲每個MPI進程創建gmon文件,它只創建單gmon.out。然後,我做了「gprof a.exe gmon.out」它給了我什麼都沒有... – tiki

+0

你需要添加環境變量,也(如果你在Linux上)你不需要.exe爲你的對象文件它在第三鏈接如果你向下滾動 – pyCthon