1.Fortran, C, C++ 実行結果異常について(高性能演算サーバ)
九州大学 情報基盤研究開発センター 研究用計算機システムニュース No.258 2012.05.02
+--------------------------------------------------------------------------+ |1.Fortran, C, C++ 実行結果異常について(高性能演算サーバ) | +--------------------------------------------------------------------------+ ----------------------------------------------------------------- 情報基盤研究開発センター研究用計算機システムWWWホームページ http://www.cc.kyushu-u.ac.jp/scp/ ----------------------------------------------------------------- 1.Fortran, C, C++ 実行結果異常について(高性能演算サーバ) 高性能演算サーバシステム(ホスト名: sugoka)の Fortran, C, C++ コンパイラに おいて,実行結果異常となる障害が合計5件見つかりました.障害は条件をすべてみ たした場合にのみ発生する可能性があるものです. 障害修正は,現在の段階では未完了ですのでご注意下さい. 心当たりのある方はセンターまで( E-mail: request(a)iii.kyushu-u.ac.jp) ご相談願います. =========================================================================== [障害 1] PG88209 (Fortran) <対象言語> Fortran <現象と条件> 以下の条件をすべてみたす場合,実行結果に誤りが生じる場合があります. 1) 翻訳時オプション -Cpp を指定している,または Fortran原始プログラムの ファイルサフィックスが .FOR, .F, .F90, F95または .F03である. 2) 翻訳時オプション -Cfpp を指定している. 3) 固定形式のソースプログラムである. 4) 継続行の7桁目に英字または数字が現れる. 5) 4)の継続行の前の行の72桁目に英字または数字が現れる. 6) 4)の文の次の行の1桁目は文字 C, c または * で始まる注釈行である. 7) 6)の注釈行の73桁以降に空白以外の文字が現れる. <プログラム例> !桁数: !23456789012345678901234567890123456789012345678901234567890123456789012 ! integer:: k k= 1 &1 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC999999 <回避方法> 翻訳時オプション -Cfpp を無効にすることで回避できます. =========================================================================== [障害 2] PG88242 (Fortran) <対象言語> Fortran <現象と条件> 以下の条件をすべてみたす場合,実行結果に誤りが生じる場合があります. 1) 翻訳時オプション-Kmfunc=2 が有効である. 2) ループが存在する. 3) 2)のループ内にマルチ演算関数化の対象となる組込み関数および演算が複 数存在する(※). 4) 3)の関数は同一変数を引数としている. 5) 3)のいずれかの関数は,関数結果と引数が同一変数である. <プログラム例> do i=1,100 ! 2)に該当 ... a(i)=e(i)**d(i) ! 3),4)に該当 (マルチ演算関数1) b(i)=f(i)**d(i) ! 3),4)に該当 (マルチ演算関数1) c(i)=sin(d(i)) ! 3),4)に該当 (マルチ演算関数2) d(i)=cos(d(i)) ! 3),4),5)に該当(マルチ演算関数2) end do ※)マルチ演算関数化された場合,翻訳時メッセージjwd8300i-iが出力されます. <回避方法> 翻訳時オプション -Kmfunc=1 または -Knomfunc を指定することで回避できます. =========================================================================== [障害 3] PG88261 (Fortran) <対象言語> Fortran <現象と条件> 以下の条件をすべてみたす場合,実行結果に誤りが生じる場合があります. 1) 翻訳時オプション -Kparallel および -Karray_private が有効である. 2) 多重ループが存在する. 3) 2)のループ内に複数のループが存在する. 4) 2)のループ間で定義および参照される配列が存在する. 5) 4)の配列の添え字に2)の多重ループの最外ループのDO変数が記述されていない <プログラム例> do k=1,n ! 2)に該当 do j1=1,10 ! 3)に該当 a(j1)= b(j1,k) ! 4),5)に該当 end do do j2=1,10 ! 3)に該当 wk = a(1)+a(2)+... ! 4),5)に該当 do i=1,n ! 3)に該当 ... end do end do end do <回避方法> 翻訳時オプション -Knoparallel または -Knoarray_private を指定することで 回避できます. =========================================================================== [障害 4] PG88270 (Fortran) <対象言語> Fortran <現象と条件> 以下の条件をすべてみたす場合,実行結果に誤りが生じる場合があります. 1) 翻訳時オプションとして最適化レベル -O3 以上が有効である. 2) 多重ループが存在する. 3) 2)の多重ループの外側DO変数を内側のDO文の初期値または終値で参照している 4) 2)の多重ループ内に行列積の演算が存在する. 5) 2)のループはmatmulライブラリに変換されている(※). <プログラム例> do k=1,n ! 2)に該当 do j=1,m ! 2)に該当 do i=1,j ! 2),3)に該当 a(j,k) = a(j,k)-b(k,i)*a(j,i) ! 4)に該当 end do end do end do ※) matmulライブラリに変換された場合,翻訳時メッセージjwd8331i-iが 出力されます. <回避方法> 最適化レベル -O2 以下を指定することで回避できます. =========================================================================== [障害 5] PG88428(Fortran), PG88495(C), PG88496(C++) <対象言語> Fortran, C, C++ < 現象と条件> 以下の条件をすべてみたす場合,実行結果に誤りが生じる場合があります. 1) 翻訳時オプションとして最適化レベル-O1以上(※)が有効である. 2) ループ内で更新される配列が存在する. 3) 2)の配列はcall文の引数に現れる. 4) 3)の配列の添え字は定数である. ※) Fortran の場合はデフォルトで有効になります. <プログラム例> do i=1,10 ! 2) に該当 a(i)=i ! 2), 4)に該当 end do call sub2 (a(5)) ! 3)に該当 <回避方法> 翻訳時オプション -O0 を指定することで回避できます。 =========================================================================== 【障害に該当するかどうかの確認方法】 以下のチェックコンパイラで確認できます. ・Fortranチェック用コンパイラ /opt/FJSVplang/checkbin/chk_frt ・Cチェック用コンパイラ /opt/FJSVplang/checkbin/chk_fcc ・C++チェック用コンパイラ /opt/FJSVplang/checkbin/chk_FCC チェック用コンパイラは対話的に利用可能です. [Fortranチェック用コンパイラ] % chk_frt オプションまたはファイル名の並び ※注意事項 通常の翻訳とは以下の点が異なります. 1) 以下のサフィックスの入力ファイルのみ処理対象となります. Fortran : .f / .f90 / .f95 / .for / .F / .F90 / .F95 / .FOR 2) サフィックスが .o または .s であるファイルが指定された場合, それらのファイルは処理対象になりません.指定された場合,メッセージで お知らせします. 3) -c および -o 翻訳オプションは無効となります.指定された場合, メッセージでお知らせします. 4) chk_frtにおいて -M オプションを指定した場合,指定されたディレクトリは 無視され /var/tmp/FjcheckcompModule### (###は可変) が使用されます. また以下のメッセージが出力されますが,無視してください. frt: "/var/tmp/FjcheckcompModule###": 指定されたディレクトリは 存在しません. ディレクトリを作成します. また -Am オプションを指定して -M オプションを指定しない場合も上記の メッセージが出力されますが,無視してください. 5) オブジェクトファイル,モジュール翻訳情報ファイルは作成されません. 6) 結合編集処理(実行可能ファイルの作成)は行なわれません. 7) 障害の発生する可能性があるときに,以下のメッセージを出力します. ***** PGXXXXX found ***** XXXXX に障害項目に対応する番号が表示されます. 他のメッセージが出力された場合は,修正済みの障害に該当する可能性が ありますので,センターまでお問い合わせ願います. [Cチェック用コンパイラ] % chk_fcc オプションまたはファイル名の並び ※注意事項 1) オブジェクトファイルは /var/tmp に出力し,終了時削除します. 2) サフィックスが .o または .s であるファイルが指定された場合, それらのファイルは処理対象になりません.指定された場合,メッセージで お知らせします. 3) 結合編集処理(実行可能ファイルの作成)は行なわれません. 4) 障害の発生する可能性があるときに,以下のメッセージを出力します. ***** PGXXXXX found ***** XXXXX に障害項目に対応する番号が表示されます. 他のメッセージが出力された場合は,修正済みの障害に該当する可能性が ありますので,センターまでお問い合わせ願います. [C++チェック用コンパイラ] % chk_FCC オプションまたはファイル名の並び ※注意事項 1) オブジェクトファイルは /var/tmp に出力し,終了時削除します. 2) サフィックスが .o または .s であるファイルが指定された場合,それらのファ イルは処理対象になりません.指定された場合,メッセージでお知らせします. 3) 結合編集処理(実行可能ファイルの作成)は行なわれません. 4) 障害の発生する可能性があるときに,以下のメッセージを出力します. ***** PGXXXXX found ***** XXXXX に障害項目に対応する番号が表示されます. 他のメッセージが出力された場合は,修正済みの障害に該当する可能性が ありますので,センターまでお問い合わせ願います.