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