▶ PGI 2010 (PGI 10.0 ) リリースノート(PDF)
PGI 10.8(2010年8月)の新機能追加
■ PGI 10.8で追加された Fortran 2003 新機能
- Accociate 構文 - その構文の実行中に、「名前」を変数または式の値との間に関連付けを作成します。 Accociate 構文が実行されると、その associate-name に対応する値や式の値の関連付けが作成されます。関連付ける実体の変数、式の値によって、その宣言型と型パラメータ等が決まります。
- Sourced Allocation - 多用な型に対するアロケーション。(但し、無制限に多用な型のオペレーションを許容する訳ではない)。明示的に型や型パラメータを指定してアロケーションする代わりに、Allocate 文の中の source= と言うクローズを使用して、型や型パラメータ、他の変数あるいは、式からその値を取り込むことができます。アロケートされた変数は、同じ動的な型、パラメータ、ソース変数と同じ値を持つことになります。
subroutine example(x)
class(t), allocate :: a
class(t) :: x
allocate(a, source=x)
■ PGI Accelerator x64+GPU native Fortran 95/03 and C99 コンパイラとPGI CUDA Fortran
CUDA 3.1 Toolkit をサポートしました。この CUDA 3.1 Toolkit は、CUDA 3.0 のアップデート版であるため、今後、CUDA 3.0 Toolkit は PGIコンパイラ製品にバンドルされません。しかし、以前のPGIインストールで実装されている CUDA 3.0 Toolkit のディレクトリは、そのまま残して置いても問題ありません。
CUDA 3.1 API への変更により、CUDA Fortran ホスト・プログラムは、再コンパイルする必要があります。PGI 10.8 ランタイム・ライブラリは、以前の CUDA Fortran のリリースとは互換性がありません。
■ PGI Visual Fortran (PVF 10.8 追加)
PVF 10.8 では、「プロパティメニュー」で CUDA 3.1 toolkit を指定することができます。「Enable CUDA Fortran」を yes とセットすると、Fortran | Language | CUDA Fortran Toolkit プロパティにおいて、CUDA 3.1 toolkit使用することを明示的に指定することができます。 また、アクセラレータ用の設定においては、 Fortran | Target Accelerators | NVIDIA : CUDA Toolkit プロパティで同じように設定できます。
PGI 10.6(2010年6月)の新機能追加
■ PGI Accelerator x64+GPU native Fortran 95/03 and C99 コンパイラとPGI CUDA Fortran
アクセラレータ領域内での自動アンロール機能を実装。
■ PGI Fortran
CUDA ビルトイン関数 syncthreads_count, syncthreads_and, syncthreads_all, threadfence, threadfence_block, threadfence_system and ballot の追加。さらに、CUDA Fortran デバイスコードは、popcnt(), poppar(),leadz() 関数をサポートしました。
■ PGI 10.6で追加された Fortran 2003 新機能
- I/O ENCODING, I/O DECIMAL 指定子, ASYNCHRONOUS 属性と文, CHARACTER MIN/MAX/MINLOC/MAXLOX/MINVAL/MAXVAL, ALLOCATE/DEALLOCATE ERRMSG 指定子, non-polymorphic 型に対する ALLOCATE SOURCE指定子, and IEEE_features モジュールの追加. New object-oriented features include deferred type-bound procedures, TYPE PUBLIC and PRIVATE attributes, and TYPE ABSTRACT attributes.
- TYPE PUBLIC and PRIVATE 属性, and TYPE ABSTRACT 属性や deferred type-bound手続きを含むオブジェクト指向機能の追加。
■ PGPROF Profiler
PGI Accelerator モデルやPGI CUDA Fortran を含むコードのプロファイリングをサポートした。
■ PGI Visual Fortran
Micorosoft Visual Studio 2010 をサポートした。
PGI 10.5(2010年5月)の新機能追加
■ PGI 10.5で追加された Fortran 2003 新機能
- Type-bound procedure 機能の追加
- PASS / NOPASS 属性追加:手続きに対して、どの引数が呼び出されるオブジェクトに渡されるかを指定する属性。例えば、NOPASS属性は、オブジェクトを引数として渡すことを阻止します。
■ PGI Accelerator x64+GPU native Fortran 95/03 and C99 コンパイラとPGI CUDA Fortran
acc_get_device_num と言うランタイムライブラリをサポートしました。この関数は、アクセラレータ領域を実行するために使用されているデバイスの数を返します。
■ Accelerator Profiling
PGI Accelerator モデルやPGI CUDA Fortran を使用したプログラムのプロファイリングを行う際に、pgcollect ユーティリティは自動的にアクセラレータ性能に関する情報を収集して、プロファイル出力として表示できるようにします。
(注意)プログラムプロファイル出力の中のアクセラレータ性能情報の取り込みは、Linux においては、時間ベースのサンプリング手法でも、イベントベースのサンプリング手法のどちらでも可能です。
あるLinuxシステム上では、パワーセーブ状態になっているアクセラレータハードウェアのCUDAドライバーの初期化は、非常に多くの時間を費やします。この遅延を避けるために、以下のいずれかの方法で対処することができます。
■ PGI Visual Fortranは、Enhanced Variable RolloverやWatch and Quick Watch機能を強化しました。
PGI 10.4(2010年4月)の新機能追加
■ PGI Accelerator x64+GPU native Fortran 95/03 and C99 コンパイラとPGI CUDA Fortranは、CUDA 3.0 Toolkit and compute capability 2.0をサポートしました。
- CUDA compute capability 2.0を指定するためには、次のオプションの一つを使用する。
PGI Acceleratoには、-ta=nvidia:cc20.
PGI CUDA Fortran には、-Mcuda=cc20.
- コンパイラがターゲットとするCUDA toolkit のバージョンを指定するためには、次のオプションの一つを使用する。
PGI Accelerator には、
CUDA toolkit 3.0: -ta=nvidia:cuda3.0 or -ta=nvidia:3.0
CUDA toolkit 2.3: -ta=nvidia:cuda2.3 or -ta=nvidia:2.3
PGI CUDA Fortran には、
CUDA toolkit 3.0: -Mcuda=cuda3.0 or -Mcuda=3.0
CUDA toolkit 2.3: -Mcuda=cuda2.3 or -Mcuda=2.3
- CUDA Kernelのための wait オプションの新設:–ta=nvidia:[no]waitオプションが、NVIDIAアクセラレータをターゲットとしたときに有効となります。ホストプログラム上で、kernel の実行が終了するまで待つか、あるいは、待たずに実行するかを指定することができます。デフォルトは wait です。
- CUDA Fortranにおいて、fused multiply-add 命令をサポートしました。ユーザは、PGIアクセラレータ機能ならびに CUDA Fortran の両方において、fused multiply-add 命令を使用したコード生成を行うかどうかの制御が可能となりました。アクセラレータ機能においては、既に–ta=nvidia:nofma オプションでサポートされておりますが、PGI 10.4 以降では、CUDA Fortran においても、–Mcuda=nofma オプションにより、この制御機能をサポートしました。
- CUDA Fortranにおいて、fast math libraryが使用できるようになりました。ユーザは、PGIアクセラレータ機能ならびに CUDA Fortran の両方においてfast math libraryを使用できます。アクセラレータ機能においては、既に –ta=nvidia:fastmath オプションでサポートされておりますが、PGI 10.4 以降では、CUDA Fortran においても、–Mcuda=fastmath オプションにより、この制御機能をサポートしました。
- CUDA Fortran 上で、グローバル・サブルーチンを含む Fortran Module 内の allocatable device arrays を使用することができるようになりました。これによって、module を使用するホスト側コードから、また、module 内に含まれるデバイスコードの両方からこの種の配列へのアクセスが可能となりました。(ご参考)PGI 2010のCUDA FortranでのModule文使用時の注意
(注意)CUDA 3.0 toolkitを使用してコンパイルした場合(-ta=nvidia:cuda3.0)、あるいは、コンパイラの初期化ファイル sitercファイルの中にset CUDAVERSION=3.0 を設定した場合は、2.3 CUDA ドライバ上では動作しませんのでご注意下さい。CUDAドライバも CUDA 3.0用に変更する必要があります。現在、システムに実装されている CUDA ドライバーを確認する方法は、pgaccelinfo を実行して下さい。
$ pgaccelinfo
CUDA Driver Version 2030
(以下省略)
ここで、
2.3 driverの場合: CUDA Driver Version 2030
3.0 driverの場合: CUDA Driver Version 3000 と表示されます
(PGI 10.4以降)PGIコンパイラは、デフォルトでは CUDA 2.3 toolkitを使用して、CUDA Fortran あるいは、PGI Acceleratorアプリケーションをビルドします。すなわち、3.0用の CUDA ドライバを実装していたとしても、デフォルトのビルドは 2.3 toolkit を使用します。これは、まだ Fermi ボードが搭載されていない、あるいは、まだ CUDA 2.3ドライバ実装のシステムにおいては好ましいコンフィグですが、もし、最新の3.0ドライバをインストールしている場合、このデフォルト変更できます。コンパイラソフトウェアを実装している $PGI/{target}/{version番号}/bin 配下に siterc ファイルがありますので、その中に、以下を挿入します。
set DEFCUDAVERSION=3.0;
上記の設定を行わず、コンパイラコマンド上のオプションで明示的に 3.0 Toolkitを使用するように指示するには、以下のように指定します。
pgfortran -ta=nvidia:3.0,....
pgcc -ta=nvidia:3.0,....
PGI 10.3(2010年3月)の新機能追加
■ CUDA Compute capability 1.0~1.3 ハンドリングの強化
デフォルトの Compute capability を 1.0 と 1.3の両方にするようにした。PGI 10.3 以降、ユーザはターゲットとされる Compute capability を複数のリビジョンの指定が可能となった。例えば、4つの compute capabilitu 1.0, 1.1, 1.2, 1.3 の全てをターゲットとするには、コマンドオプションで次にように指定する。
-Mcuda=cc10, -Mcuda=cc11, -Mcuda=cc12, -Mcuda=cc13
あるいは、
-Mcuda=cc10,cc11,cc12,cc13
■ さらに、次のFortran 2003フィーチャを追加した。
- Abstractインタフェース
- IS_IOSTAT_END, IS_IOSTAT_EOR, and NEW_LINEの組込関数追加
- オブジェクト指向の機能の追加:classes, type extensions (non-polymorphic), polymorphic entities,typed allocation, inheritance association, EXTENDS_TYPE_OF や SAME_TYPE_AS 組込関数
- 新構文と修正構文: WAIT 文; READ 文のためのblank, pad, and pos 指定子 ; WRITE文のための delim and pos 指定子;INQUIRE文のための pending と pos 指定子
PGI 10.0~10.2のPGI 2010の新機能、変更点の概要
■ PGI アクセラレータx64+GPU Fortran95/03 and C99 コンパイラサポート
NVIDIAのGPGPU搭載のシステム上で、コンパイラ・ディレクティブ(指示行)ベースでプログラミング並びに最適化可能なPGI Accelerator Programming Model V1.0スタンダードに完全準拠しました。また、V1.1 のいくつかの機能を含みます。
- Linux、Windows、Mac OS Xプラットフォームをサポート
- UPDATE ディレクティブを使用したGPUデバイス(メモリ)に常駐するデータのサポート
- COMPLEX, DOUBLE COMPLEX データ, Fortran 派生タイプ、 C structs のサポート
- 自動GPUサイドのループ・アンローリングとUNROLLディレクティブ節のサポート
■ PGI CUDA Fortran extensions機能
PGI 2010のFortran 95/03コンパイラにて、明示的なCUDA GPUプログラミングをサポートしました。
- 定数、あるいは共有メモリのCUDA GPU device内における変数の宣言
- ページロックされるpinnedホストメモリや、CUDAデバイスメモリ、定数メモリ、共有メモリの動的なアロケーション
- Fortran 割り当て文による、ホスト側とGPU側のデータ転送
- GPU計算カーネルを投入するための明示的な CUDAのグリッド/スレッド・ブロックの宣言
- CUDAランタイムAPI関数と機能をサポート
- 簡単にCUDA Fortranをデバッグするために、ホスト・サイドでのエミュレーション
■ Fortran 2003 追加機能
以下のルーチンが追加されました。
IMPORT, pointer reshaping, procedure pointers and statement, abstract interface, iso_c_binding intrinsic module, c_associated, c_f_pointer, c_associated, enum, move_alloc(), iso_fortran_env module, optional kind to intrinsics, allocatable scalars, volatile Getting Started 6 attribute and statement, pass and nopass attributes, bind ( c ), value, command_argument_count, get_command, get_command_argument, get_environment_variable, ieee_exceptions module, ieee_arithmetic module。
■ PGC++/PGCC (2010 C++)
新しい機能とその強化がなされました。
- 最新の EDG リリース4.1を採用し、さらに、GNU並びにMicrosoftとの互換性を高めました
- デフォルトで、externインラインをサポート、実行モジュール内にインライン関数の複数のコピーは、この度削除されました
- BOOSTのサポートを強化し、さらに大きなコードをより良くサポートするために、内部のテーブルを拡張しました
- C++ -mpオプションで、スレッド・セーフ例外のハンドリング
■ OSのサポート強化
RHEL 5, Fedora 11, SLES 11, SuSE 11.1, Ubuntu 9, Windows 7とMac OS X Snow Leopardのサポート
■ コンパイラの最適化と機能強化
- OpenMPは、最大256スレッドまで拡張しましました。(以前は、64)
- AVX(Advanced Vector Extensions)コードの生成
- 部分的な冗長部削除機能
- 実行モジュールサイズの最適化、向上
■ PGI Visual Fortran 強化点
- Visual Studio内からWindows クラスタ上のMSMPIプログラムのデバッギングとジョブ投入のサポート
- PGI Accelerator Programming model のフル・サポート
- CUDA Fortranのサポート
- CCFFのサポートを備えたPGPROF性能プロファイラーをスタンドアロンで提供
■ ドキュメンテーションの更新
he PGI Users Guide、PGI Tools、Guide、 PGI Fortran Referenceのドキュメントを更新しました
▶ 過去のバージョンのリリースノート