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