2015-11-03 69 views
1

我想在linux中使用time命令觀察我的MPI程序的性能。它僅顯示程序的實際值,用戶值和系統值。但是,我應該檢查每個進程發生了什麼。那麼,有沒有辦法看到我的程序分別爲每個進程分配多長時間?如何觀察MPI程序所有進程的運行時間

+0

你是否被限制使用'time'命令(或其他OS命令)?如果你能夠改變代碼,使用'MPI_Wtime'是一件非常簡單的事情,這可能會更準確。 –

+0

我已經使用了下面的解決方案。非常感謝你。 –

回答

2

如果你在前面加上timempiexec/mpirun命令,它會告訴你有關命令本身的統計數據:

$ /usr/bin/time -p mpiexec -n 3 sleep 1 
real 3.54 
user 0.42 
sys 0.15 

有它報告關於每個MPI等級的統計數據,你應該在前面加上time到的名稱該MPI可執行文件:

$ mpiexec -n 3 /usr/bin/time -p sleep 1 
real 1.00 
user 0.00 
sys 0.00 
real 1.00 
user 0.00 
sys 0.00 
real 1.00 
user 0.00 
sys 0.00 

爲了分離來自各級的輸出,並確定哪個是哪個,並從中排名測量降臨時,你可以使用下面的機智H打開MPI:

$ mpiexec --tag-output -n 3 /usr/bin/time -p sleep 1 
[1,1]<stderr>:real 
[1,1]<stderr>:1.00 
[1,1]<stderr>:user 0.00 
[1,1]<stderr>:sys 0.00 
[1,0]<stderr>:real 1.00 
[1,0]<stderr>:user 0.00 
[1,0]<stderr>:sys 0.00 
[1,2]<stderr>:real 1.00 
[1,2]<stderr>:user 0.00 
[1,2]<stderr>:sys 0.00 

每一行現在由[1,rank]<stream>:前綴。您也可以編寫與選項調用time寫信息到一個文本文件,如包裝:

#!/bin/sh 
/usr/bin/time -o timing.$OMPI_COMM_WORLD_RANK $* 

mpiexec -n 3 mpitime.sh sleep 1運行會產生三個文件:timing.0timing.1timing.2,包含行列的時機0,1和2.封裝腳本必須適用於其他實現。見here