MPI4.1文档2:MPI术语与MPI操作过程

第2章 MPI术语与约定 MPI Terms and Conventions

这一章节解释了MPI文档中使用的符号术语和惯例,以及其中所做的一些选择和背后的原因。

2.1 文档符号表示 Document Notation

Rational. 在整个文档中,对界面规范中所做设计选择的理由以这个格式(首尾包裹)进行标注。某些读者可能希望跳过这些部分,而对界面设计感兴趣的读者可能会仔细阅读它们。(End of advice to Rational.)

Rationale. (End of rationale.)

Advice to users. 在整个文档中,针对用户并且展示用法的材料以这个格式(首尾包裹)进行标注。某些读者可能希望跳过这些部分,而对MPI编程感兴趣的读者可能会仔细阅读它们。(End of advice to users.)

Advice to users. (End of advice to users.)

Advice to implementors. 在整个文档中,主要针对实现者的评论性材料以这个格式(首尾包裹)进行标注。某些读者可能希望跳过这些部分,而对MPI实现感兴趣的读者可能会仔细阅读它们。(End of advice to implementors.)

Advice to implementors. (End of advice to implementors.)

2.2 命名约定

在许多情况下,C函数的MPI名称的形式为MPI_Class_action_subset。这种约定起源于MPI-1。从MPI-2开始,尝试根据以下规则对MPI函数的名称进行标准化。

  1. 在C和Fortran的mpi_f08模块中,与特定类型的MPI对象相关联的所有例程应该采用MPI_Class_action_subset的形式,如果不存在子集,则采用MPI_Class_action的形式。在Fortran的mpi模块和(已弃用的)mpif.h文件中,与特定类型的MPI对象相关联的所有例程应该采用MPI_CLASS_ACTION_SUBSET的形式,如果不存在子集,则采用MPI_CLASS_ACTION的形式。
  2. 如果例程与类无关,则名称应采用MPI_Action_subsetMPI_ACTION_SUBSET的形式,在C和Fortran中均适用。
  3. 某些动作的名称已经标准化。特别地,create表示创建一个新对象,get表示获取关于对象的信息,set表示设置这些信息,delete表示删除信息,is表示询问对象是否具有某种属性。

MPI-1过程中定义的一些MPI函数的C和Fortran名称在几种情况下违反了这些规则。最常见的例外是省略了例程中的Class名称,以及在可以推断出的情况下省略了Action。

2.3 程序规范

MPI 程序使用一种与语言无关的符号表示法进行规范,过程调用的参数被标记为 IN、OUT 或 INOUT。它们的含义如下:

IN:程序调用可以使用输入值,但在调用执行期间不会从调用者的角度更新参数,

OUT:程序调用可以更新参数,但不使用其输入值,

INOUT:程序调用可以同时使用和更新参数。

特殊情况是,如果参数是一个不透明对象的句柄(这些术语在第2.5.1节中有定义),并且该对象在过程调用中被更新,则该参数标记为INOUT或OUT。即使句柄本身没有被修改,我们也使用INOUT或OUT属性来表示句柄所引用的内容被更新了。

Rationale. MPI的定义尽可能避免使用INOUT参数,因为这种使用方式容易出错,特别是对于标量参数而言。 (End of rationale.)

MPI对IN、OUT和INOUT的使用旨在告知用户如何使用参数,但并没有提供一个严格的分类,可以直接转换为所有语言绑定(例如,Fortran 90绑定中的INTENT或C绑定中的const)。例如,“常量”MPI_BOTTOM通常可以传递给OUT缓冲区参数。类似地,MPI_STATUS_IGNORE可以作为OUT状态参数传递。

MPI函数中常见的一种情况是一个参数在某些进程中用作IN,在其他进程中用作OUT。这样的参数在语法上是一个INOUT参数,并被标记为这样,尽管在语义上,在单个进程中它不会在一次调用中同时用于输入和输出。

另一个常见情况是当某些进程只需要某个参数值时,当参数在某个进程中不重要时,可以传递任意值作为参数。

除非另有说明,类型为OUT或INOUT的参数不能与传递给MPI过程的任何其他参数别名。下面是一个C中参数别名的示例。如果我们定义一个C过程如下所示,

void copyIntBuffer ( int *pin, int *pout, int len)
{		int i;
		for (i=0; i<len; ++i) *pout++ = *pin++;
}

以下代码片段中对它的调用存在参数别名。

int a [10];
copyIntBuffer (a, a+3, 7);

C语言允许这样使用,但MPI过程的这种用法是禁止的,除非另有规定。请注意,Fortran禁止参数的别名使用。 所有MPI函数首先以与语言无关的符号表示进行规定。紧随其后是语言相关的绑定:

  • ISO C版本的函数。
  • 与USE mpi_f08一起使用的Fortran版本。
  • 使用USE mpi或(已弃用的)INCLUDE 'mpif.h’的相同函数的Fortran版本。

一些MPI过程为特定语言支持提供了两个接口;参见第2.5.6节和第2.5.8节。

一个例外是第15.3节“MPI工具信息接口”,该节仅提供ISO C接口。

此文档中的“Fortran”指的是Fortran 90或更高版本;请参阅第2.6节。

在本标准中,词语“函数function”、“例程routine”、“过程procedure”、“过程调用procedure call”和“调用call”通常被用作同义词。

2.4 Semantic Terms

在讨论MPI过程时,使用以下语义术语。术语"message data buffer"指的是通信过程中使用的发送/接收缓冲区。术语"file data buffer"指的是MPI I/O过程中使用的数据缓冲区。在本节中,我们使用术语"data buffer",具体指的是消息数据缓冲区还是文件数据缓冲区取决于MPI过程。附录A.2显示了本节中定义的术语如何适用于所有与操作相关的MPI过程。

2.4.1 MPI操作

MPI操作:MPI操作是由MPI库执行的一系列步骤,用于建立和启用数据传输和/或同步。它包括四个阶段:初始化、启动、完成和释放,并且实现为一组一个或多个MPI过程,详见第2.4.2节。

  • 初始化initialization:将参数列表传递给操作,但不传递数据缓冲区的内容(如果有)。操作的规范可能规定,在操作被释放之前,数组参数不得更改。
  • 启动Starting:将数据缓冲区(如果有)的控制权交给关联的操作。请注意,启动initiation指的是初始化initialization和启动starting阶段的组合。
  • 完成:返回数据缓冲区的内容的控制权,并指示已更新输出缓冲区和参数(如果有)。 请注意,当实现完成阶段的MPI过程返回时,MPI操作已完成。
  • 释放:返回剩余参数列表的控制权(例如,数据缓冲区地址和数组参数)。

在这里插入图片描述

图 2.1: 阻塞操作的状态转移示意图

在这里插入图片描述

图 2.2: 非阻塞操作的状态转移示意图

在这里插入图片描述

图 2.3: 持久化(persistent)操作的状态转移示意图

MPI操作可以以阻塞、非阻塞和持久化的形式之一或多个形式提供。

  • 阻塞操作:对于阻塞操作,所有四个阶段都在单个过程调用中组合(如图2.1所示,并在第2.4.2节中定义)。

  • 非阻塞操作:对于非阻塞操作,初始化和启动阶段合并为单个非阻塞过程调用,完成和释放阶段合并为单独的、单个过程调用,可以是阻塞的也可以是非阻塞的(如图2.2所示,并在第2.4.2节中定义)。

  • 持久化操作:对于持久化操作,每个阶段都有单独的过程(如图2.3所示,并在第2.4.2节中定义)。每个过程可以是阻塞的也可以是非阻塞的。

    对于分区发送操作,需要额外调用每个分区的发送缓冲区以完成启动阶段(参见第4.2.1节)。对于分区接收操作,在操作完成之前,用户可以在验证已经到达后访问输出缓冲区的分区(参见第4.2.2节)。

这四个阶段导致了操作状态的初始化、启动、完成和释放。启动的(started)操作也称为活动的(active),而初始化和完成状态也称为非活动的(inactive)。

活动的(active)通信和I/O操作也称为待处理的(pending)操作。请注意,待处理的操作可以是已开始但尚未完成(即使请求句柄已被释放)的非阻塞或持续操作,也可以是尚未完成的阻塞操作,例如等待接收消息的接收操作。

MPI操作还可以是集合的collective或非集合的noncollective。

  • 集合操作:一组相关操作,每个MPI进程在一个组或多个MPI进程的组中执行一个操作。对于集合操作,完成阶段可能在组中的所有进程开始操作之前完成,也可能不会。 集合MPI操作也可以作为阻塞、非阻塞或持久操作提供。

  • 非集合操作:非集合noncollective操作被定义为not collective操作。

许多MPI操作需要在多个MPI进程中协调活动:这种操作的语义要求在操作转换到完全操作状态之前,必须启动一个或多个其他特定的语义相关操作。例如,接收操作需要在接收完成之前启动一个相关的发送操作;或者一个集体操作在所有相应组的MPI进程中启动这些操作之前可能不会完成。

  • Enabled: 当在特定的MPI进程中启动了所有特定语义相关的操作以确保在该MPI进程中完成时,MPI操作就处于启用状态。

Rationale. MPI实现可以包含优化(例如自动缓冲),允许MPI操作在启用之前完成。(End of rationale.)

有些MPI操作是事先启用的(priori enabled),即它们不需要任何其他特定语义相关的操作来完成。例如,一个带缓冲的发送操作可以独立于相关的接收操作而完成。

一旦MPI操作被启用,该操作必须最终完成。一个操作在启动之前可能已经被启用。例如,如果一个接收操作在匹配的发送操作启动之后启动,则该接收操作已经被启用。

Rationale.
操作A的enabled的定义是不对称的:enabled包括所有特定的语义相关操作 A i ′ A^′_i Ai已经开始以确保完成,但不包括操作A本身已经开始。

示例:

  • 当相关的发送操作已经开始时,receive被启用。
  • 标准模式send在相关的receive已经开始时被启用。如果MPI实现选择使用内部缓冲区,则send操作可能在启用之前已经完成,即receive操作已经开始。
  • 同步模式的send操作在相关的receive操作已经开始时被启用,并且在启用之前不能完成。
  • 缓冲(buffered)模式的send操作是事先启用的。
  • 就绪(ready)模式的send操作只有在已经启用时才能开始,即相关的receive操作已经开始。
  • 对于集合的广播,特定MPI进程上的操作仅在组中所有其他MPI进程已经开始相关广播操作时才被启用。

具体地说,对于构成可能同步的集体操作的一组MPI进程上的相关操作,对于特定MPI进程p上的操作,当组中所有其他MPI进程pi != p已经开始其相关操作时,该操作被启用,而p上的操作不必已经开始。

(End of rationale.)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/470707.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Modbus TCP转Profinet网关如何实现Modbus主站与多设备通讯

在工业控制领域中&#xff0c;Modbus TCP转Profinet网关&#xff08;XD-ETHPN20&#xff09;扮演着连接不同设备间通讯的重要角色。当将Modbus主站与十几台服务器进行通讯时&#xff0c;通过modbus tcp转profinet网关&#xff08;XD-ETHPN20&#xff09;设备将不同协议间的数据…

LabVIEW NV色心频率扫描

LabVIEW NV色心频率扫描 通过LabVIEW软件开发一个能够实现对金刚石氮空位&#xff08;Nitrogen-Vacancy&#xff0c;NV&#xff09;色心的频率扫描系统。系统通过USB协议与硬件设备通信&#xff0c;对NV色心进行高精度的频率扫描&#xff0c;满足了频率在2.6 GHz到3.2 GHz范围…

python与excel第一节

python与excel第一节 由于excel在日常办公中大量使用&#xff0c;我们工作中常常会面对高频次或者大量数据的情况。使用python语言可以更加便捷的处理excel。 python与vba的比较 python语法更加简洁&#xff0c;相较于vba冗长复杂的语法&#xff0c;python更加容易学习。 p…

阅读笔记(CVPR2020)Warping Residual Based Image Stitching for Large Parallax

基于变形残差的大视差图像拼接 K. -Y. Lee and J. -Y. Sim, "Warping Residual Based Image Stitching for Large Parallax," 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), Seattle, WA, USA, 2020, pp. 8195-8203, doi: 10.1109/…

Grok-1:参数量最大的开源大语言模型

Grok-1&#xff1a;参数量最大的开源大语言模型 项目简介 由马斯克领衔的大型模型企业 xAI 正式公布了一项重要动作&#xff1a;开源了一个拥有 3140 亿参数的混合专家模型&#xff08;MoE&#xff09;「Grok-1」&#xff0c;连同其模型权重和网络架构一并公开。 此举将 Gro…

行业模板|DataEase制造行业大屏模板推荐

DataEase开源数据可视化分析平台于2022年6月发布模板市场&#xff08;https://templates-de.fit2cloud.com&#xff09;&#xff0c;并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板&#xff0c;方便用户根据…

智能合约语言(eDSL)—— 使用rust实现eDSL的原理

为理解rust变成eDSL的实现原理&#xff0c;我们需要简单了解元编程与宏的概念,元编程被描述成一种计算机程序可以将代码看待成数据的能力&#xff0c;使用元编程技术编写的程序能够像普通程序在运行时更新、替换变量那样操作更新、替换代码。宏在 Rust 语言中是一种功能&#x…

Nginx可视化管理实战攻略:提升管理效率新途径

nginx-proxy-manager 是一个反向代理管理系统&#xff0c;它基于 Nginx&#xff0c;具有漂亮干净的 Web UI。还可以获得受信任的 SSL 证书&#xff0c;并通过单独的配置、自定义和入侵保护来管理多个代理。 特征 基于 Tabler(https://tabler.github.io/) 的美观安全的管理界面…

代码学习记录23--回溯算法第四天

随想录日记part23 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.19 主要内容&#xff1a;回溯算法在代码学习中尤其重要&#xff0c;所以今天继续加深对其的理解&#xff1a;1&#xff1a;复原IP地址 &#xff1b;2.子集 &#xff1b;3.子集II 93.复原IP地…

飞天使-k8s知识点26-kubernetes温故知新1-pod

文章目录 创建一个podpod的启动命令和参数更改pod 镜像拉取策略 pod 的三种探针pod 探针的实现方式prestop 和 prestart 创建一个pod apiVersion: v1 # 必选&#xff0c;API 的版本号 kind: Pod # 必选&#xff0c;类型 Pod metadata: # 必选&#xff0c;元数据name: nginx # …

学习总结1

算法 这两天对搜索(主要是dfs)进行了复习,写了四道题目. 解题思路 这道题我用dfs进行解题,这道题比起其他的只多了一个Z轴也就是多了两个方向. 代码 #include <string.h> #include <stdio.h> char g[31][31][31]; int ne[7][3]{{1,0,0},{-1,0,0},{0,1,0},{0,-1…

Java 设计模式系列:行为型-状态模式

简介 状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;允许一个对象在其内部状态改变时改变其行为。状态模式中类的行为是由状态决定的&#xff0c;在不同的状态下有不同的行为。 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂…

[Halcon学习笔记]标定常用的Halcon标定板规格及说明

1、介绍 大多数标定的要求都是以实心圆或方格来作为标志点&#xff0c;所以一般的标定板为棋盘格或矩阵圆点图&#xff0c;高精度的相机标定过程中&#xff0c;大多是以比较明确的特征点来作为参考&#xff0c;所以通过识别标定板的圆形&#xff0c;拟合出精确的中心位置&…

力扣--最小覆盖子串--双端队列+滑动窗口

滑动窗口思路&#xff08;双端队列实现&#xff09;&#xff1a; 可以参考一下&#xff1a;力扣hot8---滑动窗口-CSDN博客以及力扣hot9---滑动窗口-CSDN博客。 使用滑动窗口有以下几个步骤&#xff1a;初始化双端队列&#xff08;将s的前t_len个元素入队&#xff0c;此时检验是…

1.IP复习课作业

1.IP复习课作业 1.为路由器各接口配置IP以及环回 R1 R2 R3 R4 R5 R6 2.配置dhcp为主机下发IP PC1 PC2 3.配置静态路由 R1 R2 R3 R4 R5 PC端通信 4.防止成环 R1 R2、4、5一样 5.修改优先级 R1 R2、3、4、5同样进行修改 6.均可访问R6环回 R5配置easy IP R1 ping R6环回 PC ping R…

Mac版Jmeter安装与使用模拟分布式环境

Mac版Jmeter安装与使用&模拟分布式环境 1 安装Jmeter 1.1 安装Java环境 国内镜像地址&#xff1a;https://repo.huaweicloud.com/java/jdk/11.0.29/jdk-11.0.2_osx-x64_bin.dmg 下载dmg后&#xff0c;双击进行安装。 配置环境变量&#xff1a; # 1 打开环境变量配置文件…

【leetcode热题】 地下城游戏

恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0…

前端面试02(JS)

文章目录 前端面试02&#xff08;JS&#xff09;1、js的组成2、js内置对象3、操作数组的方法4、数据类型的检测方法5、闭包是什么6、前端内存泄漏7、事件委托8、基本数据类型和引用数据类型9、原型链10、JS如何实现继承 &#x1f389;写在最后 前端面试02&#xff08;JS&#x…

AI短视频制作一本通:文本生成视频、图片生成视频、视频生成视频

第一部分&#xff1a;文本生成视频 1. 文本生成视频概述 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;视频制作领域也迎来了创新的浪潮。文本生成视频是其中的一项令人激动的进展&#xff0c;它利用自然语言处理技术将文本内容转化为视频。这项技术在广…

element-ui出的treeselect下拉树组件基本使用,以及只能选择叶子节点的功能,给节点添加按钮操作

element-ui出的treeselect下拉树组件基本使用&#xff1a;Vue通用下拉树组件riophae/vue-treeselect的使用-CSDN博客 vue-treeselect 问题合集、好用的树形下拉组件&#xff08;vue-treeselect的使用、相关问题解决方案&#xff09;-CSDN博客 需求1&#xff1a;treeselect下拉…