我正在重写一个使用MPI在一个方向上并行化的数值模拟代码.到目前为止,包含数据的数组由主MPI进程保存,这意味着将数据从所有MPI进程传输到一个并分配大型数组来存储整个数据.它不是非常有效也不是优雅,并且是大分辨率的问题.
因此,我尝试使用MPI-IO直接从分布式阵列中写入文件.我的一个约束是写入文件需要遵守fortran"未格式化"格式(即每个字段之前和之后的4个字节整数,表示其大小).
我写了一个简单的测试程序,当我只将一个分布式数组写入文件时,它就可以工作.但是,当我写几个数组时,文件的总大小是错误的,当与同等的fortran'unformatted'文件进行比较时,文件是不同的.
以下是示例代码:
module arrays_dim
implicit none
INTEGER, PARAMETER :: dp = kind(0.d0)
integer, parameter :: imax = 500
integer, parameter :: jmax = 50
integer, parameter :: kmax = 10
end module arrays_dim
module mpi_vars
use mpi
implicit none
integer, save :: ierr, myID, numprocs
integer, save :: i_start, i_end, i_mean, i_loc
integer, save :: subArray, fileH
integer(MPI_OFFSET_KIND), save :: offset, currPos
end module mpi_vars
program test
use mpi
use arrays_dim
use mpi_vars
real(dp), dimension(0:imax,0:jmax+1,0:kmax+1) :: v, w …Run Code Online (Sandbox Code Playgroud)