, world_rank, world_size);
MPI_Finalize();
这是一个简单的MPI程序,它在每个MPI进程中打印“Hello from rank x of y”信息,其中x是进程的排名,y是进程的总数。
保存并退出文件编辑器,然后编译示例程序:
mpicc -o hello hello.c
mpirun -np 4 ./hello
这将启动4个MPI进程,并在每个进程中运行示例程序。如果MPI正确安装并可以正常运行,则在终端中应该看到类似以下的输出:
Hello from rank 0 of 4
Hello from rank 1 of 4
Hello from rank 2 of 4
Hello from rank 3 of 4
如果MPI没有正确安装或配置,则可能会看到错误消息,例如无法启动进程或无法连接到进程。
2.源码安装
2.1.下载
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.5.tar.gz
tar -xzvf openmpi-4.1.5.tar.gz
2.2.安装
cd openmpi-4.1.5
mkdir build
cd build
../configure --prefix=/usr/local/openmpi
make install
2.3.配置环境变量
MPI_HOME=/usr/local/openmpi
export PATH=${MPI_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${MPI_HOME}/lib:$LD_LIBRARY_PATH
export MANPATH=${MPI_HOME}/share/man:$MANPATH
2.4.运行例子
cd ../examples
mpirun --allow-run-as-root -np 4 hello_c
# 如果不是root用户
# mpirun -np 4 hello_c
Hello, world, I am 2 of 4, (Open MPI v4.1.5, package: Open MPI root@k8s-node05 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 0 of 4, (Open MPI v4.1.5, package: Open MPI root@k8s-node05 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 1 of 4, (Open MPI v4.1.5, package: Open MPI root@k8s-node05 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 3 of 4, (Open MPI v4.1.5, package: Open MPI root@k8s-node05 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
3. 集群环境运行
下面命令在k8s-node01,k8s-node02,k8s-node03三个节点上分别会启动一个MPI进程
k8s-node01,k8s-node02,k8s-node03三个节点要设置ssh免密登录
三个节点都有/root/mpi/openmpi-4.1.5/examples/hello_c程序,可通过scp命令复制
要使用`which mpirun`全路径,使用mpirun会报错说找不到命令
# `which mpirun` --allow-run-as-root -host k8s-node01,k8s-node02,k8s-node03 /root/mpi/openmpi-4.1.5/examples/hello_c
Hello, world, I am 2 of 3, (Open MPI v4.1.5, package: Open MPI root@k8s-node03 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 1 of 3, (Open MPI v4.1.5, package: Open MPI root@k8s-node02 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 0 of 3, (Open MPI v4.1.5, package: Open MPI root@k8s-node01 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
还可以使用配置文件来设置集群的节点
# `which mpirun` --allow-run-as-root -np 12 --hostfile hosts /root/mpi/openmpi-4.1.5/examples/hello_c
Hello, world, I am 1 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-master Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 0 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-master Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 8 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-node04 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 9 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-node04 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 11 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-node05 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 10 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-node05 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 6 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-node03 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 7 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-node03 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 4 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-node02 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 2 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-node01 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 5 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-node02 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
Hello, world, I am 3 of 12, (Open MPI v4.1.5, package: Open MPI root@k8s-node01 Distribution, ident: 4.1.5, repo rev: v4.1.5, Feb 23, 2023, 110)
其中hosts文件的内容是
# cat hosts
k8s-master slots=2
k8s-node01 slots=2
k8s-node02 slots=2
k8s-node03 slots=2
k8s-node04 slots=2
k8s-node05 slots=2