MPI发送和接收语句
MPI_SEND(buf,count,datatype,dest,tag,comm)
INbuf发送缓冲区的起始地址(可选类型)
INcount将发送的数据的个数(非负整数)
INdatatype 发送数据的数据类型(句柄)
INdest 目的进程标识号(整型)
INtag消息标志(整型)
INcomm 通信域(句柄)
int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest,
int tag, MPI_Comm comm)
MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
<type> BUF(*)
INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
讲解:
MPI_SEND将发送缓冲区中的count个datatype数据类型的数据发送到目的进程,目的进程在通信域中的标识号是dest,本次发送的消息标志是tag,使用这一标志,就可以把本次发送的消息和本进程向同一目的进程发送的其它消息区别开来。
MPI_SEND操作指定的发送缓冲区是由count个类型为datatype的连续数据空间组成,起始地址为buf。注意这里不是以字节计数,而是以数据类型为单位指定消息的长度,这样就独立于具体的实现,并且更接近于用户的观点。
其中datatype数据类型可以是MPI的预定义类型,也可以是用户自定义的类型(将在后面的部分介绍)。通过使用不同的数据类型调用MPI_SEND,可以发送不同类型的数据。
MPI_RECV(buf,count,datatype,source,tag,comm,status)
OUTbuf接收缓冲区的起始地址(可选数据类型)
IN count最多可接收的数据的个数(整型)
IN datatype 接收数据的数据类型(句柄)
IN source 接收数据的来源即发送数据的进程的进程标识号(整型)
IN tag消息标识,与相应的发送操作的表示相匹配相同(整型)
IN comm 本进程和发送进程所在的通信域(句柄)
OUTstatus 返回状态 (状态类型)
int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source,
int tag,
MPI_Comm comm, MPI_Status *status)
MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS,
IERROR)
<type>BUF(*)
INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM,
STATUS (MPI_STATUS_SIZE),IERROR
讲解:
MPI_RECV从指定的进程source接收消息,并且该消息的数据类型和消息标识和本接收进程指定的datatype和tag相一致,接收到的消息所包含的数据元素的个数最多不能超过count。
接收缓冲区是由count个类型为datatype的连续元素空间组成,由datatype指定其类型,起始地址为buf。接收到消息的长度必须小于或等于接收缓冲区的长度,这是因为如果接收到的数据过大,MPI没有截断,接收缓冲区会发生溢出错误,因此编程者要保证接收缓冲区的长度不小于发送数据的长度。如果一个短于接收缓冲区的消息到达,那么只有相应于这个消息的那些地址被修改。count可以是零,这种情况下消息的数据部分是空的。
其中datatype数据类型可以是MPI的预定义类型,也可以是用户自定义的类型。通过指定不同的数据类型调用MPI_RECV,可以接收不同类型的数据。
接收状态各成分的含义
在C实现中,状态变量是由至少三个域组成的结构类型,这三个域分别是:MPI_SOURCE,MPI_TAG和MPI_ERROR。
它还可以包括其它的附加域。这样通过对status.MPI_SOURCE,status.MPI_TAG和status.MPI_ERROR的引用,就可以得到返回状态中所包含的发送数据进程的标识,发送数据使用的tag标识和本接收操作返回的错误代码。
在FORTRAN实现中,status是包含MPI_STATUS_SIZE个整型的数组,status(MPI_SOURCE),status(MPI_TAG)和status(MPI_ERROR)分别表示发送数据的进程标识,发送数据使用tag标识和该接收操作返回的错误代码。
返回状态变量status用途很广,它是MPI定义的一个数据类型,使用之前需要用户为它分配空间。
除了以上三个信息之外,对status变量执行MPI_GET_COUNT调用可以得到接收到的消息的长度信息。这在后面的部分会对这一调用进行介绍。
|