2013-03-18 48 views
3

當我運行我的小規模的並行代碼,我通常輸出N個文件(N是處理器的數目)的形式fileout.dat.xxx其中xxx是處理器號碼(使用I3.3),然後只cat它們放入一個代碼完成後單個fileout.dat文件。並行IO&追加

我的問題是我可以在OPEN語句中使用ACCESS='append'POSITION='append'並讓所有處理器寫入同一個文件?

回答

3

在實踐中,沒有。 POSITION ='append'僅僅表示在執行open語句之後文件指針將位於文件的末尾。然而,可以改變文件位置,例如,用BACKSPACE,REWIND或其他語句。因此,Fortran的位置=「追加」不符合POSIX的O_APPEND,因此一個POSIX操作系統不能保證所有的寫操作只追加到該文件,並不會覆蓋舊數據。

Furhtermore,如果你在集羣上運行的代碼,請注意O_APPEND不會對許多網絡文件系統,如NFS工作。

爲了在多個進程/線程寫入單個文件的情況下執行並行I/O,請使用ACCESS ='direct'或ACCESS ='stream'並讓進程同意要寫入的記錄/字節範圍。