計算中にリアルタイムで結果が出力されない

(質問の補足)

    計算機で下記のような処理を行ったとします。
    ./a.out > output.txt
    a.outの実行結果はoutput.txtに書き込まれるのですが、計算中にoutput.txtを確認しても、出力結果が反映されるのが非常に遅いのではないか、という質問です。

 
(回答)
データ書き込みは、下記のような仕組みで行っています。
それぞれバッファやキャッシュに溜め込む形で、書き出し処理を行っているため、フロントエンドでファイルが確認できるまで時間を要します。
 

    1. FORTRAN側の動作

    プログラムからの print 実行時、F_SETBUF の設定により、ファイルへのwrite 発行契機が変わります。

      - 環境変数F_SETBUFが未設定の場合は、wsize のサイズ分だけバッファされたのち、writeが発行されます
      - F_SETBUF=0 設定した場合は、print毎でwriteを発行します

 

    2. ファイルシステム側の動作

    write が発行されると、データキャッシュに writeデータを書き込みます。データキャッシュ内のデータは、下記を契機に IOサーバへデータを送信します。

      - プログラムでデータのフラッシュを実行した場合(ex. FORTRANの call flush(6) / Cの fsync(2))
      - ファイルをクローズした場合
      - データキャッシュが一杯になった場合

 
「1. FORTRAN側の動作」による影響は小さいと予想されるため、時間がかかる原因としては主に「2. ファイルシステム側の動作」のデータキャッシュサイズによるものです。
 
リアルタイムに近い出力を希望される場合、FORTRANプログラム内にて、print実行後に、call flush(6) を実行し、標準出力への内容をフラッシュしていただく必要があります。
これにより、flush実行毎にリダイレクト先ファイルへ反映されます。
※当センターのファイルシステムは、ScateFS(Scalable Technology File System)という独自のファイルシステムを搭載しております。「2.ファイルシステム側の動作」の挙動はScateFSの仕様によるものです。
※sxf03コンパイラは対応していません。
 

関連するFAQ
SX-ACEの標準出力で、MPIの計算結果をリアルタイムに確認したい