Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization Fortran与MPI文件写入/读取的性能比较_Optimization_Fortran_Mpi_Writing - Fatal编程技术网

Optimization Fortran与MPI文件写入/读取的性能比较

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

我对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.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