我想在linux中使用time命令观察我的MPI程序的性能,它只显示程序的实际值、用户值和系统值。它只显示程序的实际值、用户值和系统值。但是,我应该检查每个进程的情况。那么,有什么方法可以看到我的程序在每个进程上分别花费了多长时间?
如果你在前面加上 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>:
. 你也可以写一个名为 mpitime.sh
该电话 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级的时间。包装脚本必须适应其他实现。参见 此处.