=============================================================================== Version 5.2.0 =============================================================================== * リリース日: 2024/02/29 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第34版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第34版 [機能強化] 1. -On (n=2,3,4)が有効であるとき、-f[no-]cse-after-vectorizationの既定値 を-fcse-after-vectorizationに変更しました。 2. VE3アーキテクチャの場合、コンパイルオプションの既定値を-mno-list-vector から-mlist-vectorに変更しました。 3. VE3アーキテクチャで、list-vector総和のベクトル化が適用可能な場合、ルー プにivdep指示行の指定がある場合でもlist-vector総和のベクトル化を適用す るようにしました。 4. 指定されたvregまたはpvreg指示行が有効でない場合、ベクトル診断メッセー ジを出力するように変更しました。 1. パックドベクトル命令が適用されるループの自動並列化を強化しました。 [問題修正] 1. 以下の条件を満たすとき、スタックに確保された作業ベクトル領域が解放され ない。そのため実行時にUnable to grow stackのエラーが発生することがある。 - ループが部分ベクトル化、または外側ループがベクトル化される。 - そのループで作業ベクトルが使用される。 - ループ長が変数ではなく定数である。 2. SXシリーズ向けの[no]neighbors指示行が、コンパイラ指示行変換ツールで変 換できない。 3. 以下の条件を満たすとき、実行結果が不正となることがある。 - ターゲットのアーキテクチャがVE3である。 - ループがパックドベクトル命令を使用してベクトル化されている。 - ループ長が1、または512の倍数+1である。 - ループ内にIF文が含まれる。 4. ベクトル化されたループ内に、volatile指定された配列やポインタ参照がある とき、コンパイラが異常終了するか、実行結果が不正となることがある。 1. DO WHILE文において、IF文などで繰り返し処理を途中で終了させた場合、イン デックス変数が更新されないことがある。 2. 派生型の成分である2次元以上のCONTIGUOUS属性を指定したPOINTERの完全な 部分配列(つまりすべてコロン)が、再マッピングのポインタ代入のターゲット となる場合、コンパイル時にエラーが発生する。 3. 「opt(1268): Use of pointer variable/expression inhibits optimization.」 という診断メッセージが、コンパイル時に誤って出力されることがある。 4. コンパイル時に-bssを指定し、かつ、ネームリスト入力でスカラ変数の値を入 力したとき、その後のスカラ変数の参照で入力した値が参照できない。 5. 手続に DO WHILE 文が存在し、その手続がインライン展開されるときに、実行 時に例外が発生することがある。 1. 以下の条件を全て満たすとき、C++プログラムの実行時に異常終了することが ある。 - std::rethrow_exception()を用いて例外オブジェクトを再スローしている。 - std::rethrow_exception()で再スローされた例外をcatchしたブロック内で、 別の例外をスローしている。 2. 以下の条件を全て満たすとき、リンクエラーが発生することがある。 - nc++コンパイラのバージョンが 3.2.0 以降、または 4.0.0 以降で -stdlib=compatが有効である。 - コンパイル時に -std=c++17、-std=c++20、-std=gnu++17、-std=gnu++20の いずれかが有効である。 - ヘッダを複数のソースプログラムでインクルードしている。 3. 派生クラステンプレートのメンバ関数内でテンプレート仮引数が関数ポインタ であるとき内部エラーが発生することがある。 4. 以下の条件をすべて満たすとき、コンパイルエラーが発生することがある。 - nc++コンパイラのバージョンが 3.2.0 以降、または 4.0.0 以降で -stdlib=compatが有効である。 - コンパイル時に -std=c++17、-std=c++20、-std=gnu++17、-std=gnu++20の いずれかが有効である。 - C++プログラム中で、C++17言語仕様(ISO/IEC 14882:2017)の「構造化束縛 (structured bindings)」を使用している。 [性能改善] 1. ベクトル単精度cbrt関数の性能を改善しました。 1. 組込み関数MAX/MINを含む配列式のループ融合を強化しました。 その他、軽微な問題の修正、および、性能改善を行いました。 =============================================================================== Version 5.1.0 =============================================================================== * リリース日: 2023/08/31 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第33版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第33版 [機能強化] 1. ルーチンごとのオプション指示行をサポート 2. コンパイルリストにユーザコメントを出力するためのオプション -report-userinfo を追加 3. -minit-stack=valueのvalueで指定できる値としてnoを追加 1. options 指示行がプログラムの先頭にない場合に出力されるエラーメッセージ を改善 2. ネームリスト入力において、区切り文字のない値を省略した名前-値サブシーケ ンスを受け付けるように改善 3. 以下のコンパイラオプションを追加 - -fivdep-do-concurrent-loop 1. vreg指示行へのベクトル型のオブジェクト指定をサポート 2. 以下のコンパイラオプションを追加 - -finline-attribute - -finline-loop-test=keyword 3. 以下のコンパイラオプションの既定値を変更 - -finline-max-times=20 (値を6より20に変更) [問題修正] 1. 外側ループの繰返しを制御する変数を内側ループの終了判定式と内側ループの ループ本文で参照している多重ループがループ入れ換えされたとき、プログラ ムの実行が異常終了することがある。 2. OpenMPのfirstprivate指示節に指定した変数が、その後のtaskリージョン内で 参照されているとき、実行結果が不正になる。 3. IF文の条件式がベクトル要素であるベクトル条件と、IF文の条件式がスカラ要 素である複数のスカラ条件がネストしたループをベクトル化すると実行結果が 正しくないことがある。 4. オプションリストに -march, -mfp16-format, -mvector-neighbors が出力され ない。 5. ループが長大で配列の依存関係が多い場合、ベクトル化するとコンパイルに長 い時間がかかっていた。 6. collapse指示行を指定してもループが一重化されない場合がある。 7. -fno-fast-math-checkを指定してコンパイルしたとき、「unrecognized option」のコンパイルエラーが発生する。 8. OpenMPのatomic指示句を使用したプログラムをコンパイルすると、コンパイル エラーが発生する。 9. 最適化の影響により、トレースバック情報の行番号が正しく表示されない場合が ある。 10. ベクトル版単精度CBRT関数を使用した場合に例外が発生する場合がある。 11. 単精度ベクトルの整数スカラ乗や単精度スカラの整数ベクトル乗がある場合に、 コンパイル時にSIGSEGVが発生する。 12. -fno-move-loop-invariantsを指定したとき、ベクトル化される内側ループの代 入される左辺の要素が外側ループのレベルで不変である場合、実行結果が正しく ないことがある。 13. -mvector-packedオプション指定時、べき乗関数がベクトル化された場合、コン パイラがSIGSEGVで異常終了する。 1. 以下のすべての条件を満たすとき、コンパイル時に内部エラーが発生する場合 がある。 - 3つ以上ネストされたALLOCATABLE属性をもつ派生型成分がモジュール内に ある。 - 上から3番目のネストに配列成分がある。 2. -finline-directory で指定したディレクトリの配下に、自由形式で記載された 拡張子が fpp のファイルが存在するときに SIGABRT が発生する場合がある。 3. allocatable 配列で、かつ、その配列要素の型が sequence 属性を持つ派生型 の場合に発生する場合がある。 4. 並列処理に関わらないOpenMP Constructを構成するOpenMP指示行に現れた reduction句で不正に文法エラーが検出される。 5. POINTER属性を持つ配列にCONTIGUOUS属性を指定すると実行結果不正になること がある。 6. 要素のサイズが同じ大きさのALLOCATABLE配列を含むソースファイルをクロスフ ァイルインライニングしたとき、SIGSEGVが発生しコンパイラが異常終了する。 7. SIZEOF関数の引数に非定数の長さを持つ文字型変数を指定したとき、コンパイ ル時にエラーが発生する。 8. ALLOCATE文に解放されていない割付け済み配列を指定したとき、実行時にエラ ーとならない。 9. 複数の部分配列を手続の実引数としてルーチンを呼び出す際、その実引数の一 つが部分配列と別の式の計算結果であるとき、プログラムの実行時に異常終了 することがある。 10. 型束縛手続の実引数にALLOCATABLE属性をもつ派生型成分を含む多相変数のオブ ジェクトが指定されたとき、そのオブジェクトに対してメモリリークが発生す る場合がある。 11. IF文を含むループが誤ってベクトル化され、実行結果が正しくないことがある。 12. 以下の条件をすべて満たすとき、コンパイル時にエラーが発生する。 - -fpp が指定されている。 - 1文が複数行に分かれている。 - 継続行の&の後が数値を表現する数字列である。 - 前述に続く文字が'D/d'または'E/e'または'Q/q'のいずれかである。 - 更に続く文字が','以外である。 13. 以下の条件をすべて満たすとき、コンパイラがアボートする。 - SIZEOF 関数の引数の形式が x%y(n)%z または x(m)%y(n)%z である。 - x は、CLASS型またはTYPE型の変数または配列である。 - y は、ALLOCATABLE属性のTYPE型の配列である。 - z は、POINTER属性の配列である。 1. ループの終了判定の型が整数型以外のとき、コンパイル時に内部エラーが発生 する場合がある。 2. -fno-check-noexcept-violationが有効、かつ、noexceptキーワードが指定さ れた関数内で "return function()"のようにreturn文に続けて関数を呼び出す とき、functionの引数が不正な状態になる場合がある。 3. -std=c++オプション指定時、総和でないものが総和マクロ演算として誤ってベ クトル化され、実行結果が正しくないことがある。 [性能改善] 1. 別々にallocateされた配列間には依存関係が無いものとしてベクトル化する。 2. 漸化式のマクロ演算を行うループをインライン展開したとき、インライン展開 後のループがベクトル化できない件を改善し、ベクトル化できるよう依存解析 を改善しました。 1. 形状引継ぎ配列の仮引数をもつルーチンの呼び出しを含む多重ループのループ 一重化を強化しました。 2. ルーチンの実引数として部分配列が指定されたときの作業配列の解放を、当該 ルーチンのリターン時から、呼び出したルーチンの呼び出し直後に変更しまし た。 [注意事項] 1. バージョン5.0.0、5.0.1、または、5.0.2をインストールする場合、VEOS バー ジョン3.0.2以降もあわせてインストールする必要がありましたが、バージョ ン5.1.0以降では、VEOSのアップグレードは不要になりました。 その他、軽微な問題の修正、および、性能改善を行いました。 =============================================================================== Version 5.0.2 =============================================================================== * リリース日: 2023/07/31 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第32版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第32版 [問題修正] 1. 処理中の例外オブジェクトがあるとき、NEC Compat C++標準ライブラリの std::current_exception()が誤ってヌルを指すexception_ptrを返却する。 その他、軽微な問題の修正、および、性能改善を行いました。 =============================================================================== Version 5.0.1 =============================================================================== * リリース日: 2023/06/29 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第31版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第31版 [問題修正] 1. nc++ でビルドした C++ の共有オブジェクトを動的ロード・アンロードする プログラムの実行終了時に SIGSEGV が発生する場合がある。 その他、軽微な問題の修正、および、性能改善を行いました。 =============================================================================== Version 5.0.0 =============================================================================== * リリース日: 2023/03/30 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第30版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第30版 [機能強化] 1. VE3アーキテクチャをサポート 2. 半精度浮動小数点をサポート (VE3のみ) 3. 以下のコンパイラオプションを追加 - -mvector-neighbors - -mabi - -march - -mfp16-format 4. 以下のコンパイラ指示行を追加 - neighbors 5. 以下の定義済みマクロを追加 - __VE_ARCH_1__ - __VE_ARCH_3__ - __FP16_FORMAT__ - __FP16_IEEE - __FP16_BFLOAT 6. 以下の行列積ライブラリを追加 - VHMXV, VHSXV, VHMXP, VHSXP - VHMXVA, VHSXVA, VHMXPA, VHSXPA - VHMXMA, VHSXMA, VHMXQA, VHSXQA [問題修正] 1. atan2関数呼び出しを含むループがベクトル化されたとき、実行時に 浮動小数点例外が発生することがある。 1. VHオフロード機能を利用し、かつ、一つの並びに対する出力結果が 2147483647 バイト以上になるとき、実行時にSegmentation fault が 発生する。 2. 以下の条件を満たすとき、実行結果が不正となることがある。 - コンパイル時に"-floop-unroll -finline-functions"が指定されている - ユーザ手続がインライン展開されている - そのユーザ手続呼出しがループ中にあり、そのループがベクトル化されている - そのユーザ手続に配列を引数で渡している - そのユーザ手続内で、引数で渡した配列に値を代入している - その配列代入がアンロールされている 1. 動的に確保した restrict 型修飾子を持つ配列の領域に値を設定したとき、 実行時にSegmentation faultが発生することがある。 その他、軽微な問題の修正、および、性能改善を行いました。 =============================================================================== Version 4.0.0 =============================================================================== * リリース日: 2022/11/30 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第29版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第29版 [機能強化] 1. 以下のコンパイラオプションを追加 - -ffast-math-check - -mconditional-index-test - -mvector-assignment-threshold=n - -stdlib 1. 以下のコンパイラオプションを追加 - -Wunmatched-subscript - -Wunmatched-subscript-errors 2. INQUIRE文およびOPEN文のFILE指定子に指定された文字列の先頭の空白を無視 するように変更 1. C++標準ライブラリlibc++をサポート 2. ベクトル型をサポート [問題修正] 1. スカラ三角関数において、引数の絶対値が大きいときNaNが返される。 2. ベクトル化不可の依存関係があり、左辺と右辺の同一配列の配列要素が最大ベ クトル長(256)以上離れている場合、ループが部分ベクトル化されると実行結 果が不正になる場合がある。 3. 倍精度のatan2(x,y)において、abs(x)/abs(y)が大きい場合、実行結果が不正 になる場合がある。 4. OpenMPのcollapse句を使用し、-O0 -fopenmpを指定してコンパイルされた場合、 コンパイル時に内部エラーが発生する場合がある。 5. イテレーション型のイディオムを含むループが部分ベクトル化された場合、実 行結果が不正になる場合がある。 6. 外側ループが分割され、分割されたループがベクトル化された行列積ライブラ リ呼び出しに置換された場合、実行結果が不正になる場合がある。 7. プログラム起動時のスレッド数より小さい値を omp_set_num_threads 関数に 指定したとき、実際に動作しているスレッド数が指定した数と一致しない。 8. コンパイル時に -traceback=verbose を指定し、かつ、ファイル内に#include と #line ディレクティブの両方があるとき、コンパイラが SIGSEGV でアボ ートする場合がある。 1. 配列参照の添字並び中の添字式の数が配列の次元数よりも小さいとき、コンパ イル時に -Wunmatched-subscript-errors を指定すると、コンパイルエラーと なる。 2. 一つのソースファイルに複数の手続を含まれており、それらの手続で同名の共 通ブロックを定義しているが共通ブロックの一部の要素が異なるとき、どちら の共通ブロックにも含まれる同名の配列がループ中で定義・引用される場合、 プログラムの実行結果が不定となることがある。 3. モジュールにおいて、配列である名前付き定数を宣言し、その値を別の名前付 き定数で与えているプログラムを-gを指定してコンパイルしたとき、SIGSEGV が発生することがある。 4. 二つのループがあり、一つ目のループにある条件を満たしたときだけ初期化さ れる配列要素があり、二つ目のループで同じ条件を致したときのみ同じ配列要 素が参照されるときで二つ目のループが自動並列化されたとき、プログラムが 異常終了する、または、結果不正となることがある。 5. マスク付きの MinLoc/MaxLoc があるとき、実行時にエラーが発生する場合が ある。 6. 以下のすべての条件を満たすとき、コンパイル時に内部エラーが発生する。 - 割付け配列Zを成分に持つ派生型Aがある。 - 派生型AのスカラポインタYを成分に持つ派生型Bがある。 - 派生型Bの割付け配列Xがある。 - 次の例のように、配列Xのある要素の成分Yが指す派生型Aの成分Zを組込み関 数PACKの 引数に全体配列として指定している。 例 : PACK(X(1)%Y%Z,.TRUE.) 7. OpenMPのparallel regionの外で宣言したallocatable属性を持つ変数を parallel region内でallocateすると、parallel regionの外で値が不正になる ことがある。 8. ALLOCATABLE配列の型が派生型であり、その派生型がPOINTER属性の指定された 別の派生型を含み、その含まれる派生型がポインタ配列を含むとき、-O1以上 でコンパイル、実行するとBus Errorが発生することがある。 9. 最初の参照が配列全体に対するもので、2番目の参照が配列要素または割り当 てであるとき、コンパイル時に誤ったエラーを出力する場合がある。 10. 同一ファイル内に無名共通ブロックが複数存在するとき、実行結果が不正にな る場合がある。 11. コンパイル時に -fopenmp と -finline-functions を指定し、かつ、インライ ン展開されるユーザ関数内に組込み手続き minval, maxval, sum のいずれか が存在するとき、不正なコードが生成される場合がある。 12. ループ制御式中に組込み手続MAX/MINの呼出しを含むDOループが条件ベクトル 化されたとき、実行結果が不正になる場合がある。 1. constexprとOpenMPのparallel構文を含むプログラムをコンパイルすると、 OpenMPによる並列化が行われない。 2. ループ中にクラス、構造体、または共用体の代入があり、代入がベクトル命令 で行われた場合、外側にあるループがベクトル化されない理由が表示されない。 3. C/C++のシステムヘッダを#includeで取り込み、かつ、マクロ__STDC_LIB_EXT1__ を使用しているプログラムをコンパイル、リンクしたとき、C言語仕様標準・ 附属書Kの境界チェックインタフェースの関数がリンクエラーになる場合がある。 4. 関数テンプレート std::map::emplace() でコピーコンストラクタが削除定義さ れたをオブジェクトを挿入したとき、コンパイルエラーが発生する場合がある。 5. float _Complex型と整数を加算するコードが存在するとき、コンパイルエラー が発生する場合がある。 6. TLS変数の不正なDWARF情報が出力される。 7. size_t型の仮引数にlong型の変数を実引数として指定すると結果不正になる場 合がある。 [性能改善] 1. 以下の条件を満たす入出力DO形反復をもつ入出力文の性能改善 - 入出力DO形項目に指定された配列の添え字の並びとDO制御の変数の並びが同 じである - 入出力DO形項目に指定された配列の次元数とDO制御の数が異なる その他、軽微な問題の修正、および、性能改善を行いました。 =============================================================================== Version 3.5.1 =============================================================================== * リリース日: 2022/08/05 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第28版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第28版 [問題修正] 1. 次の条件をすべて満たすとき、予期せぬ実行結果となる。 - あるOpenMPプログラムが、一つ以上のparallel regionを含む。 - 一つのparallel regionが2個以上の並列ループを含む。 - ある並列ループとその後続の並列ループがnowait句、schedule(dynamic[,n]) 句を持つ。 1. モジュールにおいて、配列である名前付き定数を宣言し、その値を別の 名前付き定数で与えているプログラムを-gを指定してコンパイルしたとき、 SIGSEGVが発生することがある。 2. ASSOCIATE構文の選択子に派生型配列の成分が指定されたとき、コンパイル時に 内部エラーが発生することがある。 3. 以下の条件を満たすとき、実行時にSegmentation faultが発生することがある。 - 派生型の形状引継ぎ配列が宣言されている。 - ASSOCIATE構文で、その派生型配列の文字型の成分が結合名と結合されている。 - ASSOCIATE構文内で、その結合名が文字型配列として参照されている。 その他、軽微な問題の修正、および、性能改善を行いました。 =============================================================================== Version 3.5.0 =============================================================================== * リリース日: 2022/06/30 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第27版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第27版 [機能強化] 1. Fortran 2008をサポート 2. Fortran 2018の一部機能をサポート 3. MAKEDIRQQ 関数をサポート 4. GERROR 関数をサポート 5. 要素別処理手続の仮引数の宣言式への指定をサポート 6. fppで -traditional をサポート 7. MODULE PROCEDURE 文で異なる数の仮引数を持つ手続が定義できるように変更。 8. 仮引数が文字型のスカラ変数で、かつ、仮引数の長さが実引数の長さより 大きいとき、コンパイルを継続するよう変更 9. 明示的な型指定がなく、EXTERNAL属性付きで宣言された外部関数が 呼び出されたとき、コンパイルエラーとせず警告メッセージを出力し、 コンパイルを継続するよう変更 1. OMPT interfaceをサポート [問題修正] 1. -traceback=verbose または -g を指定したとき、コンパイラが異常終了する ことがある。 2. OpenMPのparallel構文内に多次元配列の要素の定義、引用が含まれるとき、 プログラムの実行時に、結果不正、または、異常終了することがある。 3. ループが最適化(ループ展開)されたとき、ループ制御の処理が不正に展開され、 実行時に異常終了することがある。 1. OpenMPのCOPYPRIVATE指示句を利用したプログラムを-O0を指定してコンパイル すると、コンパイル時に内部エラーが発生する。 2. OpenMPの条件付きコンパイルの書式で宣言された変数がOpenMPの指示句中で 指定されたとき、コンパイラが異常終了することがある。 3. 以下の条件を満たすとき、コンパイル時内部エラーが発生する。 - -fcheck=all または -fcheck=dangling が指定されている。 - TARGET属性を持たないC_PTR型の仮引数(a)を持つ手続(A)が定義 されている。 - TARGET属性を持つC_PTR型の引数(b)を持つ手続(B)が宣言されている。 - 手続(A)内に手続(B)の呼出しがあり、その実引数(b)に仮引数(a)が 指定されている。 4. 以下の条件をみたすとき、コンパイル時に内部エラーが発生する。 - 配列式左辺が部分列である。 - その部分列の下限値が2次元以上の配列を含む式で指定されている。 5. 組込み手続呼出しを含むプログラムを -O0 を指定してコンパイルすると、 リンクエラーになる場合がある。 6. 以下の条件を満たすとき、実行時にSegmentation faultが発生することがある。 - -O2 以上が指定されている。 - 同じ配列の allocate/deallocate を繰り返している。 - その配列の1回目の割付け後に、配列構成子を使って部分配列に代入して いる。 7. 以下の条件を満たすとき、実行時にSegmentation faultが発生することがある。 - -O2 以上が指定されている。 - ループ内で、ポインタが別のポインタに関連付けられる。 - そのポインタがそのループの終了後に参照される。 8. ネームリスト入力において、入力データが以下の条件をすべて満たすとき、 実行時エラーが発生する。 - 入力データが構造型の名前である。 - 構造型のメンバのうち、一つ以上のメンバの値が入力データで指定されて いない。 - 入力データの構造型に文字型と文字型以外のメンバが混在し、先頭の メンバが文字型である。 9. DOループの内側にIF文とGOTO文で作られたループがあり、その内側ループ中に それ以外のGOTO文により内側ループ外への飛び出しを含む場合、実行結果不正 または実行時例外になる場合がある。 10. 以下の条件を満たすとき、実行結果が不正となることがある。 - TARGET属性をもつ変数が手続呼出しの実引数として指定されている - 当該手続内でその変数がポインタ代入に現れない   11. private句で指定された変数が、その後に現れる他のOpenMP指示行で 引用されているとき、実行結果が不正となることがある。 12. -fcheck=bounds、または、-fbounds-check を指定したとき、検出されるべき 演算例外が検出されないことがある。 13. ループの増分が負の値であり、ループ中の2つの多次元配列の依存関係が ベクトル化できない場合でも、ループが誤ってベクトル化されてしまうことが ある。 14. ループ中に手続呼び出しがあり、その手続がインライン展開され、その手続 の仮引数がIF文の条件式に現れたとき、その条件式がループ内不変でないにも かかわらずループ外に移動されることがある。 15. default(none) が指定されているとき Implied-do のインデックス変数の データ共有属性を明示的に指定しないと文法エラーが発生する。 16. default(none) が指定されているとき num_threads 指示句中に現れる変数の データ共有属性を明示的に指定しないと文法エラーが発生する。 1. OpenMPのparallelコンストラクトを含むプログラムを -fopenmp -finline-functionsを指定してコンパイルしたとき、内部エラーが発生する ことがある。 2. VLAをパラメータとして持つ関数を並列リージョン中から呼び出している プログラムを -fopenmp -finline-functions を指定してコンパイルしたとき、 コンパイル時に内部エラーが発生することがある。 3. -ftemplate-depth=NのNに256以上の値が指定されたとき、無制限に再帰的に インスタンシエートされ、コンパイラが異常終了する場合がある。 4. 複数個の論理否定演算子(!演算子)が続けて指定された式が最適化されたとき、 実行結果不正になる場合がある。 5. 以下の条件を満たすとき、実行結果が不正となることがある。 - ある関数呼出しの結果がポインタ型関数の返却値であるポインタの指示先に 代入される。 (例) *func1(arg) = func2(arg) - その関数呼出しがインライン展開される。 - その代入式がベクトル化されたループ中にある。 6. システムライブラリ関数fread()の関数呼出しを含むループが最適化された とき、プログラムの実行が終わらなくなる場合がある。 [性能改善] 1. ループ本体のコード量が非常に多い場合でも一重化できるよう forced_collapse指示行を強化。 2. 配列要素をインデックスとした圧縮・伸長ループをベクトル化するように 改善。 1. 親子結合している配列を定義・参照している多重ループを一重化できるよう forced_collapse指示行を強化。 2. ループアンローリング時のベクトルレジスタ割り当てを改善。 3. 組込み手続PACKの性能改善。 1. for文の制御式にC++のvectorクラスのメンバ関数size()の呼出しを含む ループのベクトル化促進。 その他、軽微な問題の修正、および、性能改善を行いました。 =============================================================================== Version 3.4.2 =============================================================================== * リリース日: 2022/03/31 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第26版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第26版 [機能強化] 1. 基本整数型の最大値を超える定数値を使用したとき、コンパイル エラーとせず警告メッセージを出力し、コンパイルを継続するよう変更。 (値は、基本整数型のサイズに収まるよう上位ビットが切り捨てられます。) [問題修正] 1. クロスファイルインライニングを有効にし、-traceback、または、-gを 指定したとき、アセンブルエラーでコンパイルが異常終了することがある。 クロスファイルインライニングは、たとえば、-finline-functionsと -finline-file=ファイル名を同時に指定したとき、有効になる。 1. ある文の右辺と左辺に同一の配列が現れ、そのどちらかが配列式であり、 その文を含むループがOpenMP並列化、または、自動並列化されたとき、 依存があるにもかかわらずループが完全ベクトル化されてしまうことがある。 2. ある手続が実引数のcopy-in/copy-out処理を伴う手続呼出しを含むときで、 その手続を含むプログラムを-O0でコンパイルしたとき、プログラムの実行が 異常終了することがある。 3. ある手続が複数の自動割付け配列を含み、そのうちの一つがallocatable componentを含む派生型の配列であるとき、プログラムが実行時に異常終了 することがある。 4. 実行時の大きさ引継ぎ配列の添字の上下限チェック(-fcheck=bounds)において エラーが不正に検出されてしまうことがある。 5. VH へのオフロードが有効で、かつ、VH 側で編集した後の出力サイズが 1073741824バイトより大きいとき、例外が発生する。 6. 自動並列化またはOpenMP並列化を有効にするとfseek関数実行後の入出力文で "Recursive I/O" エラーが発生する。 7. 以下の条件をみたすとき、コンパイル時に内部エラーが発生する。 - 配列を返す関数がRESULT句をもたない。 - その戻り値の配列の少なくとも一つの次元の下限値が変数で宣言されている。 - その配列が配列代入文の右辺に現れ、下限値が変数で指定された次元が  ":"のみで指定されている。 8. オプション指示行を含む固定形式記述のソースプログラムを-fopenmpを 指定してコンパイルしたとき、不正に文法エラーが検出される。 9. ある手続の仮引数がPOINTER属性、または、ALLOCATABLE属性を持つ文字型であり、 その仮引数が組込み手続LOCの実引数に指定されたとき、コンパイラが異常終了 する場合がある。 10. 以下の条件を満たすとき、コンパイルエラーが発生する。 - 個別にコンパイルされたモジュールで定義された型の型束縛手続を オーバーライドする手続がある。 - 文字長が定数である仮引数があり、オーバーライド手続するでリテラル定数 ではない式で長さが指定されている。 1. 組込み関数putc()、getc()を"std::getc(fp)"のように"std::をつけて 呼び出したときコンパイルエラーが発生する。 その他、軽微な問題の修正、および、性能改善を行いました。 =============================================================================== Version 3.4.0 =============================================================================== * リリース日: 2021/11/30 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第25版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第25版 [機能強化] 1. 以下のコンパイラオプションを追加。 - -fivdep-omp-worksharing-loop 2. reduction句でarray sectionを指定できるよう強化。 3. distribute, target, teams を含む複合構文の制限緩和。 1. 入力文の書式のH形編集記述子をサポート。 2. オプション-floop-unroll-complete-nestを配列式だけではなく、DOループ にも適用する。 1. 以下のコンパイラオプションを追加。 - -std=gnu++20/-std=c++20 - -report-system-header 2. parallel master構文でのprivate/firstprivate/reduction句を指定できる よう強化。 [問題修正] 1. 漸化式が他のベクトル化不可の依存関係を含むとき、コンパイラが 異常終了するか、または実行結果が不正となることがある。 1. POS指定子を持つ入力並びのないREAD文を実行したとき、POS指定子で 指定した位置にファイルのポジションが移動しない。 2. ベクトル化されるループ内のIF文がネストしているとき、内側のIF文が 先に評価され、実行時にSegmentation faultが発生することがある。 3. 以下の条件を満たすとき、実行結果が不正となることがある。 - 手続がINTERFACE文で引用仕様宣言されている、または、モジュール 手続である。 - その手続の引数として渡された配列を含むループが行列積の高速な ベクトルライブラリ呼出しに変換される。 4. ベクトル化された配列式に対して、編集リストで'V'と表示されないことが ある。 5. 組込み手続MATMULの引数に組込み手続TRANSPOSEを指定し、かつ、 -fno-replace-matmul-to-matrix-multiply オプションを指定して コンパイルしたとき、 実行結果が不正となることがある。 6. コンパイルオプション-O3指定時、配列式を構成するループと外側の DOループがループ入れ換えされたとき、結果が実行の度に変わることがある。 7. 固定形式で1行目にOPTIONS以外のNEC指示行を指定すると、構文エラーが 発生する。 8. 3段以上の入れ子になった派生型成分をもつ派生型がモジュールファイルで 定義され、それらの派生型成分が以下の条件を満たすとき、この派生型の 変数を使用したプログラムのコンパイル時にInternal errorが発生すること がある。 - ある派生型成分の型が型束縛利用者定義代入文をもつ - 別の派生型成分が、CLASSキーワードで宣言されている 1. C++プログラムにおいてC言語結合を持つスコープ内に、ヘッダが #includeで取り込まれたとき、コンパイル時に不正な文法エラーが発生する。 2. 以下の条件を満たすとき、実行結果が不正となることがある。 - コンパイラオプション-O2 -finline-functionsが指定されている - 入れ子になったfor文の制御式が二つ以上の定数の項をもつ 3. ラムダ式内のコンパイラ指示行が無視される。 [性能改善] 1. -report-cg、または、-report-allを指定したときのコンパイル時間改善 1. 以下の条件を満たす入出力DO形反復をもつ入出力文の性能改善 - 入出力DO形項目に指定された配列の添え字の並びとDO制御の変数の並びが 同じである - 入出力DO形項目に指定された配列の次元数とDO制御の数が異なる 2. 配列式を含むループのループ入れ換え、および自動並列化の促進 =============================================================================== Version 3.3.1 =============================================================================== * リリース日: 2021/09/16 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第24版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第24版 [機能強化] 1. 以下の環境変数を追加 - VE_FORT_UFMTENDIAN_NOVEC [問題修正] 1. OpenMPのreduction指示節で指定した変数が並列区間内で reductionとして使用されていないとき、並列化が抑止される。 2. 以下の条件を満たすとき、実行時にプログラムがハングアップ するか、結果が不正となることがある。 - 多重ループの外側ループにOpenMPのparallel do指示行(Fortran)、 または、parallel for指示行(C/C++)が指定されている。 - 多重ループの内側ループにOpenMPのsimd指示行が指定されている。 1. 直接探査書式なしファイルでオープンしたファイルに対して、 SIZE指定子を持つINQUIRE文を実行すると、実行時にSegmentation faultが発生する。 2. 多次元配列式の最も右の次元の要素数が小さな定数で、対応する ループがループ展開された場合、実行のたびに結果が変わることが ある。 3. 環境変数VE_FORT_UFMTENDIANに指定された装置に対する並び指定の ないREAD文を実行したとき、実行時にRuntime Errorが発生する。 4. 環境変数VE_FORT_UFMTENDIANに指定された装置に対するWRITE文の 出力並びに大きいサイズの配列が指定されているとき、実行時に Segmentation faultが発生する場合がある。 [性能改善] 1. 実引数を三つ以上持つ最大値/最小値を求める式の最適化、ベクトル化 の強化 2. ASSOCIATE構文中のループに対する外側ループアンロール機能の強化 3. 環境変数VE_FORT_UFMTENDIAN指定時のDO形反復を並びに持つ入出力文の 性能改善 =============================================================================== Version 3.3.0 =============================================================================== * リリース日: 2021/07/29 * 対応マニュアル - C/C++ コンパイラ ユーザーズガイド(G2AF01) 第23版 - Fortran コンパイラ ユーザーズガイド(G2AF02) 第23版 [機能強化] 1. コンパイラオプション-msched-keywordの既定値を-msched-insnsから -msched-blockに変更。 2. 以下の環境変数を追加。 - VE_INIT_STACK 3. 以下のコンパイラオプションを追加。 - -minit-stack=runtime 4. コンパイラオプション-fmove-loop-invariants-unsafe指定時の 診断メッセージ出力を強化。 5. スカラ版の組込み手続LOGとEXPの精度を向上。 1. 以下の環境変数を追加。 - VE_FORT_UFMTADJUST 2. モジュール手続内のループの並列実行のためにコンパイラが生成した手続の FTRACEでの表示名の改善。 [問題修正] 1. NOVECTOR指示行を多重ループの外側ループに指定したとき、指示行が指定した ループではなく内側ループに対して有効となることがある。 2. 以下の条件を満たすとき、実行結果が不正となることがある。 - 多重ループがベクトル化される。 - その多重ループ中に複素数型の配列への代入がある。 - その多重ループの最内側ループがアンローリングされる。 3. ベクトル化されたループ中のif文でNaN同士の比較を行うとき、実行結果が 不正となることがある。 4. 以下の条件を満たすとき、実行結果が不正になることがある。 - OpenMP並列化が有効である。 - 1つの並列区間に複数のsingle指示行が存在する。 - そのsingle指示行にnowait句が指定されている。 5. 以下の条件を満たすとき、実行時に不正に浮動小数点オーバーフロー例外が 検出される。 - VE_FPE_ENABLE=FOFを設定している。 - 組込み手続TANHをベクトル化している。 - その組込み手続TANHに指定した配列内に小さな値と大きな値が混在する。 1. コンパイラオプション-mno-stack-arraysを指定したとき、環境変数 VE_INIT_HEAPで指定した値で領域が初期化されないことがある。 2. 文字型の配列の宣言時に配列構成子によって初期化する値がすべて長さ0の 文字のとき、コンパイラが異常終了する。 3. class型の配列に配列構成子を使って部分配列を一括代入したとき、 コンパイルエラーとなることがある。 4. 以下の条件を満たすとき、実行結果が不正となることがある。 - 手続がインライン展開される。 - その手続がループを含む。 - そのループ中で呼び出したポインタ型関数の戻り値のポインタの指示先に 関数の返却値を代入している。 - そのポインタ型関数と手続の引数にDO変数が指定されている。 7. 組込み手続LOCの返却値の型が4バイト整数型となる。 8. 組込み手続TRANSFERを含むループにivdep指示行を指定してベクトル化した とき、実行結果が不正となる。 9. 以下の条件を満たすとき、実行結果が不正となることがある。 - ループがベクトル化される。 - そのループ中にベクトル化不可の依存関係がある。 - そのループ中に構造型のメンバ配列への代入文がある。 - そのループ中にif文があり、そのif文中に上記の代入文と同じ添え字を もつ構造型のメンバ配列への代入文がある。 10. 組込み手続PACKの呼び出しを含む関数のreturn時にプログラムがアボートする ことがある。 11. 環境変数NORCW、EXPRCWに設定した装置番号が不正となることがある。 12. 以下の条件を満たすとき、コンパイラがアボートする。 - モジュール内で引用仕様宣言なしで外部手続を宣言している - その手続を、モジュール関数を引数としてモジュール副プログラムから 呼び出している。   - そのモジュール関数の型種別としてモジュール内で宣言された値が設定 されている。   - このモジュールを参照している別ファイルで上記手続を呼び出しており、 その引数の型種別がモジュールで設定した種別と異なっている。 13. 以下の条件を満たすとき、実行結果が不正となることがある。 - 多重ループを含み、ループ入れ替えされる。 - そのループ内で構造型の複素数の代入が行われる。 14. 以下の条件を満たすとき、未割当の変数に対してALLOCATED文が不正にTRUEを 返却することがある。 - OpenMP並列化が有効である。 - 変数がprivate句に指定されている。 - その変数に対してALLOCATE文より前にALLOCATED文が実行されている。 15. 以下の条件を満たすとき、実行結果が不正となることがある。 - 配列を下限、上限を指定して宣言している。 - その配列への代入を含む多重ループの外側ループが並列化されている。 16. 以下の条件を満たすとき、コンパイルエラーが発生する。 - OPEN文において、文字型の式を受け付ける「FORM=」、「ACTION=」などの 指定子(「FILE=」を除く)に対し、定数ではなく変数が指定されている - 同じ手続内で、そのOPEN文より後ろにENTRY文がある 17. 組込み手続LOCの引数にcharacter型、かつ、allocatable属性をもつ変数を 指定したとき、コンパイル時に内部エラーが発生する。 18. OpenMPのworkshare構文が指定された配列式が並列化、かつ、ベクトル化された とき、編集リストにYではなくPが表示されることがある。 1. C++クラステンプレートstd::pairを利用したとき、コンパイルエラーが 発生する。 2. C++クラステンプレートstd::tupleを利用したとき、コンパイルエラーが 発生する。 3. mallocで取得したポインタを変数に代入する前に計算で利用したとき、 ポインタが不正となることがある。 4. 以下の条件を満たすとき、コンパイルエラーが発生する。 - -std=c++11、または、-std=gnu++11が有効である。 - プログラムがC++クラステンプレートstd::char_traitsのメンバeof()を含む。 5. -MT、-MFオプションと-MDオプションを同時に指定したとき、-MT、-MF オプションが無効となる。 [性能改善] 1. if文下の総和型マクロ演算を含むループのベクトル化促進 2. 多重ループの一重化促進 3. その他様々な性能改善 1. 組込み手続MATMULの性能改善 2. ASSOCIATE構文の結合名が配列に結合された場合の最適化促進 3. 環境変数VE_FORT_UFMTENDIAN指定時のエンディアン変換処理の高速化 1. unroll_completely指示行の最適化促進 ==============================================================================