我想在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 的计时。包装器脚本必须针对其他实现进行调整。请参阅here .
关于linux - 如何观察 MPI 程序所有进程的运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33497814/