代码之家  ›  专栏  ›  技术社区  ›  Andre

OpenMPI:让每个进程写入标准输出

  •  2
  • Andre  · 技术社区  · 8 年前

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

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

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

    mpirun -host host1,host2 my_script >&1

    只需将所有主机上的stdout重定向到调用节点上的stdout(与默认值类似)。正在执行

    mpirun -host host1,host2 my_script

    其中my\u脚本将输出重定向到>&1只捕获调用节点上进程的输出。

    是否有一种方法可以让每个节点写入其本地文件系统(例如),而无需重定向到调用节点的mpirun进程?

    谢谢

    1 回复  |  直到 8 年前
        1
  •  3
  •   Gilles Gouaillardet    8 年前

    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
    

    基本上,不是执行 my_script ,打开MPI将执行 /.../wrapper my_script 凭借一点创造力,你必须编写的包装器可以做你需要的任何事情。 在这个包装器中,您可能需要检查以下环境变量

    • OMPI_COMM_WORLD_SIZE
    • OMPI_COMM_WORLD_RANK
    • OMPI_COMM_WORLD_LOCAL_SIZE
    • OMPI_COMM_WORLD_LOCAL_RANK
    推荐文章