file-io - MPI-FORTRAN 的文件 IO

标签 file-io fortran mpi

我有一个 FORTRAN MPI 代码来求解流场。

首先,我想从文件中读取数据并将其分发给参与进程。

数据由多个 3-D 数组(空间 x、y、z 中的速度)组成。

每个进程只存储数组的一部分。

因此,如果每个进程都要读取该文件(我认为最简单的方法),它将无法工作,因为它只会存储与该进程可以保存的数组数量相对应的文件的第一部分。

MPI Bcast 可以用于 3d 数组吗?但随后事情就变得复杂了。

或者有更简单的方法吗?

最佳答案

一般来说,您有 2 或 3 个选择,具体取决于您的平台。

  1. 一个进程读取输入数据并将其(部分)发送到其他进程。我通常不会为此使用广播,因为它是一个集体操作,所有进程都必须参与。我通常只是向每个进程发送必要的信息。如果方便的话(而不是内存问题),您当然可以将所有输入数据广播到所有进程,但这不是我经常使用或看到的操作模式。
  2. 所有进程都会读取它们所需的数据。这可能涉及读取整个输入文件并仅存储它需要的那些部分的过程。但是,如果您有非常大的输入文件,您可以编写例程来仅将必要的部分读入每个进程的内存空间。这种方法可能涉及进程竞争磁盘访问,这只是相对而言较慢:如果您正在运行大规模且长时间运行的并行计算,那么在所有进程获取其数据时等待几秒钟并不是太大的开销。
  3. 如果您有并行文件系统,则可以使用 MPI 的并行 I/O 例程,以便每个进程仅读取其需要的输入数据部分。

关于file-io - MPI-FORTRAN 的文件 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9943688/

相关文章:

c++ - 使用 C++ STL 读取大于 4GB 的文件

regex - 说服 meld 忽略特定的代码行?

fortran - Fortran 2003 中类型和类的区别

c++ - 独立并行写入 C++ 和 MPI 中的文件

c++ - 将 MPI 等级分配给 gpu

java - 就性能而言,在什么时候用 BufferedOutputStream 包装 FileOutputStream 才有意义?

c - fread/fwrite 将 size 和 count 作为参数的基本原理是什么?

python - 由于在 Mac OS X 上 brew install gcc 后缺少 fortran 编译器,仍然无法安装 scipy

mpi - 确保混合 MPI/OpenMP 在不同的内核上运行每个 OpenMP 线程

python - 文件大小是否会影响 python 中写入的性能