3
當我運行我的小規模的並行代碼,我通常輸出N個文件(N是處理器的數目)的形式fileout.dat.xxx
其中xxx
是處理器號碼(使用I3.3
),然後只cat
它們放入一個代碼完成後單個fileout.dat
文件。並行IO&追加
我的問題是我可以在OPEN
語句中使用ACCESS='append'
或POSITION='append'
並讓所有處理器寫入同一個文件?
當我運行我的小規模的並行代碼,我通常輸出N個文件(N是處理器的數目)的形式fileout.dat.xxx
其中xxx
是處理器號碼(使用I3.3
),然後只cat
它們放入一個代碼完成後單個fileout.dat
文件。並行IO&追加
我的問題是我可以在OPEN
語句中使用ACCESS='append'
或POSITION='append'
並讓所有處理器寫入同一個文件?
在實踐中,沒有。 POSITION ='append'僅僅表示在執行open語句之後文件指針將位於文件的末尾。然而,可以改變文件位置,例如,用BACKSPACE,REWIND或其他語句。因此,Fortran的位置=「追加」不符合POSIX的O_APPEND,因此一個POSIX操作系統不能保證所有的寫操作只追加到該文件,並不會覆蓋舊數據。
Furhtermore,如果你在集羣上運行的代碼,請注意O_APPEND不會對許多網絡文件系統,如NFS工作。
爲了在多個進程/線程寫入單個文件的情況下執行並行I/O,請使用ACCESS ='direct'或ACCESS ='stream'並讓進程同意要寫入的記錄/字節範圍。