二、非阻塞方式

MPI_FILE_IREAD_AT(fh, offset,buf, count, datatype, request)
INfh读取文件的句柄
INoffset读取数据的偏移位置
OUT buf 存放读取数据的缓冲区
INcount 读取数据个数
INdatatype读取数据类型
OUT request 返回的非阻塞读取完成对象
int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void * buf, int count,
MPI_Datatype datatype, MPI_Request * request)
MPI_FILE_IREAD_AT(FH,OFFSET,BUF,COUNT,DATATYPE,REQUEST,IERROR)
<type> BUF(*)
INTEGER FH, COUNT, DATATYPE, REQUEST, IERROR
INTEGER (KIND=MPI_OFFSET_KIND) OFFSET

和通信的非阻塞方式类似,文件的非阻塞调用返回后,并不意味着对文件的读写操作已经完成,只有当对相应的非阻塞对象进行测试,发现该非阻塞操作已经结束后,才表示对文件的读写操作全部完成。这时才可以使用从文件读取的数据或释放写入文件的输出缓冲区。前面非阻塞通信中的各种对非阻塞对象的操作在对文件的非阻塞调用中得到的非阻塞对象上也同样适用。
MPI_FILE_IREAD_AT是MPI_FILE_READ_AT的非阻塞形式,它从文件fh中读取数据,读取数据的起始位置是offset,个数为count个,数据类型为datatype,读取的数据放到数据缓冲区buf中,返回一个非阻塞读取完成对象request。同所有的非阻塞调用一样,该调用执行后立即返回,不管数据读取是否已经完成。读取操作的完成是通过对request对象调用MPI_WAIT实现的。如同通信操作的非阻塞调用一样,也可以用MPI_TEST调用来查看该非阻塞读取是否完成。