linux - 如何观察 MPI 程序所有进程的运行时间

标签 linux time parallel-processing mpi

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

最佳答案

如果您在前面加上 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

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

相关文章:

mysql - 检测日期是否在 MySql 中的夏令时

linux - SLURM 上的多线程

haskell - 为什么 Haskell 中没有隐式并行性?

linux - Nagios 中长时间运行的服务检查

c - 为什么我无法使用 msgrcv() 访问消息队列中的消息文本?

在 C 中将毫秒转换为秒

python - 如何在Python中管理任务队列并在多台计算机上并行运行这些任务?

c++ - 为什么我的任何 pthread 函数都不能被 g++ 或 clang 识别?

linux - 在 linux 上没有这样的文件或目录查找命令

python - 为什么两个相同长度的字符串之间的两次不同的相等测试花费不同的时间