mpirun使用手册

1. 前言

mpirun是openmpi的命令行工具,它提供了一种简单的方式来并行启动应用程序,但是必须依赖openmpi环境。它允许在多个节点上同时启动多个并行应用程序,每个应用程序都是以进程的方式运行,而不是线程。另外,mpirun和mpiexec是同一个工具,用法相同。

 
 

2. 语法

一个应用程序

mpirun [mpirun参数] [应用程序]

多个应用程序

mpirun [mpirun全局参数] 
       [mpirun局部参数] [应用程序1] :
       [mpirun局部参数] [应用程序2] :
       [mpirun局部参数] [应用程序3]

其中[应用程序1]后面必须是空格 + :

常见的用法

mpirun [ -n X ] [ --hostfile <filename> ]  <program>
或者
mpirun [ --host hostname:X ] [ --map-by ppr:X:node ] <program>

上述X表示进程数,即启动多少个进程。

 
 

3. 参数

下面将以一个完整例子对mpirun的相关参数进行解释:

mpirun \
--allow-run-as-root \
-x LD_PRELOAD=/usr/lib64/libpil4dfs.so \
--host nodeb:32 \
--bind-to hwthread \
--map-by ppr:32:node \
ior --dataPacketType=timestamp -C -Q 1 -g -G=695406083 -F -k -e -o /mnt/testfs/test -t 4k -b 4k -s 262144 -w -D 300 -T 120 -a POSIX

上述采用指定host的方式而不是hostfile的方式,用mpirun在nodeb节点上启动32个进程,每个进程都运行一个ior程序。以下是参数解释:

  • --allow-run-as-root:允许以root用户身份运行mpirun。
  • -x LD_PRELOAD=/usr/lib64/libpil4dfs.so:设置环境变量LD_PRELOAD的值为/usr/lib64/libpil4dfs.so。
  • --host nodeb:32:指定运行节点为nodeb,进程数为32。
  • --bind-to hwthread:将进程绑定到硬件线程上。默认是bind-to core:与core进行绑定。当应用程序中启动了多线程,需要指定--bind-to none
  • --map-by ppr:32:node:将进程分布到节点上,每个节点上运行32个进程。默认是map-by core:按节点先后顺序以轮询的方式分布到core上。当第一个节点的core的slots数量不够时,会自动将进程分布到下一个节点上。

其中要着重说明--host--hostfile在使用上的区别:

  • 当使用--host参数指定mpirun要在哪些节点上启动应用程序时,一定要按照--host hostname1:X,hostname2:X...的格式来指定,其中X表示每个节点上总的slots数量。当要指定每个节点实际要启动的进程数量时,要使用--map-by ppr:Y:node方式。其中XY的关系是:Y <= X。
  • 当使用--hostfile参数指定mpirun要在哪些节点上启动应用程序时,需要创建一个hostfile文件,文件内容按照hostname slots=X的格式来指定。其中slots表示每个节点上总的slots数量。当要指定每个节点实际要启动的进程数量时,可以使用-n Y方式。其中XY的关系是:Y <= X。(官方文档说 -n Y这种方式已经被抛弃了,推荐使用--map-by ppr:Y:node的方式)。

 
 

4. 实例

在3个节点上分别并行启动32个ior进程。
host方式

mpirun \
--allow-run-as-root \
--host nodea:32,nodeb:32,nodec:32 \
--bind-to hwthread \
--map-by ppr:32:node \
ior --dataPacketType=timestamp -C -Q 1 -g -G=695406083 -F -k -e -o /mnt/testfs/test -t 4k -b 4k -s 262144 -w -D 300 -T 120 -a POSIX

hostfile方式

mpirun \
--allow-run-as-root \
--hostfile hostfile \
--bind-to hwthread \
--map-by ppr:32:node \
ior --dataPacketType=timestamp -C -Q 1 -g -G=695406083 -F -k -e -o /mnt/testfs/test -t 4k -b 4k -s 262144 -w -D 300 -T 120 -a POSIX

hostfile文件内容:

nodea slots=32
nodeb slots=32
nodec slots=32

 
 

5. 参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值