当我运行小规模并行代码时,我通常以fileout.dat.xxx
格式输出N个文件(N为处理器数),其中xxx
是处理器编号(使用I3.3
在代码完成后,将它们cat
放入单个fileout.dat
文件中。
我的问题是我可以在ACCESS='append'
语句中使用POSITION='append'
或OPEN
并让所有处理器都写入同一个文件吗?
答案 0 :(得分:3)
在实践中,没有。 POSITION ='append'仅表示执行open语句后文件指针将位于文件末尾。但是,可以改变文件位置,例如,使用BACKSPACE,REWIND或此类声明。因此,Fortran POSITION ='append'与POSIX O_APPEND不对应,因此POSIX OS无法确保所有写入仅附加到文件并且不会覆盖旧数据。
此外,如果您在群集上运行代码,请注意O_APPEND不适用于许多网络文件系统,例如NFS。
为了使用多个进程/线程写入单个文件来执行并行I / O,请使用ACCESS ='direct'或ACCESS ='stream',并让进程就要写入的记录/字节范围达成一致。 / p>