并行程序设计基础——并行I/O(4)
目录
一、共享文件读写
1、共享文件读写
1.1 MPI_FILE_SEEK_SHARED
1.2 MPI_FILE_GET_POSITION_SHARED
2、阻塞共享文件读写
2.1 MPI_FILE_READ_SHARED
2.2 MPI_FILE_WRITE_SHARED
2.3 MPI_FILE_READ_ORDERED
2.4 MPI_FILE_WRITE_ORDERED
3、非阻塞共享文件读写
3.1 MPI_FILE_IREAD_SHARED
3.2 MPI_FILE_IWRITE_SHARED
4、两步非阻塞共享文件组读写
4.1 MPI_FILE_READ_ORDERED_BEGIN
4.2 MPI_FILE_READ_ORDERED_END
4.3 MPI_FILE_WRITE_ORDERED_BEGIN
4.4 MPI_FILE_WRITE_ORDERED_END
4.5 MPI_FILE_GET_TYPE_EXTENT
4.6 MPI_REGISTER_DATAREP
4.7 MPI_FILE_SET_ATOMICITY
4.8 MPI_FILE_GET_ATOMICITY
4.9 MPI_FILE_SYNC
本节继续对并行I/O部分的剩余内容进行介绍。
一、共享文件读写
对于独立视口文件的读写,每一个进程都拥有一个独立的视口文件指针,各个进程对自己视口文件的读写操作只会改变本视口文件指针的位置,对其它视口的文件指针没有任何影响,就如同是在对两个互不相干的文件进行操作。
但是对于共享文件的读写,该共享文件只有一个文件指针,所有的进程都共享它,即任何一个进程对该指针的修改都会对其它的进程产生影响。
1、共享文件读写
1.1 MPI_FILE_SEEK_SHARED
MPI_FILE_SEEK_SHARED的含义与MPI_FILE_SEEK类似,只不过前者移动的是共享文件指针,该调用执行完成后所有的进程都会看到指针位置的变化,而MPI_FILE_SEEK只移动当前进程的指针。
MPI_FILE_SEEK_SHARED(fh, offset, whence)
INOUT fh 共享文件句柄
IN offset 偏移的相对位置
IN whence 偏移相对的绝对位置//c语言的说明
int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence)
//Fortran语言的说明
MPI_FILE_SEEK_SHARED(FH, OFFSET, WHENCE, IERROR)
INTEGER FH, WHENCE, IERROR
INTEGER (KIND=MPI_OFFSET_KIND) OFFSET
1.2 MPI_FILE_GET_POSITION_SHARED
MPI_FILE_GET_POSITION_SHARED和MPI_FILE_GET_POSITION类似,它返回共享文件指针相对起始位置的偏移。
MPI_FILE_GET_POSITION_SHARED(fh, offset)
IN fh 共享文件句柄
OUT offset 偏移的相对位置//c语言的说明
int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset)
//Fortran语言的说明
MPI_FILE_GET_POSITION_SHARED(FH, OFFSET, WHENCE, IERROR)
INTEGER FH, IERROR
INTEGER (KIND=MPI_OFFSET_KIND) OFFSET
2、阻塞共享文件读写
2.1 MPI_FILE_READ_SHARED
MPI_FILE_READ_SHARED从句柄fh对应的共享文件中读取count个数据类型为datatype的数据,放到buf中,返回的状态是status。这一调用使用的文件指针是共享指针,即该读取操作完成后,共享指针自动移到下一个数据单元的位置,其它进程再对该共享文件进行操作时,文件指针的位置是本调用完成后指针移动过的位置。
MPI_FILE_READ_SHARED(fh, buf, count, datatype, status)
INOUT fh 共享文件句柄
OUT buf 读取数据存放的缓冲区
IN count 读取数据的个数
IN datatype 读取数据的数据类型
OUT status 返回的状态信息//c语言的说明
int MPI_File_read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
//Fortran语言的说明
MPI_FILE_READ_SHARED(FH, BUF, COUNT, DATATYPE, STATUS, IERROR)
<type> BUF(*)
INTEGER FH, COUNT, DATATYPE, STATUS(MPI_STATUS_SIZE), IERROR
2.2 MPI_FILE_WRITE_SHARED
MPI_FILE_WRITE_SHARED向句柄fh对应的共享文件中写入数据,数据存放在buf中,共count个,数据类型为datatype,返回的状态信息是status。MPI_FILE_WRITE_SHARED调用和MPI_FILE_READ_SHARED相同,写入位置是共享文件指针对应的位置,该写入操作完成后,共享文件指针自动指向下一个数据单元的位置,指针的移动在所有的进程中都会体现出来,本写入操作完成后,其它进程对共享文件的操作是在本操作完成后指针所在的位置开始的。
MPI_FILE_WRITE_SHARED(fh, buf, count, datatype, status)
INOUT fh 共享文件句柄
OUT buf 写入数据存放的缓冲区
IN count 写入数据的个数
IN datatype 写入数据的数据类型
OUT status 返回的状态信息//c语言的说明
int MPI_File_write_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
//Fortran语言的说明
MPI_FILE_WRITE_SHARED(FH