【发布时间】:2011-09-15 11:39:05
【问题描述】:
我正在编写一个 MPI 程序,它需要将文件的一部分读入内存,一次一个,每个片段都进入一个可用的进程。因此,我使用共享文件指针。文件的第一部分是一个标题,我想读取它以读取并分发给所有进程,我设法通过在主进程上读取它并将其广播到所有其他进程来做到这一点。
文件的下一部分是一个长的(理论上最多几 GB)浮点三元组数组。我想为所有进程设置文件视图,以便它从这个数组的开头开始,并且每个进程都应该能够看到整个数组。此外,这是我真正的问题,我不希望进程看到这个数组之外,以便在遇到最后一组 3 个浮点数后,它们会报告 EOF。所以在实践中,每个进程只看到一个长的 3-float 数组,没有别的。
读取标题后,这是我的代码:
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 */
据我了解,这只是跳过了标题,但文件视图不会在数组之后停止,它会继续进入我不感兴趣的文件的下一部分。有人可以帮我解决这个简单的问题吗?我无法在任何地方找到有关文件视图的任何详尽解释(带有示例)。
【问题讨论】: