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

+--------------------------------------------------------------------------+
|1.富士通 Fortran/C/C++ コンパイラの実行結果異常のお知らせ               |
+--------------------------------------------------------------------------+ 

-----------------------------------------------------------------
 情報基盤研究開発センター研究用計算機システムWWWホームページ
    https://www.cc.kyushu-u.ac.jp/scp/
-----------------------------------------------------------------

1.富士通 Fortran/C/C++ コンパイラの実行結果異常のお知らせ
    (スーパーコンピュータシステム)

スーパーコンピュータシステム ITO の Fortran/C/C++コンパイラにおいて,実行結
果異常となる障害が見つかりました.障害は以下の条件を満たした場合に発生するも
ので,富士通製の Technical Computing Suite Fortran, C, C++ のみが該当します.
なお,センター推奨の -Kfast オプションは条件外です.

障害修正時期は未定です.心当たりのある方はセンター
(request(at)iii.kyushu-u.ac.jp) までご相談ください.

●条件
 1) 以下の翻訳時オプションがすべて有効である.
    - -O2以上
    - -Ksimd=2
    - -KAVX または -KCORE_AVX2
 2) ループが存在する.
 3) 2)のループ中に最大値または最小値を求めるIF文が存在する.
 4) 3)の演算では,IF文より前に,最大値または最小値の候補を作業変数に格納する.
 5) 4)で格納した作業変数を 3)の最大値または最小値を求めるIF文および演算に用いる.
 6) 3)のIF文が複数存在する.
 7) 6)の複数のIF文は 4)と5)で用いる作業変数として同じ変数を使用する.
 8) 4)と5)の演算にかかわる変数または配列はすべて同じ型である.
 9) 8)の型は整数型,単精度実数型,または倍精度実数型である.
10) 2)のループはSIMD化される.

<プログラム例>
以下のプログラムで -O2 -Ksimd=2 -KAVX の場合に結果を誤ります.

program main
  real(8) dxmax(2)
  real(8) dx1(8)/8*1/,dx2(8)/8*2/,tmp
  dxmax(1) = 0
  dxmax(2) = 0
  do i = 1, 8
     tmp = dx1(i)
     if (tmp > dxmax(1)) dxmax(1) = tmp
     tmp = dx2(i)
     if (tmp > dxmax(2)) dxmax(2) = tmp
  end do
  write(6,*) dxmax(1),dxmax(2)
end program

●現象に該当するかどうかの確認方法
チェックコンパイラが利用可能です.

[設置場所]
 /home/app/check_compiler/PH19689/check_compiler/bin

[メッセージ出力例]
 該当障害が検出された場合には、以下の形式でメッセージが標準出力に出力されます。
   " ***** 該当障害管理番号 found ***** "ソースファイル名", line 行番号"

  例) ***** PH19689 found ***** "sample.f90", line 11

[利用例1]
$ /home/app/check_compiler/PH19689/check_compiler/bin/chk_frt -Kfast,AVX,simd=2 sample.f90

sample.f90:
 ***** PH19689 found ***** "sample.f90", line 11

[利用例2]
$ /home/app/check_compiler/PH19689/check_compiler/bin/chk_fcc -Kfast,AVX,simd=2 sample.c

sample.c:
 ***** PH19689 found ***** "sample.c", line 8


[注意事項]
このスクリプトファイルを使用する場合,通常の翻訳とは以下の点が異なります.

1 サフィックスが .o または .s であるファイルを指定した場合それらのファイルは処理対象
になりません.指定した場合,メッセージでお知らせします.
   出力メッセージ例)"chk_frt: sample.o is invalid file"

2) 以下の翻訳オプションは無効となります.指定した場合、メッセージでお知らせします.
        -c / -o / -E / -P / -S
   出力メッセージ例)"chk_frt: -c is invalid option"

3) chk_frt において -M オプションを指定した場合,指定したディレクトリは無視され,
   /var/tmp/FjcheckcompModule### (###は可変)が使用されます.
  また、以下のメッセージが出力される場合がありますが無視してください.
  frt: "/xxx/xxx": 指定されたディレクトリは存在しません. ディレクトリを作成します.

4) すでに作成済みのモジュール翻訳情報ファイルを -M オプションで入力することはできません.
   その場合にはスクリプトファイルを使用しない方法でチェックを行ってください.

5) chk_frt において -Qo または -Nlst_out オプション指定した場合,指定した出力ファイル
   名は無視され /var/tmp/Fjcheckcomplst###.lst(###は可変)に出力されます.

6) このスクリプトはオブジェクトファイルを残しません.
   また,モジュール翻訳情報ファイルも残しません.



[問い合せ窓口]
九州大学 情報統括本部 HPC事業室
 Mail: request(at)iii.kyushu-u.ac.jp ※(at)は@に置き換え
 Tel : 092-802-2683