2013-03-18 43 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'并让进程同意要写入的记录/字节范围。