MSIPO技术圈 首页 IT技术 查看内容

MPI4.1文档3-MPI过程与MPI数据类型

2024-03-21

本博客参考官方文档进行介绍,全网仅此一家进行中文翻译,走过路过不要错过。

官方网址:https://www.mpi-forum.org/

参考文档:https://www.mpi-forum.org/docs/mpi-4.1/mpi41-report.pdf

引用官方4.1文档方法:

@manual{mpi41,
  author = "{Message Passing Interface Forum}",
  title  = "{MPI}: A Message-Passing Interface Standard Version 4.1",
  url   = "https://www.mpi-forum.org/docs/mpi-4.1/mpi41-report.pdf",
  year  = 2023,
  month  = nov
}

本文档分成多个博客进行介绍,在本人专栏中含有所有内容:

https://blog.csdn.net/qq_33345365/category_12610893.html

MPI-4.1为2023年11月2日发表,本专栏书写日期2024/3/18

本人会维护一个总版本,一个小章节的版本,总版本会持续更新,小版本会及时的调整错误和不合理的翻译,内容大部分使用chatGPT 3.5翻译,内容不引用文献,请自行去文档查看


开始编辑时间:2024/3/18;最后编辑时间:2024/3/20

2.4.2 MPI过程 MPI Procudures

所有MPI过程可以分为本地过程和非本地过程,定义如下:

非本地(nonlocal)过程:如果在执行过程中,返回可能需要调用另一个特定的与语义相关的MPI过程来在另一个MPI进程上执行,则该MPI过程被称为非本地过程。

本地过程:如果MPI过程不是非本地过程,则称其为本地过程。

一个MPI操作实现为一组一个或多个MPI过程。MPI操作相关的过程至少实现了MPI操作的一个阶段的一部分,如2.4.1节所述。MPI操作相关的过程还可以实现一个或多个MPI操作的一个或多个阶段。在某些情况下,可能需要多个MPI操作相关的过程来实现一个单独的阶段。

还有其他一些MPI过程不实现任何MPI操作的阶段。

MPI操作相关的过程的语义使用两个正交(独立)的概念描述:完整性(取决于包含哪些阶段)和本地性。这些过程可以是不完整的、完成的、释放的或者完成和释放的,取决于过程返回时相关操作的状态。

此外,所有这些过程都可以描述为阻塞的或非阻塞的,但后两个术语是指完整性和本地性概念的组合。另外,所有MPI操作相关的过程都可以是集合的或非集合的。

以下是与MPI操作相关的过程的属性:

初始化(Initialization)过程:如果从该过程返回,则表示关联操作已完成初始化阶段,这意味着用户已将参数列表的控制(但不是数据缓冲区的内容)移交给了MPI。用户仍然被允许读取或修改数据缓冲区的内容。如果初始化过程不同时也是关联操作的释放过程(见下文),则用户不得释放数据缓冲区或修改数组参数。

启动(starting)过程:如果从该过程返回,则表示关联操作已完成启动阶段,这意味着用户已将数据缓冲区的控制移交给了MPI。如果启动过程不同时也是关联操作的完成过程(见下文),则用户不得修改输入数据缓冲区或读取输出数据缓冲区。

初始(Initiation)过程:如果从该过程返回,则表示初始化和启动阶段均已完成,这意味着整个参数列表的控制权已移交给了MPI。

完成(Completing)过程:如果从过程返回,则该MPI过程被称为完成过程,这意味着至少有一个关联操作已经完成了其完成阶段,这意味着用户可以依赖输出数据缓冲区的内容,并修改这些操作的输入和输出数据缓冲区的内容。如果完成过程不是释放过程(见下文),则用户不允许释放数据缓冲区或修改数组参数。

不完成(Incomplete)过程:如果它不是完成过程,则该MPI过程被称为不完成过程。

释放(Freeing)过程:如果从过程返回,则该MPI过程是释放过程,这意味着至少有一个关联操作已经完成了其释放阶段,这意味着用户可以重新使用初始化关联操作时指定的所有参数。

非阻塞过程:如果它是不完整的并且是本地的,则该MPI过程是非阻塞的。

阻塞过程:如果它不是非阻塞的,则该MPI过程是阻塞的。

Advice to users.

MPI程序中,与操作相关的MPI过程大多数情况下是不完全的程序是局部的,而完全的程序是非局部的。在定义的地方标注了例外情况。在许多情况下,将I作为不完全和即时的缩写字母前缀标记过程名称中的非阻塞过程。 以下是一些分类示例。

非阻塞过程:

  • 不完全且本地:MPI_ISEND、MPI_IRECV、MPI_IBCAST、MPI_IMPROBE、MPI_SEND_INIT、MPI_RECV_INIT等。

阻塞过程:

  • 完全且非本地:MPI_SEND、MPI_RECV、MPI_BCAST等。
  • 不完成且非本地:MPI_MPROBE、MPI_BCAST_INIT等,MPI_FILE_{READ|WRITE}_{AT_ALL|ALL|ORDERED}_BEGIN。
  • 完全且本地:MPI_BSEND、MPI_RSEND、MPI_MRECV。

不是MPI操作相关的MPI过程:

  • MPI_COMM_RANK、MPI_WTIME、MPI_PROBE、MPI_IPROBE等。

(End of advice to users.)

集合过程:如果MPI进程组或组中的所有进程需要调用过程,则该MPI过程是集合的。

对于同一进程组的集合操作的初始化过程必须由进程组的所有成员按相同顺序执行。

MPI集合过程是同步的,如果关联的MPI进程组或组中的所有进程调用了相应的匹配MPI过程,则它只会在所有进程都调用了适当的匹配MPI过程后返回。对于非阻塞集合操作的启动过程和持久集合操作的起始过程是本地的,并且不会同步。对于其他集合操作的过程,例如阻塞集合操作的过程和持久集合操作的初始化过程,可能会同步,也可能不会同步。

Advice to users. 当关联进程组中没有可能对所有其他进程进行相应调用时,调用任何同步函数都是错误的。当关联组中所有其他进程没有可能启动相应操作时,等待任何集合操作完成也是错误的。(End of advice to users.)

非集合过程:非集合过程被定义为不是集合的过程。

局部和非局部MPI过程的定义也可以应用于特定的过程调用或在某些约束条件下的过程调用。例如,发生在相关发送操作已经开始之后的完成接收过程的调用可能被描述为本地的,即使没有约束的完成接收过程是非本地的。更普遍地,发生在操作已经启用之后的任何完成过程的调用都是本地的,即使没有约束的完成过程是非本地的。另一个例子,使用大小为一的进程组进行阻塞集合过程调用是本地的,即使没有约束的阻塞集合过程是非本地的。

2.4.3 MPI数据类型 MPI Datatypes

数据类型可以分为以下几种类型:

预定义的predifined:预定义数据类型是指具有预定义(常量)名称的数据类型(如MPI_INT、MPI_FLOAT_INT或MPI_PACKED),或者使用MPI_TYPE_CREATE_F90_INTEGER、MPI_TYPE_CREATE_F90_REAL或MPI_TYPE_CREATE_F90_COMPLEX构造的数据类型。前者是具有名称的,而后者是无名称的。

派生的derived:任何不是预定义的数据类型都属于派生数据类型。

可移植的portable:如果一个数据类型是预定义数据类型,或者它是从可移植数据类型派生而来,并且仅使用了MPI_TYPE_CONTIGUOUS、MPI_TYPE_VECTOR、MPI_TYPE_INDEXED、MPI_TYPE_CREATE_INDEXED_BLOCK、MPI_TYPE_CREATE_SUBARRAY、MPI_TYPE_DUP和MPI_TYPE_CREATE_DARRAY这些类型构造器,则该数据类型是可移植的。这样的数据类型是可移植的,因为数据类型中所有的位移都是以一个预定义数据类型的范围为单位的。因此,如果这样的数据类型适合一个内存中的数据布局,那么如果使用相同的声明,在另一个内存中对应的数据布局也将适合,即使这两个系统具有不同的架构。另一方面,如果一个数据类型是使用MPI_TYPE_CREATE_HINDEXED、MPI_TYPE_CREATE_HINDEXED_BLOCK、MPI_TYPE_CREATE_HVECTOR或MPI_TYPE_CREATE_STRUCT构造的,那么该数据类型包含显式的字节位移(例如,提供填充以满足对齐限制)。如果这些位移适合一个内存中的数据布局,但在另一个运行在具有不同架构处理器上的进程的数据布局中使用,那么这些位移可能不会被正确选择。

等价的equivalent:如果两个数据类型看起来是通过相同的一系列调用(和参数)创建的,并且因此具有相同的类型映射,则它们是等价的。两个等价的数据类型不一定具有相同的缓存属性或相同的名称。

相关阅读

热门文章

    手机版|MSIPO技术圈 皖ICP备19022944号-2

    Copyright © 2024, msipo.com

    返回顶部