如果没有提供值的份数执行运行的程序(即,被设置在 既不是“-np”,也不是它的同义词命令行), 打开MPI将自动执行该程序的每个 处理槽的副本(参见下面的“处理缝隙”)的描述
因此,我期望
mpirun program
运行八个程序副本(实际上是一个简单的Hello World),因为我有一个英特尔®酷睿™i7-2630QM CPU @ 2.00GHz×8,但它不:它只是运行一个进程。
如果没有提供值的份数执行运行的程序(即,被设置在 既不是“-np”,也不是它的同义词命令行), 打开MPI将自动执行该程序的每个 处理槽的副本(参见下面的“处理缝隙”)的描述
因此,我期望
mpirun program
运行八个程序副本(实际上是一个简单的Hello World),因为我有一个英特尔®酷睿™i7-2630QM CPU @ 2.00GHz×8,但它不:它只是运行一个进程。
如果您未指定要使用的进程数,mpirun
会尝试从(指定的或)默认主机文件获取它们。从corresponding section of the man page you linked:
如果hostfile不提供插槽信息,则默认为1。
由于您没有修改此文件(我假设),mpirun
将只使用一个插槽。
在我的机器,默认主机文件位于
/etc/openmpi-x86_64/openmpi-default-hostfile
睿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'像核心(或线程)的数字一样运行尽可能多的进程?这听起来很奇怪,因为在mac上我也使用了(2 x 3.2 GHz四核Intel Xeon),如果我没有指定'-np'选项,则会运行8个进程。区别在哪里? –
它取决于MPI实施以及任何全局或本地设置。也许该Mac系统上的MPI库是专门配置的,或者安装了不同的MPI实现。使用Open MPI,您可以创建自己的默认主机文件,并将环境变量“OMPI_MCA_orte_default_hostfile”设置为该文件的完整路径。 –
我的机器上的这个文件只是评论。我应该如何修改它? –
@EnricoMariaDeAngelis我从来没有碰过那个文件。如果我需要一个自定义的主机文件,我创建一个新的。语法在链接的文档中进行了描述。 –