Io 在Fortran中使用MPI I/O读取未格式化的流二进制文件
我有一个大小约为60GB的未格式化流二进制文件,我在我的串行代码中读取如下内容:Io 在Fortran中使用MPI I/O读取未格式化的流二进制文件,io,fortran,mpi,mpi-io,Io,Fortran,Mpi,Mpi Io,我有一个大小约为60GB的未格式化流二进制文件,我在我的串行代码中读取如下内容: parameter(nsea=120445) real*4 p(nsea,nsea) open(10,file='my_file.grd' & & ,status='old',access='stream',form='unformatted') read(10)((p(ibk,jbk),jbk=1,nsea),ibk=1,nsea) close(10) 由于
parameter(nsea=120445)
real*4 p(nsea,nsea)
open(10,file='my_file.grd' &
& ,status='old',access='stream',form='unformatted')
read(10)((p(ibk,jbk),jbk=1,nsea),ibk=1,nsea)
close(10)
由于读取此文件需要很多时间,我想使用MPI I/O并行化这部分代码。我正在尝试使用MPI\u文件集\u视图
和MPI\u文件读取
选项来完成此操作。有人能指导我有效地做这件事吗?
在读取并存储参数
p(nsea,nsea)
之后,我想在代码的其余部分传递整个数组以进行一些矩阵运算 我在我的电脑上尝试了一个简单的示例代码复制器,它有32GB的内存用于27GB的测试文件。使用“gFortran stream.f90-o stream.exe”编译时,它只需320秒,那么单线程是否太慢了?(由于磁盘缓冲,这种测试方法可能会有问题,但当文件大小+内存需求超过已安装内存时,应该不会有问题)
您可能希望通过包含更多错误测试(stat=,iostat=)来扩展下面列出的方法
我在3台pc上测试了这段代码,2台带有SSD。i5拥有Win 7 8Gb内存,而i7拥有Win 10 32Gb内存。下表列出了我获得的性能。文件大小约为85%的内存,因此磁盘缓冲应该不重要。结果可能是可变的。我很惊讶SSD的性能低于预期,而i7硬盘的性能却好于预期
Disk File Gb write sec read sec write Mb/s read Mb/s
i5-2300 C:HDD 4.6 42.1 58.9 108.3 77.5
i7-4790K E:HDD 26.9 175.0 168.7 153.8 159.6
i7-4790K C:SSD 26.9 154.7 106.4 174.0 252.9
i7-8700K E:HDD 26.9 141.8 132.7 189.8 202.8
i7-8700K C:SSD 26.9 116.9 97.5 230.2 276.0
我希望这些结果能说明串行流I/O可以实现什么。不确定在这种情况下,MPI I/O的预期速率是多少?Welcom,请接受欢迎并阅读。您不应该寻求指导,因为这对于堆栈溢出来说可能过于宽泛,而应该提出一个可以回答的问题。你们有并行文件系统吗?使用MPI,您不会并行化部分代码,而是并行化整个代码。其余的代码是MPI吗?是的,我有一个并行文件系统(lustre)。我的想法是在使用MPI I/O读取阵列后,将其存储为全维2D阵列。然后用它来做进一步的矩阵运算(这部分是串行的,不需要花太多时间计算),我不明白。您希望如何存储它?正如您在我的序列代码中所看到的,我最终需要一个维数为(nsea x nsea)的矩阵“p”。我想要的是优化读取文件的时间。请。如果我的想法是错误的,请给出建议。但在MPI中,您将把它读入许多进程,每个进程都有一部分。您是否有足够的内存将它们收集到单个进程中?顺序内存访问对于大型阵列非常重要,可以在本示例中演示。您应该选中“((p(ibk,jbk),ibk=1,nsea),jbk=1,nsea)”和“((p(ibk,jbk,jbk=1,nsea),ibk=1,nsea)”。FORALL的顺序取决于编译器。非常感谢johncampbell。我会回美国的
Disk File Gb write sec read sec write Mb/s read Mb/s
i5-2300 C:HDD 4.6 42.1 58.9 108.3 77.5
i7-4790K E:HDD 26.9 175.0 168.7 153.8 159.6
i7-4790K C:SSD 26.9 154.7 106.4 174.0 252.9
i7-8700K E:HDD 26.9 141.8 132.7 189.8 202.8
i7-8700K C:SSD 26.9 116.9 97.5 230.2 276.0