MPI基础

  1. MPI 程序中一个独立参与通信的个体称为一个进程。一个 MPI 程序中由部分或者全部进程构成的一个有序集合称为一个进程组。进程组中 每个进程被赋予一个该组中的序号, 用于在该组张标识该进程,称为进程号, 进程号的取值范围从 0 开始.

  2. 通信器,也叫通信子,是用来进程间的通通信. MPI 的通信器有域内通信器,域外通信器,前者属于同一进程组的进程间通信,后者分属两个不同进程组间的通信。

特殊的 API 函数

通信器
MPI_COMM_WORLD 包含程序中所有进程
MPI_COMM_SELF 每个进程独自构成,仅包含自己的通信器
``


进程号是通信被创建时赋予的,`MPI` 系统提供了一个特殊的进程号, 

MPI_PROC_NULL 空进程不存在的进程,与 MPI_PORC_NULL 进行通信相当于一个空操作,对程序没有影响.

进程间的通信通过消息的收发或者同步操作完成,一个消息指在进程间进行的一次数据交换。一个消息由通信器、源地址、目的地址、消息标签和数据构成。

MPI 程序的基本结构

MPI C 预言接口中所有函数名均采用 MPI_Xxxx 的形式

MPI_Send
MPI_Type_commit
MPI_COMM_WORLD
MPI_INT
MPI_Finalize
MPI_Status
MPI_Datatype 

MPI 的 C 接口函数通常返回一个整数值,表示操作成功与否,返回值为 MPI_SUCCESS(0) 表示操作成功,否则表示操作的错误码.

一个 MPI 程序包含以下几个基本步骤

  1. 必须包含头文件 mpi.h
  2. MPI_Init 函数用于初始化 MPI 系统, 第一个进程通过 MPI_Init 来启动其他进程。注意要将命令行参数
    的地址 ( 指针 ) &argc&argv 传递给 MPI_Init
  3. MPI_Comm_sizeMPI_Comm_rank 通信器中进程额数目,本进程的进程号
  4. MPI_Finalize 函数用于退出 MPI 系统

MPI 的原始数据类型

MPI 系统中数据的发送与接收操作都必须指定数据类型。数据类型可以是 `MPI` 系统预定义的,称为 
原始数据类型,也可以是用户在原始数据类型的基础上自己定义的数据类型。

点到点通信

MPI 最基本的通信模式是在一对进程之间进行的消息收发操作:
一个进程发送消息,另一个进程接收消息。这种通信方式称为点对点通信


MPI 数据类型C 类型
MPI_INTint
MPI_FLOATfloat
MPI_DOUBLEdouble
MPI_SHORTshort
MPI_LONGlong
MPI_UNSIGNED_CHARunsigned char
MPI_CHARchar
MPI_UNSIGNED_SHORTunsigned short
MPI_UNSIGNEDunsigned
MPI_UNSIGNED_LONGunsigned long
MPI_LONG_DOUBLElong double
MPI_BYTEunsigned char
MPI_PACKED

MPI 点对点通信函数

  1. 阻塞型
  2. 非阻塞型

阻塞型函数需要等待指定操作的实际完成,或者至少所涉及的数据已被 MPI 系统安全的备份后才返回。

MPI_Send
MPI_Recv

MPI_Send 函数返回时表明数据已经发出或已被 MPI
系统复制,随后对发送缓冲区的修改不会影响所发送的数据。而
MPI_Recv 返回时, 则表明数据已经接收到并且可以立即使用。阻
塞型函数的操作是非局部的,它的完成可能需要与其他进程进行通
信。

非阻塞型函数调用总是立即返回
MPI_IsendMPI_Irecv
在调用了一个非阻塞型通信函数后,用户必须随后调用其他函数,如
MPI_WaitMPI_Test 等,来等待操作完成或查询操作的完成情况

  • 标准模式
  • 缓冲模式
  • 同步模式
  • 就绪模式

在这里插入图片描述
后续继续 …

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值