【问题标题】:mpirun without options runs a program on one process only不带选项的 mpirun 仅在一个进程上运行程序
【发布时间】:2016-07-15 02:37:41
【问题描述】:

Here我读了

如果没有为要执行的副本数提供值(即, 命令行上未提供“-np”及其同义词), Open MPI 会自动在每个 进程槽(有关“进程槽”的描述,请参见下文)

所以我会期待

mpirun program

运行程序的八个副本(实际上是一个简单的 hello world),因为我有一个 Intel® Core™ i7-2630QM CPU @ 2.00GHz × 8,但它没有:它只运行一个进程。

【问题讨论】:

    标签: parallel-processing fortran mpi gfortran openmpi


    【解决方案1】:

    如果您不指定要使用的进程数,mpirun 会尝试从(指定或)默认主机文件中获取它们。来自corresponding section of the man page you linked

    如果主机文件不提供插槽信息,则假定默认值为 1。

    由于您没有修改此文件(我假设),mpirun 将只使用一个插槽。


    在我的机器上,默认主机文件位于

    /etc/openmpi-x86_64/openmpi-default-hostfile
    

    【讨论】:

    • 我机器上的这个文件只是cmets。我应该如何修改它?
    • @EnricoMariaDeAngelis 我从来没有碰过那个文件。如果我需要自定义主机文件,我会创建一个新主机文件。语法在链接文档中描述。
    【解决方案2】:

    i7-2630QM 是一个 4 核 CPU,每个核有两个硬件线程。对于计算密集型程序,最好启动四个 MPI 进程而不是八个。

    只需使用mpiexec -n 4 ...,因为您不需要主机文件来在执行mpiexec 的同一节点上启动进程。

    在远程节点上启动 MPI 进程时使用主机文件。如果您确实需要创建一个,则应执行以下操作:

    hostname slots=4 max_slots=8
    

    (将hostname替换为机器的主机名)

    运行程序

    mpiexec -hostfile name_of_hostfile ...
    

    max_slots=8 如果您的 MPI 程序可以使用超线程,则允许您使用最多 8 个 MPI 进程超额订阅节点。您还可以将环境变量 OMPI_MCA_orte_default_hostfile 设置为主机文件的完整路径,而不是每次都将其作为参数显式传递给 mpiexec

    如果您碰巧使用了 Torque、LSF、SGE 等分布式资源管理器,那么,如果编译正确,Open MPI 会与环境集成,并自动从预留中构建主机和插槽列表。

    【讨论】:

    • 那么有没有办法让mpirun program 运行与核心(或线程)数量一样多的进程?这对我来说听起来很奇怪,因为在我也使用(2 x 3,2 GHz 四核 Intel Xeon)的 Mac 上,如果我不指定 -np 选项,则会运行 8 个进程。区别在哪里?
    • 这取决于 MPI 实现以及任何全局或本地设置。也许该 Mac 系统上的 MPI 库是专门配置的,或者它安装了不同的 MPI 实现。使用 Open MPI,您可以创建自己的默认主机文件并将环境变量 OMPI_MCA_orte_default_hostfile 设置为该文件的完整路径。
    猜你喜欢
    • 2014-02-06
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多