我在使用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不同。後者只是前者的許多實現之一。 –
感謝您的澄清! –