MPI_BSEND

MPI_BSEND(buf, count, datatype, dest, tag, comm)
IN buf 发送缓冲区的起始地址(可选数据类型)
IN count 发送数据的个数(整型)
IN datatype 发送数据的数据类型(句柄)
IN dest 目标进程标识号(整型)
IN tag 消息标志(整型)
IN comm 通信域(句柄)
int MPI_Bsend(void* buf, int count, MPI_Datatype datatype, int dest,
int tag, MPI_Comm comm)
MPI_BSEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
<type>BUF(*)
INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR

讲解:
当用户对标准通信模式不满意,希望直接对通信缓冲区进行控制时,可采用缓存通信模式。在这种模式下,由用户直接对通信缓冲区进行申请、使用和释放,因此,缓存模式下对通信缓冲区的合理与正确使用是由程序设计人员自己保证的。
MPI_BSEND的各个参数的含义和MPI_SEND的完全相同,不同之处仅表现在通信时是使用标准的系统提供的缓冲区还是用户自己提供的缓冲区。缓存通信模式不管接收操作是否启动,发送操作都可以执行,但是在发送消息之前必须有缓冲区可用,这由用户保证,否则该发送将失败返回。对于非阻塞发送,正确退出并不意味者缓冲区可以被其它的操作任意使用,但阻塞发送返回后其缓冲区是可以重用的。

图9-1 缓存通信模式

采用缓存通信模式是,消息发送能否进行及能否正确返回不依赖于接收进程,完全依赖于是否有足够的通信缓冲区可用,当缓存发送返回后,并不意味者该缓冲区可以自由使用,只有当缓冲区中的消息发送出去后,才可以释放该缓冲区。
用户可以首先申请缓冲区,然后把它提交给MPI作为发送缓存,用于支持发送进程的缓存通信模式。这样,当缓存通信方式发生时,MPI就可以使用这些缓冲区对消息进行缓存。当不使用这些缓冲区时,可以将这些缓冲区释放。

MPI_BUFFER_ATTACH
MPI_BUFFER_ATTACH( buffer, size)
 IN buffer 初始缓存地址(可选数据类型)
 IN size 按字节计数的缓存跨度(整型)
int MPI_Buffer_attach( void* buffer, int size)
MPI_BUFFER_ATTACH( BUFFER, SIZE, IERROR)
 <type>BUFFERR(*)
 INTEGER SIZE, IERROR

讲解:
MPI_BUFFER_ATTACH将大小为size的缓冲区递交给MPI,这样该缓冲区就可以作为缓存发送时的缓存来使用。