没有选项的mpirun仅在一个进程上运行程序

时间:2016-03-27 20:14:35

标签: parallel-processing fortran mpi gfortran openmpi

Here我读了

  

如果没有提供要执行的副本数量的值(即,   命令行上既没有提供“-np”也没有它的同义词,   Open MPI会自动执行每个程序的副本   进程槽(见下面有关“进程槽”的描述)

所以我希望

mpirun program

运行该程序的八个副本(实际上是一个简单的hello世界),因为我有一个英特尔®酷睿™i7-2630QM CPU @ 2.00GHz×8,但它没有:它只运行一个进程。 / p>

2 个答案:

答案 0 :(得分:6)

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

  

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

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

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

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

答案 1 :(得分:1)

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

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

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

hostname slots=4 max_slots=8

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

运行程序
mpiexec -hostfile name_of_hostfile ...
如果您的MPI程序可以使用超线程,

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

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