首页 > 学院 > 开发设计 > 正文

MPI学习(1)MPI基础及简单的MPI示例

2019-11-08 01:41:17
字体:
来源:转载
供稿:网友

什么是MPI

MPI(Message Passing Interface)是消息传递函数库的标准规范,支持C和Fortran,由众多并行计算机厂商、软件开发组织及并行应用单位共同维护的标准。

MPI是一种标准或规范,不是特指某一个对它的具体实现。MPI是一种消息传递编程模型,并成为此模型的代表和事实上的标准,服务于进程通信MPI是一种库描述,不是一种语言由Fotran+MPI或C+MPI组成,有上百个函数调用接口,可直接调用

MPI程序的一些惯例——C 语言

必须包含头文件"mpi.h"MPI函数返回出错代码或MPI_SUCCESS成功标志前缀为MPI_,前缀后第一个字母大写,其余字母全小写,区分大小写

MPI六大常用函数

1. 并行初始化

MPI_Init (int *argc,char ***argv)

2. 获取进程总数

MPI_Comm_size (MPI_Comm comm,int *size)

3. 获取当前进程号

MPI_Comm_rank (MPI_Comm comm,int *rank)

4. 发送消息

MPI_Send (void *buf,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm)

5. 接收消息

MPI_Recv (void *buf,int count,MPI_Datatype datatype,int source,int tag,MPI_Comm,MPI_Status *status)

6. 并行结束

MPI_Finalize()

简单的发送和接收示例

#include "mpi.h"#include <stdio.h>#include <string.h>void main(int argc,char* argv[]){    int myid;    char message[20];    MPI_Status status;    MPI_Init(&argc,&argv);    MPI_Comm_rank(MPI_COMM_WORLD,&myid);    if(myid == 0)    {        strcpy(message,"Hello PRocess 1");        MPI_Send(message,strlen(message),MPI_CHAR,1,99,MPI_COMM_WORLD);    }    else if(myid == 1)    {        MPI_Recv(message,20,MPI_CHAR,0,99,MPI_COMM_WORLD,&status);        printf("Received:%s/n",message);    }    MPI_Finalize();}

执行结果:

[root@node1 mpi]# mpirun -np 2 ./test-6-1Received:Hello process 1
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表