View MPI文件视图和IO

View MPI文件视图和IO,view,io,mpi,View,Io,Mpi,我正在编写一个MPI程序,需要将文件的一部分读入内存,一次读入一部分,每一部分都进入一个可用进程。因此,我使用的是共享文件指针。文件的第一部分是一个头文件,我想读取它并将其分发给所有进程,我已经通过在主进程上读取它并将其广播给所有其他进程来实现这一点 文件的下一部分是浮点三元组的长数组(理论上最多可达几GB)。我想为所有进程设置fileview,以便它从这个数组的开头开始,并且每个进程都应该能够看到整个数组。此外,这是我真正的问题,我不希望进程看到这个数组之外的东西,这样在遇到最后一组3个浮点之

我正在编写一个MPI程序,需要将文件的一部分读入内存,一次读入一部分,每一部分都进入一个可用进程。因此,我使用的是共享文件指针。文件的第一部分是一个头文件,我想读取它并将其分发给所有进程,我已经通过在主进程上读取它并将其广播给所有其他进程来实现这一点

文件的下一部分是浮点三元组的长数组(理论上最多可达几GB)。我想为所有进程设置fileview,以便它从这个数组的开头开始,并且每个进程都应该能够看到整个数组。此外,这是我真正的问题,我不希望进程看到这个数组之外的东西,这样在遇到最后一组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无法为您提供此功能;一旦超出
文件类型
的范围,就会重复
文件类型
。虽然MPI_File_set_view允许您在进程之间划分文件视图,但它不允许您像这样“截断”文件视图


如果您使用的是共享文件指针,最简单的方法大概是循环直到新位置==粒子数(一旦设置视图,文件指针以etype为单位)。

谢谢您的回答,这也是我的解决方法。这似乎很不方便。我看不出共享文件指针在文件视图中有多大用处。