MPI基本函数
MPI 编程规范
-
所有的常量,变量和函数以MPI_开始编写
-
MPI的C接口是一个函数(值传递)
-
除下划线外,所有常量均以大写字母定义
-
功能和数据类型的定义,
MPI_后跟的第一个字母为大写,其余为小写,形式为MPI_Xxxx_XXx -
MPI程序从MPI_Init开始
-
MPI程序以MPI_Finalize结尾
(分别初始化和终止MPI) -
除MPI Wtime和MPI Wtick之外的所有函数调用都返回一个错误信息代码
-
由于 C 语言的函数调用机制是值传递,所以 MPI 的所有 C 函数中的输出参数用的都是指针
基本的MPI程序
#include "mpi.h"
int main (int argc,char **argv)
{
int rank,size,tag=1;//进程号,进程个数,进程标记
int senddate,recvdata;//发送数据,接受数据
MPI_Status status;//通信状态
MPI_Init(&argc,&argv);//MPI 初始化
MPI_Comm_rank(MPI_COMM_WORLD,&rank);//进程的编号
MPI_Comm_size(MPI_COMM_WORLD,&size)//进程数
if(rank==0){
senddata=9999;
MPI_Send(&senddata,1,MPI_INT,1,tag,MPI_COMM_WORLD);
//发送地址 ,发送数据类型 ,发送标志,哪个范围内发送
}
if(rank==1){
MPI_Recv(&recvdata,1,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
}
MPI_Finalize();
return 0;
}
MPI_Init
- 告诉系统进行初始化操作该函数初始化 MPI并行程序的执行环境。例如,系统可能需要为消息缓冲区分配存储空间,为进程指定进程号等。
- 它必须在调用所有其它MPI函数之前被调用(除MPI_INITIALIZED)
- 在一个MPI程序中,只能被调用一次
#返回一个int型错误码(大部分时候忽略)
int MPI_Init(
#指向argc的指针,不使用设置为NULL
int * argc_p /*in/out*/,
#指向argv的指针,不使用设置为NULL
char *** argv_p /*in/out*/ )
MPI_Finalize
int MPI_Finalize(void)
该函数清除 MPI环境的所有状态
它被调用后,所有MPI 函数都不能再调用,包括 MPI_INIT
标志并行代码的结束,结束除主进程外其它进程。
之后串行代码仍可在主进程(rank = 0)上运行(如果必须).
communicator(通信器/通信子)
a collection of processes that can send messages to each other
(一组可以互相发送消息的进程集合)
MPI 程序启动时自动建立两个通信器:
MPI_COMM_WORLD :包含程序中所有MPI进程
MPI_COMM_SELF:由单个进程独自构成,仅包含自己
进程号是在通信器被创建时赋予的,相对通信器而言;
同一进程在不同的通信器中可以有不同的进程号;
MPI_Comm_rank
- 作用:获得进程号(我是在哪一个进程)
Get the number of the current process in the specified communication domain
(获取指定通信域中当前进程的编号)
used to distinguish itself from other programs
(用于区别其他程序)
它的函数形式:
int MPI_Comm_rank(MPI_Comm_comm(自定的群), int * rank )
进程号与通信器相关
MPI_Comm_size
解决问题:任务由多少个进程来进行并行计算
获得特定通信器的进程个数p
函数格式:
int MPI_Comm_size(
MPI_Comm_comm /*in*/,
int* size /*out*/);
MPI_Send
mpi send(buf,counter,datatype,dest,tag,comm):
buf:发送缓冲区的起始地址,可以是数组或结构指针;
count:非负整数,发送的数据个数;
datatype:发送数据的数据类型;
dest:整型,目的的进程号;
tag:整型,消息标志;//用来表示不同的需求
comm:MPI进程组所在的通信域


MPI_Recv

本文详细介绍了MPI的基本函数和编程规范,包括MPI_Init和MPI_Finalize的使用,通信器的概念及其相关函数如MPI_Comm_rank和MPI_Comm_size,以及数据发送接收函数MPI_Send和MPI_Recv的参数解析。
2056

被折叠的 条评论
为什么被折叠?



