图17-4 不同的数据表示和效率与移植性的关系


其中视口数据的表示方法共有三种:native、internal和external32,定义数据表示是为了高效解决MPI的一致性问题,因为不同类型的计算机,其数据的表示方法是不同的。
其中native数据表示的含义是数据在文件中的存储方式和在内存中的完全一样,这样在进行文件存取时,就没有数据转换的开销,对文件访问的效率和精度没有损失。显然这种方式在由不同类型的计算机组成的异构环境是行不通的,使用native数据表示虽然效率高,但存在移植性的问题。
internal数据表示是由具体的实现来定义的,比如相同的MPI实现可以在不同类型的机器上实现数据转换,它是为了解决native数据表示的不可移植问题,通过在某一个具体的实现上提供特定的手段,来实现一定程度的移植性,它解决可移植问题并不彻底。
external32数据表示是为了彻底解决任何不同类型机器之间的数据移植问题,用external32数据表示产生的文件,可以被任何MPI实现,在任何计算机上进行访问。但是external32数据表示的一个缺点就是效率的问题,对每次不同的文件的读写,都必须进行一次同一格式的数据转换。

MPI_FILE_GET_VIEW(fh, disp,etype,filetype,datarep)
INfh视口文件句柄
OUT disp返回的视口在文件中的起始偏移
OUT etype 视口数据单元类型
OUT filetype视口文件类型
OUT datarep 视口的数据表示
int MPI_File_get_view(MPI_File fh, MPI_Offset * disp, MPI_Datatype * etype,
MPI_Datatype * filetype, char * datarep)
MPI_FILE_GET_VIEW(FH, DISP,ETYPE,FILETYPE,DATAREP,IERROR)
INTEGER FH, ETYPE,FILETYPE,IERROR
CHARACTER *(*) DATAREP,
INTEGER (KIND=MPI_OFFSET_KIND) DISP

MPI_FILE_GET_VIEW是一个查询调用,它返回文件视口的各种参数,fh是给定的文件视口句柄,disp是该视口在文件中的起始偏移位置,etype是文件视口的基本数据单位类型,filetype是文件视口的文件类型,datarep是文件视口的数据表示方法。以上各个参数对应于MPI_FILE_SET_VIEW调用时所给出的各种参数。

MPI_FILE_SEEK(fh, offset, whence)
INOUTfh文件句柄
IN offset相对偏移位置
IN whence指出offset的参照位置
int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence)
MPI_FILE_SEEK(FH,OFFSET,WHENCE,IERROR)
INTEGER FH, WHENCE, IERROR
INTEGER (KIND=MPI_OFFSET_KIND) OFFSET

MPI_FILE_SEEK将文件的指针移动到给定的位置。其中fh是文件句柄,offset是相对于whence的偏移位置,它的数据可正可负。其中whence的取值可以为MPI_SEEK_SET、MPI_SEEK_CUR和MPI_SEEK_END。不同参数取值的含义如下所示。

不同文件位置参照点的含义

参照位置取值 调用后文件指针的位置
MPI_SEEK_SET offset
MPI_SEEK_CUR 当前指针位置+offset
MPI_SEEK_END

文件结束位置+offset