并行程序设计基础——MPI通信模式

devtools/2024/9/23 20:05:40/

目录

一、标准通信模式

二、缓存通信模式

1、MPI_BUFFER_ATTACH

2、MPI_BUFFER_DETACH

三、同步通信模式

四、就绪通信模式

五、小结


        MPI是消息传递接口的简称,顾名思义,通信是MPI并行程序中的关键所在。MPI共有四种通信模式:标准通信模式(standard mode)、缓存通信模式(buffered mode)、同步通信模式(synchronous mode)、就绪通信模式(ready mode)。前面章节介绍的程序都属于标准通信模式。这几种通信模式对应于不同的通信需求,MPI为用户提供功能相近的不同通信方式。

        这四种通信模式主要是根据以下不同情况来区分的:

        1、是否需要对发送的数据进行缓存?

        2、是否只有当接收调用执行后才可以执行发送操作?

        3、何时发送调用可以正确返回?

        4、发送调用正确返回是否意味着发送已完成,即发送缓冲区是否可以被覆盖?

        针对这些情况,MPI给出不同的通信模式。

通信模式发送接收
标准通信模式MPI_SENDMPI_RECV
缓存通信模式MPI_BSEND
同步通信模式MPI_SSEND
就绪通信模式MPI_RSEND

        对于非标准的通信模式,只有发送操作,而没有相应的接收操作。MPI对不同的通信模式,在调用的命名上加以区别,标准通信模式不加特殊字母,而其它三种通信模式提供三个附加的发送函数,用一个字母前缀表示通信模式:B用于缓存通信模式,S用于同步通信模式,R用于就绪通信模式。接下来对其一一进行介绍。

一、标准通信模式

        对于标准通信模式,是否对发送的数据进行缓存是由MPI自身决定的,而不是由程序员控制的。如果MPI决定缓存将要发出的数据,发送操作不管接收操作是否执行,都可以进行,而且发送操作可以正确返回而不要求接收操作收到发送的数据。

        由于缓存数据需要代价,会延长数据通信时间,而且缓冲区也不并是总可以得到的,这样MPI也可以不缓存将要发送的数据,这样只有当相应的接收调用被执行后,并且发送数据完全到达接收缓冲区后,发送操作才算完成。对于非阻塞通信,发送操作虽然没有完成,但是发送调用可以正确返回,程序可以继续执行其它操作。

二、缓存通信模式

        如果需要直接对通信缓冲区进行控制,可采用缓存通信模式。在这种模式下,由用户直接对通信缓冲区进行申请、使用和释放,因此,缓存模式下对通信缓冲区的合理与正确使用是由程序员来保证的。

MPI_BSEND(buf, count, datatype, dest, tag, comm)
IN    buf       发送缓冲区的起始地址(可选数据类型)
IN    count     发送数据的个数(整型)
IN    datatype  发送数据的数据类型(句柄)
IN    dest      目标进程标识号(整型)
IN    tag       消息标志(整型)
IN    comm      通信域(句柄)//c语言的说明
int MPI_Bsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)
//Fortran语言的说明
MPI_BSEND(BUF, COUNT, DATATYPE, DEST,

http://www.ppmy.cn/devtools/96040.html

相关文章

django之select_related 与 prefetch_related用法

在 Django 中,select_related 和 prefetch_related 是用于优化查询的两个重要方法。它们通过减少数据库查询次数来提高性能,但它们的工作方式有所不同。 select_related select_related 使用 SQL 的 JOIN 操作来获取相关对象。它适用于一对一和多对一的…

[Meachines] [Medium] solidstate Apache JAMES RCE+POP3邮件泄露+定时任务权限提升

信息收集 IP AddressOpening Ports10.10.10.51TCP:22,25,80,110,119,4555 $ nmap -p- 10.10.10.51 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10deb9u…

C语言 | Leetcode C语言题解之第345题反转字符串中的元音字母

题目&#xff1a; 题解&#xff1a; char vowel[] "aeiouAEIOU";bool isVowel(char ch) {for (int i 0; vowel[i]; i) {if (vowel[i] ch) {return true;}}return false; };char* reverseVowels(char* s) {int n strlen(s);int i 0, j n - 1;while (i < j) …

【Docker】如何更简单的做一个dockerfile文件?

一&#xff0c;介绍 Dockerfile 是用来定义 Docker 镜像构建过程的文本文件。它包含了一系列的指令和参数&#xff0c;告诉 Docker 如何组装一个镜像。一个基本的 Dockerfile 通常包含以下几个部分&#xff1a; 1.基础镜像指令&#xff08;FROM&#xff09;&#xff1a; 指定…

MongoDB 在 Java 中的使用教程

目录 MongoDB 简介环境准备使用 Java 连接 MongoDB基本 CRUD 操作复杂查询操作索引和性能优化事务管理总结 1. MongoDB 简介 MongoDB 是一个基于分布式文件存储的 NoSQL 数据库系统。它以文档&#xff08;JSON 形式&#xff09;存储数据&#xff0c;具有高扩展性和灵活的数据…

免费的抓包软件wireshark以及简单使用

官网下载链接 https://www.wireshark.org/download.html 安装成功后直接打开即可使用 点击‘wan’即可使用 抓包信息可以在底部菜单栏查看 过滤之查看‘tcp’类型的&#xff0c;自行输入过滤

【问题解决3】【已解决】Cannot determine path to‘tools.jar‘libraryfor17

前几天在IDEA运行JAVA项目时&#xff0c;出现这个报错。 这是因为是这个笔记本上安装的IDEA版本是“IntelliJ IDEA 2020.3.1”&#xff0c;与JDK17版本不兼容&#xff0c;这种情况下要想使得IDEA版本与JDK版本兼容&#xff0c;就需要升级IDEA版本或者使用JDK较低版本&#xff…

只有IP如何实现https访问

IP也是访问网站的一种方式&#xff0c;现在有很多网站并未绑定域名&#xff0c;而是通过IP直接访问的。 但是域名访问网站的方式会更多一些&#xff0c;主要还是因为域名相较于IP数字要更加好记&#xff0c;所以域名绑定网站的情况会更多。 随着现在网络安全意识的逐渐提升&a…