3

当我运行我的小规模并行代码时,我通常以处理器编号(使用)的形式输出 N 个文件(N 是fileout.dat.xxx处理器xxx的数量I3.3),然后在代码完成后将cat它们放入一个文件中。fileout.dat

我的问题是我可以在语句中使用ACCESS='append'or并让所有处理器写入同一个文件吗?POSITION='append'OPEN

4

1 回答 1

3

在实践中,没有。POSITION='append' 仅表示执行 open 语句后文件指针将位于文件末尾。但是,可以更改文件位置,例如使用 BACKSPACE、REWIND 或此类语句。因此,Fortran POSITION='append' 不对应于 POSIX O_APPEND,因此 POSIX 操作系统不能确保所有写入仅附加到文件并且不会覆盖旧数据。

此外,如果您在集群上运行代码,请注意 O_APPEND 不适用于许多网络文件系统,例如 NFS。

为了在多个进程/线程写入单个文件的情况下进行并行 I/O,请使用 ACCESS='direct' 或 ACCESS='stream' 并让进程就要写入的记录/字节范围达成一致。

于 2013-03-18T20:23:27.263 回答