MPI文件视图和IO

| 我正在编写一个MPI程序,该程序需要一次将文件的一部分读取到内存中,一次读取一个文件,每个文件进入一个可用的进程。因此,我正在使用共享文件指针。文件的第一部分是标头,我想读取该标头以读取并分发给所有进程,我已经设法通过在主进程上读取它并将其广播给所有其他进程来做到这一点。 该文件的下一部分是一个很长的浮点三元组数组(理论上最大为几GB)。我想为所有进程设置文件视图,以便它从此数组的开头开始,并且每个进程都应该能够看到整个数组。此外,这是我的真正问题,我不希望进程在此数组之外看到,因此在遇到最后一组3个浮点后,它们将报告EOF。因此,实际上每个过程只会看到一个长的3浮点数组,而没有其他任何东西。 读取标头后,这是我的代码:
MPI_Datatype particle_type;
MPI_Type_contiguous(3,MPI_FLOAT,&particle_type);
MPI_Type_commit(&particle_type);
MPI_Offset cur_file_pos;
MPI_File_get_position_shared(fh,&cur_file_pos);
MPI_File_set_view(fh, cur_file_pos, particle_type, particle_type, (char *) \"native\", MPI_INFO_NULL); /* fh is the file-handle from MPI_File_open */
据我了解,这只是跳过标题,但文件视图在数组之后不会停止,而是继续进入文件中我不感兴趣的下一部分。有人可以帮助我解决这个简单的问题吗?我在任何地方都找不到文件视图的任何详尽解释(包括示例)。     
已邀请:
        不幸的是,MPI_File_set_view不会为您执行此操作;一旦超出
filetype
filetype
便会重复。虽然MPI_File_set_view将允许您在进程之间划分文件的视图,但它不会像这样“截断”文件的视图。 如果您正在使用共享文件指针,那么大概最简单的方法就是循环直到新位置==粒子数(一旦设置了视图,文件指针将以etype为单位)。     

要回复问题请先登录注册