九州大学 情報基盤研究開発センター 研究用計算機システムニュース No.421                                   2018.03.15

+--------------------------------------------------------------------------+ |1.富士通 Fortran コンパイラのデータの処理異常について          | +--------------------------------------------------------------------------+ ----------------------------------------------------------------- 情報基盤研究開発センター研究用計算機システムWWWホームページ https://www.cc.kyushu-u.ac.jp/scp/ ----------------------------------------------------------------- 1.富士通 Fortran コンパイラのデータの処理異常について スーパーコンピュータシステム ITO の Fortran コンパイラにおいて、データの処理異常 となる障害が見つかりました。障害は以下の条件を満たした場合に発生するもので、富士通 製の Technical Computing Suite の Fortran のみが該当します。 障害修正時期は3月末。心当たりのある方はセンター(request(at)iii.kyushu-u.ac.jp) までご相談ください。 ●現象と条件 流れ探査入出力において、以下の現象が発生する場合があります。 (a) (1)~(3)の条件を満たした場合、データが書き出されない場合があります。 または、 (b) (1)~(7)の条件を満たした場合、INQUIRE 文に指定した POS 指定子および SIZE指定子の返却値が正しくない場合があります。 [条件] (1) 書式なし流れ探査として接続している。かつ、 (2) 出力並びに以下を指定した書式なし流れ探査 write 文を実行している。かつ、 (2-1) 長さ 0 の文字列の出力並びを指定している。または、 (2-2) 空の出力並びを指定している。 (3) (2)で実行した書式なし流れ探査 write 文の前後で、(2)以外の書式なし 流れ探査 write 文を実行している。または、 (4) 書式付き流れ探査入出力として接続している。かつ、 (5) 書式付き流れ探査停留write文を実行している。かつ、 (6) (5)で書き出したファイルの現在位置よりも、小さい位置に、書式付き流れ探査 停留write文でデータを書き出している。かつ、 (7) (6)で実行した書式付き流れ探査停留write文の直後に、書式付き流れ探査 停留read文を実行している。 <プログラム例> PROGRAM TEST INTEGER(8) :: I,J,K,IDATA INTEGER, DIMENSION(1:25) :: PART CHARACTER(LEN=1), DIMENSION(1:30) :: TEMPARRAY TEMPARRAY(1:30)(1:1) = '0' I=1 DO J=1,25 PART(J)=J ENDDO OPEN(10,ACCESS='STREAM',FORM='UNFORMATTED') WRITE(10)PART WRITE(10)TEMPARRAY(1:((I-1)*10)) CLOSE(10) OPEN(10,ACCESS='STREAM',FORM='UNFORMATTED') WRITE(10)TEMPARRAY(1:((I-1)*10)) WRITE(10)PART CLOSE(10) OPEN(10,ACCESS='STREAM',FORM='FORMATTED') DO K=1,10 WRITE(10,'(I4)',ADVANCE='NO')K ENDDO WRITE(10,'(I4)',ADVANCE='NO',POS=1) READ(10,'(I4)',ADVANCE='NO')IDATA INQUIRE(10,SIZE=IS,POS=IP) CLOSE(10) END PROGRAM TEST ●回避方法 以下のいずれかのプログラム修正により、条件(1)~(3)により発生する現象(a)または (b)を回避することができます。 条件(4)~(7)により発生する現象(b)については、現在のところ回避方法はありません。 [プログラム修正例] ・出力並びの長さをチェックし、0バイトであれば、書き出さないようにします。 長さはINQUIRE文のIOLENGTH指定子で取得することができます。 OPEN(10,ACCESS='STREAM',FORM='UNFORMATTED') WRITE(10)PART INQUIRE(IOLENGTH=LEN)TEMPARRARY(1:(i-1)*10) IF (LEN.NE.0)WRITE(10)TEMPARRARY(1:(i-1)*10) CLOSE(10) ・ACCESS='SEQUENTIAL'とFORM='BINARY'を使用する。 OPEN(10,ACCESS='SEQUENTIAL',FORM='BINARY') WRITE(10)PART WRITE(10)TEMPARRARY(1:(i-1)*10) CLOSE(10) ●確認方法 実行可能ファイルを生成するために使用しているプログラム全体に対して、以下の grepコマンドを実行してください。 ・現象(a)の確認について 以下の手順でキーワードを検索してください。 (1) grep -i 'STREAM' 【Fortranソースプログラム】 - "STREAM"という文字列をプログラム中に含まない場合、 障害条件には該当しません。(大文字/小文字は区別しません) (2) grep -i 'OPEN' 【Fortranソースプログラム】 - "OPEN"という文字列をプログラム中に含まない場合、 障害条件には該当しません。(大文字/小文字は区別しません) (3) grep -i 'UNFORMATTED' 【Fortranソースプログラム】 - "UNFORMATTED"という文字列をプログラム中に含まない場合、 障害条件には該当しません。(大文字/小文字は区別しません) (4) grep -i 'WRITE' 【Fortranソースプログラム】 - "WRITE"という文字列をプログラム中に含まない場合、 障害条件には該当しません。(大文字/小文字は区別しません) - "WRITE"を検出した場合、検出したWRITE文について、 以下を確認してください。 (4-1) 書式指定がある場合、障害条件に該当しません。 (4-2) (1)および(2)に該当するOPEN文のUNIT番号と 異なる場合、障害条件には該当しません。 (4-3) WRITE文の並びに以下の指定がある場合は、障害条件に 該当しません。 - 定数 - スカラ変数 - 全配列 - 配列要素 - 構造体成分 (1)~(4)がすべて検出され、かつ、以下の1)~4)を満たしているプログラムは、 障害が発生します。 1) 値が"STREAM"であるACCESS指定子を指定したOPEN文が存在する。 2) 1)のOPEN文において、FORM指定子の値が"UNFORMATTED"である。 または、FORM指定子を省略している。 3) 1)のOPEN文で指定したUNIT番号と同じUNIT番号をWRITE文に 指定している。 4) WRITE文の並びが空であるか長さ0の文字列である。 ・現象(b)の確認について 以下の手順でキーワードを検索してください。 (1) grep -i 'STREAM' 【Fortranソースプログラム】 - "STREAM"という文字列をプログラム中に含まない場合、 障害条件には該当しません。(大文字/小文字は区別しません) (2) grep -i 'OPEN' 【Fortranソースプログラム】 - "OPEN"という文字列をプログラム中に含まない場合、 障害条件には該当しません。(大文字/小文字は区別しません) (3) grep -i 'INQUIRE' 【Fortranソースプログラム】 - "INQUIRE"という文字列をプログラム中に含まない場合、 障害条件には該当しません。(大文字/小文字は区別しません) (4) grep -i 'POS' 【Fortranソースプログラム】 - ”POS"という文字列をプログラム中に含まない場合、 障害条件には該当しません。(大文字/小文字は区別しません) (5) grep -i 'SIZE' 【Fortranソースプログラム】 - ”SIZE"という文字列をプログラム中に含まない場合、 障害条件には該当しません。(大文字/小文字は区別しません) (6) grep -in 'WRITE' 【Fortranソースプログラム】 - "WRITE"という文字列をプログラム中に含まない場合、 障害条件には該当しません。(大文字/小文字は区別しません) - "WRITE"を検出した場合、検出したWRITE文について、 以下を確認してください。 (6-1) (1)および(2)で検索されたOPEN文のUNIT番号と 異なる場合、障害条件には該当しません。 (6-2) 書式指定がない場合、WRITE文の並びに以下の指定がある 場合は、障害条件に該当しません。 - 定数 - スカラ変数 - 全配列 - 配列要素 - 構造体成分 (6-3) 書式指定がある場合、以下の指定子または書式指定がない ならば、障害条件に該当しません。 - TL編集記述子 - POS指定子 (7) grep -in 'READ' 【Fortranソースプログラム】 - "READ"という文字列をプログラム中に含まない場合、 障害条件には該当しません。(大文字/小文字は区別しません) - "READ"を検出した場合、以下を確認してください。 (7-1) (1)および(2)で検索されたOPEN文のUNIT番号と 異なる場合、障害条件には該当しません。 (7-2) 書式指定がない場合、障害条件には該当しません。 (1)~(7)がすべて検出され、かつ、case1)またはcase2)を満たしている プログラムは、障害が発生します。 case1) 1) 値が"STREAM"であるACCESS指定子を指定したOPEN文が存在する。 2) 1)のOPEN文において、FORM指定子の値が"UNFORMATTED"であるか、 FORM指定子を省略している。 3) 1)のOPEN文で指定したUNIT番号と同じUNIT番号をWRITE文に 指定している。 4) WRITE文の並びが空であるか長さ0の文字列である。 5) POS指定子またはSIZE指定子を指定したINQUIRE文で問い合わせる ファイルが、1)のOPEN文で接続したファイルである。 - 1)で指定したUNIT番号と同じUNIT番号をINQUIRE文に 指定している。または、 - 1)のOPEN文で結合したファイル名をINQUIRE文に指定している。 case2) 1) 値が"STREAM"であるACCESS指定子を指定したOPEN文が存在する。 2) 1)のOPEN文において、FORM指定子の値が"FORMATTED"である。 3) 1)のOPEN文で指定したUNIT番号と同じUNIT番号をWRITE文に 指定している。 4) WRITE文にTL指定子またはPOS指定子を指定し、現在位置より前にデータ を書き出している。 5) 4)の直後に4)のWRITE文と同じUNIT番号を指定したREAD文を実行している。 6) POS指定子またはSIZE指定子を指定したINQUIRE文で問い合わせる ファイルが、1)のOPEN文で接続したファイルである。 - 1)で指定したUNIT番号と同じUNIT番号をINQUIRE文に 指定している。または、 - 1)のOPEN文で結合したファイル名をINQUIRE文に指定している。 [問い合せ窓口] 九州大学 情報統括本部 HPC事業室 全国共同利用担当 Mail: request(at)iii.kyushu-u.ac.jp ※(at)は@に置き換え Tel : 092-802-2683