本博客已迁往http://coredumper.cn
在运行MPI程序之前,首先用命令mpdtrace查看一下当前集群的运行状况,如果集群没有启动,需要用如下命令启动集群:
mpdboot -n 4 -f ~/mpd.hosts
我的集群是由node1、node2、node3、node4四台机器组成的。
对于如下MPI程序,编译后生成可执行文件test:
#include <stdio.h>
#include <mpi.h>
int main(int argc, char **argv)
{
int myid, numprocs;
char host[10];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
gethostname(host, 10);
printf("I am %d of %d at %s\n", myid, numprocs, host);
MPI_Finalize();
return 0;
}
如下是针对上述程序的配置文件pgfile:
-n 1 -host node1 ./test
-n 1 -host node2 ./test
-n 1 -host node1 ./test
-n 1 -host node4 ./test
-n 1 -host node3 ./test
-n 1 -host node3 ./test
mpiexec -configfile pgfile
运行结果如下:
I am 0 of 6 at node1
I am 3 of 6 at node4
I am 2 of 6 at node1
I am 5 of 6 at node3
I am 1 of 6 at node2
I am 4 of 6 at node3
需要注意的是:
配置文件中的每一行都指定产生一个进程,并且第一行产生0号进程,第二行产生1号进程,后面依次类推,如果想将某个进程绑定在某个节点上执行,就需要将主机名写在进程号所属的那一行。