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

+--------------------------------------------------------------------------+ |1.Fortranコンパイラの実行結果異常について                | |  (スーパーコンピュータシステム, 高性能演算サーバシステム)       | +--------------------------------------------------------------------------+ ----------------------------------------------------------------- 情報基盤研究開発センター研究用計算機システムWWWホームページ     http://www.cc.kyushu-u.ac.jp/scp/ ----------------------------------------------------------------- 1.Fortranコンパイラの実行結果異常について   (スーパーコンピュータシステム, 高性能演算サーバシステム) スーパーコンピュータシステムFX10, 高性能演算サーバシステムCX400 の Fortran コンパイラにおいて,実行結果異常となる障害が見つかりました.障害は,以下の 条件をすべてみたした場合に発生するもので,富士通製の Technical Computing Suite の Fortran のみが該当します.障害は11月以降の定期保守時に修正予定です. 心当たりのある方はセンターまで( E-mail: request(at)iii.kyushu-u.ac.jp) ご相談願います. <現象と条件> 以下の条件をすべて満たした場合,実行結果に誤りが生じることがあります. (1) 以下の翻訳時オプションがすべて有効である (1-1) -O2 以上 (*1) (1-2) -Kunroll (*2) (1-3) -Keval (*3) (2) ソースプログラムにループが存在する (3) (2)のループ内にIF構文が存在する (4) (3)のIF構文の条件式はループのDO変数に依存し,かつ2つ以上の判定がある (5) (3)のIF構文内に手続呼出しが存在する (6) (5)の手続呼出しの実引数には以下の(6-1), (6-2)のいずれかを満たす引数が 2つ以上存在する (6-1) 以下のすべてを満たす配列要素 (6-1-1) ALLOCATABLE属性をもつ2次元以上の配列 (6-1-2) 配列割付け時の1次元目の上下限値が静的に不明 (6-1-3) 配列要素の2次元目以降の添字がループのDO変数 (6-2) 以下のすべてを満たすスカラ変数名 (6-2-1) ループ内でDO変数を含んだ計算結果を代入 (6-2-2) 結合する仮引数にINTENT(IN)属性を指定 (6-2-3) (6-2-2)は明示的引用仕様をもつ *1: 翻訳時オプション-Kfastで-O3が誘導されます *2: 翻訳時オプション-O2以上で誘導されます *3: 翻訳時オプション-Kfastで-Kevalが誘導されます <プログラム例> module tmp_mod contains subroutine calc(val, x) integer, intent(out) :: val integer, intent(in) :: x ! 条件(6-2-2) val = x end subroutine calc end module subroutine sub(n, x, k1, k2, max) use tmp_mod !条件(6-2-3) integer :: i,n,x,a integer,dimension(1:n) :: k1,k2 integer,allocatable :: val(:,:) ! 条件(6-1-1) allocate(val(max,1:n)) ! 条件(6-1-2) do i=1,n ! 条件(2) ループA if ((k1(i) == 0) .and. (k2(i) == 0)) then ! 条件(3), (4) a = i * n + x ! 条件(6-2-1) call calc(val(1,i), a) ! 条件(5), (6), (6-1-3) end if end do deallocate(val) end subroutine sub < 回避方法> 以下のいずれかの方法で回避できます. a) 翻訳時オプション -O1 以下を有効にする b) 翻訳時オプション -Knounroll を有効にする c) 翻訳時オプション -Knoeval を有効にする d) 翻訳時オプション -Kocl を有効とし,かつソースプログラムの対象ループ (ループA)に !ocl nounroll を追記する e) 翻訳時オプション -Kocl を有効とし,かつソースプログラムの対象ループ (ループA)に !ocl noevalを追記する [問い合せ窓口] 九州大学 情報統括本部 HPC事業室 全国共同利用担当 Mail: request(a)iii.kyushu-u.ac.jp Tel : 092-642-2308