【问题标题】:OpenMPI: have each process write to stdoutOpenMPI:让每个进程写入标准输出
【发布时间】:2018-03-06 02:24:06
【问题描述】:

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

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

我阅读了the faq 并尝试了一些东西:

mpirun -host host1,host2 my_script >&1

只需将所有主机的标准输出重定向到调用节点上的标准输出(如默认)。正在做

mpirun -host host1,host2 my_script

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

有没有一种方法可以让每个节点写入它们的本地文件系统(例如)而不重定向到调用节点的 mpirun 进程?

谢谢。

【问题讨论】:

    标签: openmpi


    【解决方案1】:

    Open MPI 有 --output-file 选项,它非常接近,但并不完全符合您的要求。

    我认为没有本地方法可以实现您的期望。

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

    例如,通过命令行

    mpirun --host host1,host2 sh -c 'my_script > /tmp/log.$OMPI_COMM_WORLD_RANK'
    

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

    另一种方法是使用fork_agent

    mpirun --host host1,host2 --mca orte_fork_agent /.../wrapper my_script
    

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

    • OMPI_COMM_WORLD_SIZE
    • OMPI_COMM_WORLD_RANK
    • OMPI_COMM_WORLD_LOCAL_SIZE
    • OMPI_COMM_WORLD_LOCAL_RANK

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多