添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
首发于 Zima Blue

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);