3

小規模な並列コードを実行するとき、通常は N 個のファイル (Nはプロセッサの数)をプロセッサ番号 ( を使用)の形式fileout.dat.xxxで出力し、コードが終了したらそれらだけを 1 つのファイルに出力します。xxxI3.3catfileout.dat

私の質問は、ステートメントでACCESS='append'orを使用して、すべてのプロセッサに同じファイルに書き込むことはできますか?POSITION='append'OPEN

4

1 に答える 1

3

実際には、いいえ。POSITION='append' は、open ステートメントが実行された後、ファイル ポインターがファイルの最後にあることを示しているだけです。ただし、BACKSPACE、REWIND などのステートメントを使用して、ファイルの位置を変更することは可能です。したがって、Fortran POSITION='append' は POSIX O_APPEND に対応していないため、POSIX OS は、すべての書き込みがファイルに追加されるだけで、古いデータを上書きしないことを保証できません。

さらに、コードをクラスターで実行する場合は、NFS などの多くのネットワーク ファイル システムでは O_APPEND が機能しないことに注意してください。

複数のプロセス/スレッドが 1 つのファイルに書き込みを行う並列 I/O を行うには、ACCESS='direct' または ACCESS='stream' を使用し、どのレコード/バイト範囲に書き込むかについてプロセスが合意するようにします。

于 2013-03-18T20:23:27.263 に答える