Ubuntu-MPI
MPI简介
在程序中,不同的进程需要相互的数据交换,特别是在科学计算中,需要大规模的计算与数据交换,集群可以很好解决单节点计算力不足的问题,但在集群中大规模的数据交换是很耗费时间的,因此需要一种在多节点的情况下能快速进行数据交流的标准,这就是MPI。
MPI是一组用于多节点数据通信的标准,而非一种语言或者接口。具体的使用方法需要依赖它的具体实现(mpich or openmpi等)。
在编译与运行时,mpi目前绑定的语言只有FORTRAN 和 C/C++。
c编译: mpicc -o mpiProgram mpiProgram.c
c++编译:mpicxx -o mpiProgram mpiProgram.cpp
FORTRAN编译:mpif77 -o mpiProgram mpiProgram.f
运行可使用mpirun或mpiexec:
mpirun/mpiexec -np 2 mpiProgram
MPI安装
sudo apt-get install libopenmpi-dev #也可简化为:apt install libopenmpi-dev,后文同理
sudo apt-get install openmpi-bin
安装后MPI的位置:
parallels@parallels-Parallels-Virtual-Platform:/$ whereis openmpi
openmpi:
/usr/lib/x86_64-linux-gnu/openmpi
/etc/openmpi
/usr/share/openmpi
MPI命令测试
运行如下指令,若能打印出路径则成功:
which mpicc
which mpiexec
which mpirun
MPI测试例子
step1: 建立测试文件hellow.c
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv){
//初始化MPI环境
MPI_Init(NULL, NULL);
//获取进程数
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
//获取进程的等级
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
//获取进程的名字
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
//打印helloworld
printf("Hello world from processor %s, rank %d out of %d processors\n",processor_name, world_rank, world_size);