-assume buffered_io
ifort (またはを使用) でバッファリングされた I/O を有効にすることに関する Intel ドキュメントを読みましたが、FORT_BUFFERED=true
これはファイルへの直接出力で機能します。ただし、ファイルにリダイレクトされるstdout (write(*,*)
または など) に書き込む大規模なアプリケーションがあります。write(stdout,*)
この場合、どちらのバッファリング手法も機能しません。
ファイルに直接書き込むようにコードをリファクタリングする以外に、ifort を使用して stdout でバッファリングされた I/O を有効にする方法はありますか? これは、gfortran などではデフォルトで有効になっています。
SLES 11 で ifort 12.0 を使用しています。
更新: コメントありがとうございます。回避策として、stdbuf および/またはバッファリング プログラム (tee など) を介したパイプ処理を調査しています。まだ、測定可能な違いを生み出すことはできませんでした。
更新 2:
私は Douglas の提案でいくつかの実験を試み、別のプログラムを介してパイプしました。tee と cat の両方がバッファリングします。実際、バッファリングはパイプ自体によって約 8K で行われるようです。ただし、元の write() 呼び出し、パイプ、およびパイピング プログラムのシステム コール (tee、cat など) のオーバーヘッドが高すぎて、これを実行可能なソリューションにすることはできません。