Optimization 在Fortran中对MPI文件的部分调用

Optimization 在Fortran中对MPI文件的部分调用,optimization,io,fortran,mpi,Optimization,Io,Fortran,Mpi,我需要与MPI并行读取一个非常大的二进制Fortran文件。 问题是文件太大,以至于每个内核都无法在内存中存储#total_file_size/ncpu。 因此,每个cpu按顺序读取文件的一部分 我有以下伪代码: ir_start = start reading position for that cpu ir_stop = end reading position for that cpu CALL MPI_FILE_OPEN(world_comm,filint,MPI_MODE_RDONL

我需要与MPI并行读取一个非常大的二进制Fortran文件。 问题是文件太大,以至于每个内核都无法在内存中存储#total_file_size/ncpu。 因此,每个cpu按顺序读取文件的一部分

我有以下伪代码:

ir_start = start reading position for that cpu
ir_stop = end reading position for that cpu

CALL MPI_FILE_OPEN(world_comm,filint,MPI_MODE_RDONLY,MPI_INFO_NULL,fh,ierr)
size = size of the chuck to read
DO ir=ir_start, ir_stop
  offset = data_size * (ir -1)
  CALL MPI_FILE_READ_AT(fh, offset, data, size, MPI_DOUBLE_PRECISION, MPI_STATUS_IGNORE, ierr)
ENDDO
这很有效。 然而,有人告诉我,MPI文件的读取(集体)速度会快得多

问题是,如果我使用集合版本,那么它只有在所有核心都有相同数量的元素(即ir_stop-ir_start是相同的)时才起作用。 这种情况并不总是发生。 因此,对于某些数量的内核,代码在等待最后一个没有进入最终循环的cpu时挂起


对于任意数量的内核,是否有一种聪明的方法可以让MPI文件读取全部内核

你有没有试过在某些列上读取零字节?我刚试过,而且效果很好。然而,速度增益令人失望:(.我在全部读取时获得19.84秒,而在非集体读取时获得20.28秒。您是否有一个文件系统支持在多个磁盘上分发单个文件并同时由多个进程并行读取该文件?我想是的。集群有一个IBM通用并行文件系统em(GPFS)。你有没有尝试过在某些列上读取零字节?我刚刚尝试过,它可以工作。但是速度增益令人失望:(.我在全部读取时获得19.84秒,而在非集体读取时获得20.28秒。您是否有一个文件系统支持在多个磁盘上分发单个文件并同时由多个进程并行读取该文件?我想是的。集群有一个IBM通用并行文件系统em(GPFS)。