2015-11-03 29 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