3.2.3 消息信封 | ![]() ![]() |
除了数据部分, 消息带有用于识别消息并选择接收他们的信息。这个信息是由确定的域数组成的,我们称信封。这些域有 :
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 )可以是隐式的, 不必由消息显式携带。进程也可以由相对的进程号或绝对的进程号标识,等等。(给实现者的建议结束)。
Copyright: NPACT |
![]() ![]() |