mpi介绍

mpi

mpi (message passing interface) 消息传递接口。mpi是一个为并行计算设计的通信协议。支持点对点和广播。MPI是一个信息传递应用程序接口,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性。MPI的目标是高性能,大规模性,和可移植性。MPI在今天仍为高性能计算的主要模型。与OpenMP并行程序不同,MPI是一种基于信息传递的并行编程技术。消息传递接口是一种编程接口标准,而不是一种具体的编程语言。简而言之,MPI标准定义了一组具有可移植性的编程接口。在当前的并行机上,比较流行的并行编程环境,可以分为三类:消息传递共享存储,和数据并行。与这三类对应的典型代表分别为:(MPI,PVM),OpenMP,和HPF(High Performance Fortran)。相比其他的并行编程环境,MPI具有很多优点,具有很好的可移植性,很好的扩展性,比其他消息传递系统好用,有完备的异步通信功能,有精确的定义。(参考:莫则尧, 袁国兴. 消息传递并行编程环境 MPI[M]. 科学出版社, 2001…pdf)

编译器封装
mpicc, mpif90, mpic++ 都是对现有的编译器进行封装,使用MPI进行代码编译。
在这里插入图片描述

编译器介绍
GCC现在为(GNU compiler Collection) 包括 C, C++, Objective-C, Fortran, Ada, Go, and D, as well as libraries for these languages (libstdc++,…).

在这里插入图片描述

mpi编程

mpi编程可以用下面的图片进行展示,大致可以包括四部分:MPI包含文件,初始化MPI环境,并行代码(work),结束MPI环境。
在这里插入图片描述
下面创建一个mpi编程的例子:

#include "mpi.h" 
#include <stdio.h>
int main(int argc, char *argv[]) {
int numtasks, rank, len, rc;
char hostname[MPI_MAX_PROCESSOR_NAME];
rc = MPI_Init(&argc,&argv); 
if (rc != MPI_SUCCESS) {
printf ("Error starting MPI program. Terminating.\n");
 MPI_Abort(MPI_COMM_WORLD, rc);
}
MPI_Comm_size(MPI_COMM_WORLD,&numtasks); 
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
 MPI_Get_processor_name(hostname, &len);
printf ("Number of tasks= %d My rank= %d
Running on %s\n", numtasks,rank,hostname); 
/******* do some work *******/
MPI_Finalize(); }

可以使用下面的代码进行编译和运行,
编译:

#使用c编译器
mpicc -o mpiprog mpisrc.c
#使用Fortran 77编译器
mpif77 -o mpiprog mpisrc.f90

编译好之后,生成了mpiprog文件,可以使用下面的命令运行:

mpirun -np 4 ./mpiprog
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值