■ PGI C++ Compiler
- C++14 を包括的にサポートしました。但し、サポートした C++14 機能を使用するためには GNU GCC 5.0 以上の実装環境が必要となります。なお、GCC 5.1 との互換性を有します。pgc++コンパイラにて、C++14 機能を使用するためには、--c++14 オプション を追加してコンパイルする必要があります。以下の機能を除いた C++14 機能をサポートします。
- generalized constexpr and constexpr member functions and implicit const
- variable templates
- clarifying memory allocation (merged allocation)
- 内部的にパフォーマンスベンチマークで使用しているC++コードの性能は、PGI 15.1 に比べて 10% 以上の性能向上がありました。
- GCC 5.1 と互換性を提供する EDG リリース 4.10.1 との統合を行いました。GCC 5.1 によって提供された新しい C++11 機能を使用する場合は pgc++ コンパイラのオプションとして --c++11 を追加してコンパイルしてください。
- GNU は、バージョン 5.0 において GCC STL ヘッダーファイルを変更しました。この変更は、以前の GCC バージョンでコンパイルされたコードとの互換性の問題が発生します。GCC 5.0 よりも前に作成したオブジェクトとライブラリとの互換性をサポートするための対処策として、-D_GLIBCXX_USE_CXX11_ABI=0 を付してコンパイルすることを進めています。これに関する詳細な情報は、https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.htmlをご覧ください。
PGI 2016において、C++コンパイラは従来の pgcpp(pgCC) コマンドによる STLport をサポートしてきた C++ コンパイラ(レガシー版)は廃止(終息)され、pgc++ コマンドによる C++コンパイラのみとなります。、Linux ならびに OS X においては、明示的に、g++ 互換 pgc++ コマンドをお使いください。pgc++ コンパイラは基本的に、ほとんどの言語機能とオブジェクト(ABI互換)に関して GNU C++(g++) と互換性を有します。但し、pgc++ と g++ のコマンドの「オプション名」に関しては互換性がありません。なお、従来の pgcpp コマンド・コンパイラは、Linux、OS X、Windows 版を含め、 PGI 16.1 以降、廃止されました。
これに伴い、Windows 版の C++ 言語処理系自体が、PGI 2016 以降、製品として廃止され、Windows版は 「C 言語コンパイラと Fortran コンパイラ」をバンドルした
PGI Fortran/C Compiler 製品と Fortran コンパイラのみの PGI Fortran Compiler 製品の二つの提供となりました。Windows版 PGI C/C++ 単独製品の提供はございません。
なお、Linux ならびに OS X 版の C++ コンパイラに関しては従来通り、GNU ABI 互換の C++ コンパイラとして、PGI 2016 以降も継続してご提供してまいります。
■ PGI Fortran Compiler
- AVX SIMD ベクトル化を向上させ、他の Fortran コンパイラ最適化の向上により、例えばいくつかの WRF アプリケーションのワークロードの性能は 15~20% 程度の向上が見られました。
- Haswellプロセッサ向けのスカラ型/ベクトル型の単精度 pow, exp, log atan の組み込み関数のさらなる最適化がなされました。
- F2003 associate clause と派生タイプに対して性能向上対応を行いました。
■ PGI Accelerator OpenACC Compilers
- 次の OpenACC 2.5 機能をサポートしました。
- OpenACC 2.5 で定義された profile/trace tools インタフェースが以前サポートしてきたインタフェースと置き換えられました。
- default(present) clause が C, C++, Fortran の Compute 構文でサポートされました。
- Reference Counting がデバイスデータのやり取りやライフタイムの管理に使用されます。
- copy, copyin, copyout and create data clauses は、present_or_copy の振る舞い方に変更(OpenACC 2.5 での変更)となります。
- cc_copyin, acc_create, acc_copyout and acc_delete API routines は、cc_present_or_copyin等 のような振る舞い方に変更(OpenACC 2.5 での変更)となります。
- Fortran allocatable 属性に対する declare create directive は、新しい振る舞い方に変更(OpenACC 2.5 での変更)となります。
- APIルーチン acc_memcpy_device を追加しました。Data APIルーチンの非同期バージョンを追加しました。
- gang clause を有する Orphaned loop内のリダクション操作(reduction clauseの使用)は、OpenACC 2.5 から明確に禁止されましため、その実装となりました。なお、routine gang clause を有した形でコンパイルされた手続き内で gang 並列性を生成するような orphaned loop も同様です。
- 配列、構造体メンバ、C++クラスメンバに関するリダクションは明確に禁止されました。
- gang/worker/vector/seq なしの acc routine の使用は、コンパイル・エラーとなります。
- -ta=maulticore における最内側ループのベクトル化を強化しました。
- OpenACC kernels 領域内の F90 ポインタの使用をサポートしました。
- コンパイラオプションである -ta=tesla:pin を -ta=tesla:pinned に置き代えました。pin サブオプションは、GPUへのデータ移動において、ユーザデータを使用する前に、動的にユーザデータを "pinned"します。新しい pinned サブオプションは、代わりにプログラムのアロケート時に pinned メモリを割り付けるように変更しました。OpenACCランタイムは、まず、データメモリが pinned されているかをテストします。もうし、そうであれば、pinned 空間から直接、転送するようにします。pinned サブオプションは、従来の pin サブオプションの時よりもより安定して機能します。
- -ta=tesla:managed を使用した時の全てのカーネルは、デフォルトで同期モードにて動作します。すなわち、 PGI_ACC_SYNCHRONOUS=1 がデフォルトとしてセットされます。この挙動は安全であるものの性能に影響を及ぼすかもしれません。カーネルを明示的に非同期に動作させるには、PGI_ACC_SYNCHRONOUS=0 をセットしてください。
- ACC_BIND 環境変数は、-ta=multicore の際、デフォルトでセットされます。ACC_BINDは、OpenMP における MP_BIND と同じようなものです。
■ PGI Debugger and Profiler
- 新しい PGPROF プロファイラを提供します。これは、CPUコードのプロファイリングもしくは、CPUとGPU の両方のプロファイリングが可能です。 PGPROF はグラフィカル、あるいはコマンドラインベースのインタフェースを持ちます。新PGPROF は、以前のバージョンの PGPROF と互換性がありません。なお、MPIに関する分析機能は廃止されました。
- OpenACC 並びに CUDA Fortran における Fortran Automatic Array のサポート
- PGDBG デバッガにAVX3命令のディスアセンブリ機能をサポートしました。
- Fortran 文字型と名前付きコモンのデバッグ表示を強化しました。
- OS X上の shared objects のデバッキンを強化しました
- 全てのプラットフォーム上で大型アプリケーションをデバッグ起動する際のロードタイムを削減しました。
■ Libraries
■ その他の機能、変更ポイント
- PGI 2016 において、ライセンスキーの書式が変更されました。現在利用している全てのユーザは、PGI 16.1 以降のバージョンを使用する際に新しい license.dat を取得して、セットする必要があります。
- PGI フローティングライセンスのキーフォーマットが変更され、複数のフローティングライセンス(プラットフォームタイプやユーザ数が異なるlicense keys) を一つの license ファイルに統合できるように変更されました。これによって、ライセンスのユーザ数を任意に増加させることができます。
■ 検証済み使用可能プラットフォームの追加、その他
Ubuntu 15.10, Fedora 23, CentOS 7, RHEL 7.2, SLES 12 and OS X El Capitan 等
PGI 2016 サポート OS の詳細へ