通信域
MPI通信域包括两部分:进程组和通信上下文。进程组即所有参加通信的进程的集合,如果一共有N个进程参加通信,则进程的编号从0到N-1;通信上下文提供一个相对独立的通信区域,不同的消息在不同的上下文中进行传递,不同上下文的消息互不干涉,通信上下文可以将不同的通信区别开来。
讲解
一个预定义的通信域MPI_COMM_WORLD由MPI提供。MPI初始化后,便会产生这一描述子,它包括了初始化时可得的全部进程,进程是由它们在MPI_COMM_WORLD组中的进程号所标识。
用户可以在原有的通信域的基础上,定义新的通信域。通信域为库和通信模式提供一种重要的封装机制。他们允许各模式有其自己的独立的通信域,和它们自己的进程计数方案。
-----------------------------------------------------------------------------------------------------------------------
除了数据部分, 消息带有用于识别消息并选择接收他们的信息。这个信息是由确定的域数组成的,我们称信封。这些域有 :
source( 源 )
destination( 目的 )
tag( 标识 )
communicator( 通信子 ) 也称作通信域
消息的source隐含地由消息发送者的标识来决定。其他域是由发送操作的参数决定。
消息的destination是由dest参数指定。
整型值的消息tag是由tag参数指定。这个整型能被程序用于识别不同的消息。有效标识值的范围是0,...,UB, 这儿UB的值依赖于实现。在第七章描述,通过查寻属性MPI_TAG_UB的值, 可得到UB。MPI要求UB不小于32767。 comm参数指定用于发送操作的communicator。在第五章解释communicator; 下面是其使用的简介。
一个通信子( communicator )给一个通信操作指定上下文。每个通信上下文提供一个单独的“通信全域”:消息总是在其被发送的上下文内被接收,不同的上下文发送的消息互不干涉。
通信子也指定共享这个通信上下文的进程组。这个进程组被编号,并且进程是由这个组中的进程号标识。所以,dest的有效值范围是0,...,n-1, 其中n是该组中的进程数。( 如果这个进程组是一个通信子间的, 那么destination是由远程组中他们的进程号所标识。请看第五章)。
一个预定义的通信子MPI_COMM_WORLD是由MPI提供。MPI初始化后, 它允许和可存取的全部进程通信, 进程是由他们在MPI_COMM_WORLD组中的进程号所标识。
给用户的建议. 喜欢进程名字空间的用户, 和由大多数已存在的通信库提供的一个简单通信上下文, 仅需要使用预定义的变量MPI_COMM_WORLD作为comm参数。这将允许初始化时和所有可能得到的进程通信。用户可以定义新的通信子,第五章解释这个。通信子为库和模式提供一种重要封装机制。他们允许模式有其自己的独立的通信域,和他们自己的进程计数方案。(给用户的建议结束)。
给实现者的建议. 消息信封将正常地由一个定长的消息头编码。但实际的编码是依赖于实现的。有些信息( 例如, source或destination )可以是隐式的, 不必由消息显式携带。进程也可以由相对的进程号或绝对的进程号标识,等等。(给实现者的建议结束)。
文章来源于领测软件测试网 https://www.ltesting.net/