【问题标题】:Can multiple MPI processes read from a single file?多个 MPI 进程可以从单个文件中读取吗?
【发布时间】:2021-03-21 09:19:28
【问题描述】:
光盘上有一个文件,其数据是我项目的所有 MPI 进程都必须拥有的。一种方法是单个进程读取数据并将其广播给所有进程。另一种方法可能是使用 MPI I/O,但我一点也不熟悉。由于文件非常小,而且每次运行开始时只执行一次,我决定使用最简单的方法:每个进程直接从磁盘读取数据。它起作用了,至少在 Linux 上是这样。我有点担心,也许一般不能假设所有操作系统都允许从一个文件中同时读取多个进程。
【问题讨论】:
标签:
io
operating-system
mpi
【解决方案1】:
当您启动一堆 MPI 进程时,典型的操作系统会将它们简单地视为一堆不相关的进程。因此,当他们同时打开现有文件进行阅读时,就好像您在文本编辑器中多次打开该文件一样。这是否允许取决于程序本身是否打开文件以进行独占访问。
这意味着产生的行为与其说是操作系统的属性,不如说是您的 MPI 进程的属性。我认为当你打开一个文件进行阅读时,大多数操作系统的默认设置是不使用独占访问。但是,当您打开文件进行写入时,它可能已经不同了。
【解决方案2】:
您可能会发现读取文件的每个进程都会在某个时候停止缩放。即使文件很小,想象一下如果要同时读取一万个或更多进程。
如果您让每个进程都使用MPI_File_read_all(注意 _all)读取文件,则此集体调用将优化每个人都读取文件的情况。