我想在linux中使用time命令观察我的MPI程序的性能。它仅显示程序的实际值,用户值和sys值。但是,我应该检查每个过程会发生什么。那么,有没有办法看到我的程序分别为每个进程花了多长时间?
答案 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.0
,timing.1
和timing.2
,其中包含排名0,1和2的时间。包装脚本包含适用于其他实施。请参阅here。