Io MPI-抑制某些处理器的输出

Io MPI-抑制某些处理器的输出,io,mpi,Io,Mpi,有没有办法让MPI只打印一个(或一个子集)进程的输出?我知道如何在代码级别上做到这一点,但我想知道是否有某种方法可以在编译完可执行文件后指定这一点。我正在考虑在以下命令的一个窗口中获取输出 mpirun -np [#processes] xterm -e [path to executable] 只是不使用xterm 我知道我可以使用-tagoutput选项标记输出,然后手动过滤,但这有点乏味。由于MPI确切地知道输出来自何处,没有更简单的方法来实现这一目标吗?您可以编写一个包装器脚本。由于

有没有办法让MPI只打印一个(或一个子集)进程的输出?我知道如何在代码级别上做到这一点,但我想知道是否有某种方法可以在编译完可执行文件后指定这一点。我正在考虑在以下命令的一个窗口中获取输出

mpirun -np [#processes]  xterm -e [path to executable]
只是不使用xterm


我知道我可以使用-tagoutput选项标记输出,然后手动过滤,但这有点乏味。由于MPI确切地知道输出来自何处,没有更简单的方法来实现这一目标吗?

您可以编写一个包装器脚本。由于开放式MPI使
MPI\u COMM\u WORLD
中的进程级别在名为
OMPI\u COMM\u WORLD\u rank
的环境变量中可用,因此很容易执行以下操作:

#/bin/bash
取消静音=1美元
班次1
如果[“$OMPI_COMM_WORLD_RANK”=“$UNMUTE”];然后
执行官$*
其他的
exec$*>/dev/null 2>&1
fi
将其保存到
unmute.sh
,并按如下方式执行:

$ mpiexec -n #procs unmute.sh #rank executable [params]
脚本将所有列组(指定列组除外)的标准输出和错误流重定向到
/dev/null
。您可以使比较逻辑更加详细,例如,与范围或列组列表进行比较

以下是上述脚本的示例:

$ mpiexec -n 6 printenv | grep COMM_WORLD_RANK
OMPI_COMM_WORLD_RANK=0
OMPI_COMM_WORLD_RANK=1
OMPI_COMM_WORLD_RANK=2
OMPI_COMM_WORLD_RANK=3
OMPI_COMM_WORLD_RANK=4
OMPI_COMM_WORLD_RANK=5
$ mpiexec -n 6 unmute.sh 3 printenv | grep COMM_WORLD_RANK
OMPI_COMM_WORLD_RANK=3

MPI标准(其中任何一个)中都没有帮助您的内容。您的MPI实现可能会提供这样一个功能,尽管(a)您还没有告诉我们您使用的是什么实现,以及(b)我会惊讶地发现任何实现都有这个功能。这很不幸——要求这样做是否很奇怪?我正在使用OpenMPI 1.4.3。无论如何,谢谢你的评论;至少我知道我可以停止寻找它。谢谢你,完美,这正是我想要的。