計算中にリアルタイムで結果が出力されない
(質問の補足)
-
計算機で下記のような処理を行ったとします。
./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の計算結果をリアルタイムに確認したい