MPI-2对组调用的非阻塞视口文件读写采取了特殊的形式,将非阻塞视口文件的读写明确分为两步,一是非阻塞视口读写组调用的开始,二是非阻塞视口读写组调用的结束。其实第二步和MPI_WAIT的功能是一致的。

MPI_FILE_READ_ALL_BEGIN(fh, buf,count,datatype)
INOUTfh视口文件句柄
OUTbuf 读取数据存放的缓冲区
IN count 读取数据的个数
IN datatype读取数据的数据类型
int MPI_File_read_all_begin(MPI_File fh, void * buf, int count,
MPI_Datatype datatype)
MPI_FILE_READ_ALL_BEGIN(FH, BUF, COUNT, DATATYPE, IERROR)
<type> BUF(*)
INTEGER FH, COUNT, DATATYPE, IERROR

MPI_FILE_READ_ALL_BEGIN开始一个视口文件的非阻塞组调用,文件句柄fh对应的进程组内的所有进程都需要执行此调用,但是各进程分别拥有自己独立的视口文件指针,各进程分别从自己的视口文件指针所在的当前位置开始读取,读取数据的个数是count个,读取数据的数据类型是datatype。该读取调用执行后立即返回,不必等到真正读取操作的完成,数据从视口文件中读出并且放到buf中是MPI_FILE_READ_ALL_END调用后的结果。

MPI_FILE_READ_ALL_END(fh, buf,status)
INOUTfh视口文件句柄
OUTbuf 读取数据存放的缓冲区
OUTstatus返回的状态信息
int MPI_File_read_all_end(MPI_File fh, void * buf, MPI_Status * status)
MPI_FILE_READ_ALL_END(FH, BUF, STATUS, IERROR)
<type> BUF(*)
INTEGER FH, STATUS(MPI_STATUS_SIZE) , IERROR

MPI_FILE_READ_ALL_END也是一个组调用,它和MPI_FILE_READ_ALL_BEGIN结合起来,实现非阻塞视口文件的组读取。当 MPI_FILE_READ_ALL_END调用完成后,前面启动的非阻塞组文件读取操作才真正完成,数据缓冲区中的数据才可以被各个进程访问。