我在使用Open MPI的多进程中运行Fortran代码。每个进程都需要打开并写入许多文件。在运行期间,可能会打开两个不同的进程,并且同时编写具有相同unit
号码的不同文件。Fortran MPI代码打开具有相同单元编号的不同文件
processA: open(unit=10, file1)
processB: open(unit=10, file2)
这会导致问题吗?
我在使用Open MPI的多进程中运行Fortran代码。每个进程都需要打开并写入许多文件。在运行期间,可能会打开两个不同的进程,并且同时编写具有相同unit
号码的不同文件。Fortran MPI代码打开具有相同单元编号的不同文件
processA: open(unit=10, file1)
processB: open(unit=10, file2)
这会导致问题吗?
是的,这是可能的,没有它不应该导致问题。 MPI处理所有活着,并且不知道其他进程的内存(因此单位编号)。尽管您应该小心不要创建太多的文件,但如果使用数千个进程,则可能会遇到文件系统的限制。
我知道不同进程的变量存在于自己的地址空间中,除非调用MPI子程序,否则不会相互通信。我不确定涉及系统I/O的文件。显然,如果两个进程打开相同的文件(相同的文件名),这会导致一个问题。你能详细谈谈单元号码和内存分配之间的关系吗?我试图从硬件层面彻底理解事情。 –
该单元只是文件描述符的句柄,该句柄在其内存中保存以引用该文件。它与磁盘上的某些东西没有直接关系。 – haraldkl
请注意,MPI与OpenMPI不同。后者只是前者的许多实现之一。 –
感谢您的澄清! –