OpenMPI:让每个进程写入stdout

时间:2018-03-06 02:24:06

标签: openmpi

由mpirun启动的子进程将其输出重定向到mpirun进程,因此所有输出都在一个节点上结束。

相反,我希望MPI生成的每个进程都在自己的节点上写入STDOUT,或者写入文件或命名管道。

我看了the faq并尝试了一些事情:

mpirun -host host1,host2 my_script >&1

只需将stdout从所有主机重定向到调用节点上的stdout(默认情况下)。做

mpirun -host host1,host2 my_script

my_script将输出重定向到>& 1只捕获调用节点上进程的输出。

有没有办法可以让每个节点写入本地文件系统(例如)而无需重定向到调用节点的mpirun进程?

感谢。

1 个答案:

答案 0 :(得分:1)

Open MPI有mpirun --host host1,host2 sh -c 'my_script > /tmp/log.$OMPI_COMM_WORLD_RANK' 选项,它非常接近但不完全符合您的要求。

我认为没有一种本土方式可以实现您的期望。

话虽如此,可以通过包装器轻松实现

例如,通过命令行

stdout

每个MPI任务都会将其/tmp/log.<id>重定向到fork_agent

另一种方法是使用mpirun --host host1,host2 --mca orte_fork_agent /.../wrapper my_script

my_script

基本上,而不是执行/.../wrapper my_script,Open MPI将执行OMPI_COMM_WORLD_SIZE并且有一点创造力,你必须编写的包装器可以做任何你需要的事情。 在此包装器中,您可能希望检查以下环境变量

  • OMPI_COMM_WORLD_RANK
  • OMPI_COMM_WORLD_LOCAL_SIZE
  • OMPI_COMM_WORLD_LOCAL_RANK
  • Flowable.generate