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

+--------------------------------------------------------------------------+ |1.C, C++ の実行結果異常について | | (スーパーコンピュータシステム, 高性能演算サーバシステム) | +--------------------------------------------------------------------------+ ----------------------------------------------------------------- 情報基盤研究開発センター研究用計算機システムWWWホームページ     http://www.cc.kyushu-u.ac.jp/scp/ ----------------------------------------------------------------- 1.C, C++ の実行結果異常について (スーパーコンピュータシステム, 高性能演算サーバシステム) スーパーコンピュータシステムFX10, 高性能演算サーバシステムCX400 の C, C++言語に実行結果異常となる障害が見つかりました.障害は Technical Computing Suite のみが該当し,次回の定期保守時に修正予定です. 心当たりのある方はセンター( E-mail: request@iii.kyushu-u.ac.jp) まで ご相談願います. <現象と条件> 以下の条件をすべてみたすとき,実行結果に誤りが生じる場合があります. 1) 以下の翻訳時オプションがすべて有効である. -O2以上 (*1) -Krdconv (*1) -Klib (*1) -Kunroll (*1,*2) 2) ソースプログラムにループが存在する. 3) ループ中でmemcpy関数を使用している. 4) memcpy関数の第3引数の値が、ループの回転ごとに定数倍増減する. *1: 翻訳時オプション -Kfast で誘導されます. *2: 翻訳時オプション -O2 以上で誘導されます. <プログラム例> void foo(int n, double * a, double * b) { int i; for(i = 0; i < n; i++) {                   /* 2) */ memcpy(&b[i], &a[i], sizeof(double) * (i + 1));   /* 3),4) */ ... } } <回避方法> 以下のいずれかの方法で回避できます.なお,実行性能に影響が少ない回避方法は e) と思われます. a) 翻訳時オプション -O1 以下を有効にする. b) 翻訳時オプション -Knordconv を有効にする. c) 翻訳時オプション -Knolib を有効にする. d) 翻訳時オプション -Knounroll を有効にする. e) 翻訳時オプション-Koclを有効とし,かつ ソースプログラムの対象ループに#pragma loop nounrollを追記する.