如何观察MPI程序的所有进程的已用时间

时间:2015-11-03 11:19:11

标签: linux time parallel-processing mpi

我想在linux中使用time命令观察我的MPI程序的性能。它仅显示程序的实际值,用户值和sys值。但是,我应该检查每个过程会发生什么。那么,有没有办法看到我的程序分别为每个进程花了多长时间?

1 个答案:

答案 0 :(得分:2)

如果您将time添加到mpiexec / 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

为了将所有等级的输出分开并确定哪个等级以及测量来自哪个等级,您可以在Open 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