Optimization Fortran与MPI文件写入/读取的性能比较
我对Fortran的读写性能(速度)与MPI one在大小文件上的性能感到困惑 我编写了以下简单的虚拟程序来测试这一点(只是将虚拟值写入文件): 汇编内容包括:Optimization Fortran与MPI文件写入/读取的性能比较,optimization,fortran,mpi,writing,Optimization,Fortran,Mpi,Writing,我对Fortran的读写性能(速度)与MPI one在大小文件上的性能感到困惑 我编写了以下简单的虚拟程序来测试这一点(只是将虚拟值写入文件): 汇编内容包括: mpif90 -O3 -x f95-cpp-input -D__FFTW -D__MPI -D__SCALAPACK test_mpi2.f90 -o a.x 然后与4个磁芯并联运行: mpirun -np 4 ./a.x 我得到以下结果: 循环大小1 阵列大小10240000 文件大小:313MB Fortran时间0.23
mpif90 -O3 -x f95-cpp-input -D__FFTW -D__MPI -D__SCALAPACK test_mpi2.f90 -o a.x
然后与4个磁芯并联运行:
mpirun -np 4 ./a.x
我得到以下结果:
循环大小1
阵列大小10240000
文件大小:313MB
Fortran时间0.237030014秒
MPI时间0.164155006秒
循环大小10 阵列大小1024000 文件大小:313MB Fortran时间0.24281991秒 MPI时间0.172048002秒
循环大小100 阵列大小102400 文件大小:313MB Fortran时间0.235879987秒 MPI时间9.78289992E-02秒
循环大小50 阵列大小1024000 文件大小:1.6G Fortran时间1.60272002秒 MPI时间3.40623116秒
线圈尺寸500 阵列大小102400 文件大小:1.6G Fortran时间1.44547606秒 MPI时间3.38340592秒
如您所见,对于较大的文件,MPI的性能会显著降低。是否有可能提高大型文件的MPI性能
这是预期的行为吗 你用什么样的硬件?它有任何并行文件系统吗?我在我的桌面上进行了计算(4个内核和一个SSD)。如果我正确理解了您的程序,第一种情况(Fortran)将每个列写入自己的文件,然后(单个)根列写入结果文件,而第二种情况(MPI)将每个列写入相同的(共享)文件并行生成结果文件。不太像苹果对苹果的比较。无论如何,MPI案例应该使用
MPI\u File\u write\u at\u all()。我要补充一点,在目标平台上测试它是很重要的。如果您计划主要在集群上进行模拟,请使用适当数量的节点和进程在集群上进行测试。如果是针对本地桌面,那么就可以了。也可能与此相关的是,您要求MPI代码进行重复搜索,而Fortran代码只是将数组爆破到文件中。适当使用派生类型可能有助于避免这种情况
mpirun -np 4 ./a.x