PGI® 8.0 のリリース・ノートの詳細版は、PDF ファイルで提供しております。
サポートするプラットフォーム
- 32ビット Linux - 32ビット x86 互換あるいは 64ビット x64 互換のプロセッサ上で動作する 32ビットLinux オペレーティングシステム上で利用可能です。
- 64ビット/32ビットLinux - 32ビット Linux 製品の全ての機能を包括し、64 ビット x64 互換のプロセッサ上で動作する 64 ビット Linux オペレーティングシステム上で利用可能です。
- 32ビット Windows -32ビット x86互換あるいは 64ビット x64 互換のプロセッサ上で動作する32ビットWindowsオペレーティングシステム上で利用可能です。
- 64ビット/32ビットWindows - 32ビットWindows(R) 製品の全ての機能を包括し、64ビットx64 互換のプロセッサ上で動作する 64ビットWindows(R)オペレーティングシステム上で利用可能です。
- 32ビットApple Mac OS X - 32ビットあるいは 64 ビットの Intel(R) ベースのプロセッサを搭載したシステムで、32ビットApple Mac オペレーティングシステム上で利用可能です。
- 64ビットApple Mac OS X - 64ビットの Intel(R) ベースのプロセッサを搭載したシステムで、64ビットApple Mac オペレーティングシステム上で利用可能です。
- 32ビット SFU - 32ビットx86互換あるいは64ビットx64互換のプロセッサ上で動作する32ビットWindows(R) オペレーティングシステム上の SFU
(Windows Service for Unix) で利用可能です。(Windows(R) 製品のライセンスキーが必要です)
- 32ビット SUA - 32ビットx86互換あるいは64ビットx64互換のプロセッサ上で動作する32ビットWindows(R) オペレーティングシステム上の SUA
(the Subsystem for Unix-base Applications) で利用可能です。(Windows(R) 製品のライセンスキーが必要です)
- 64ビット/32ビットSUA - 32ビットSUAの全ての機能を包括し、64ビットx64互換のプロセッサ上で動作する 64ビット Windows(R) オペレーティングシステム上の SUA
(the Subsystem for Unix-base Applications) で利用可能です。(Windows(R) 製品のライセンスキーが必要です)
サポートするプロセッサタイプ
PGI 7.2 と同様に、32ビット x86 系のプロセッサ並びに 64ビットの AMD64、Intel(R) 64 のプロセッサに対応します。PGI
8.0 において、サポートする CPU は以下の表のとおりです。
新たに、インテル社のクアッドコア・プロセッサ Penryn プロセッサ用の最適化をサポートしました。
PGI コンパイラは、AMD64 ネイティブな最適化と Intel(R) インテル64 用の最適化を切り替えることが可能なクロス・コンパイル機能を有します。さらに、PGI コンパイラは、一つの実行モジュールフファイルで、AMD64 あるいは EM64T のどちらにも最適な性能を提供可能な
PGI Unified Binaries の機能を業界で初めて提供しております。PGI コンパイラを利用することで、将来、ご使用システムを Intel 64(EM64T) もしくは
AMD64 のどちらかの CPU プラットフォームに変更したとしても、最適化された共通コンパイラ基盤としてどちらのプラットフォームに対してもご利用いただけます。PGI
8.0 コンパイラがサポートするプロセッサの詳細に関しては、こちらをご覧ください。
PGI がサポートするプロセッサのデフォルトで使用するハードウェア機構
| prosessor |
Prefetch |
SSE1 |
SSE2 |
SSE3 |
32-bit |
64-bit |
Scalar FP
Default |
| AMD |
Athlon |
|
|
|
|
○ |
|
x87 |
| AMD |
Athlon XP/MP |
○ |
○ |
|
|
○ |
|
x87 |
| AMD |
Athlon64 |
○ |
○ |
○ |
|
○ |
○ |
SSE |
| AMD |
Opteron |
○ |
○ |
○ |
|
○ |
○ |
SSE |
| AMD |
Opteron Rev.E/F |
○ |
○ |
○ |
○ |
○ |
○ |
SSE |
| AMD |
Opteron/Quad-Core |
○ |
○ |
○ |
○ |
○ |
○ |
SSE |
| AMD |
Turion |
○ |
○ |
○ |
○ |
○ |
○ |
SSE |
| Intel(R) |
Celeron |
|
|
|
|
○ |
|
x87 |
| Intel(R) |
Pentium II |
|
|
|
|
○ |
|
x87 |
| Intel(R) |
Pentium III |
○ |
○ |
|
|
○ |
|
x87 |
| Intel(R) |
Pentium 4 |
○ |
○ |
○ |
|
○ |
|
SSE |
| Intel(R) |
Pentium M |
○ |
○ |
○ |
|
○ |
|
SSE |
| Intel(R) |
Centrino |
○ |
○ |
○ |
|
○ |
|
SSE |
| Intel(R) |
Pentium 4 EM64T |
○ |
○ |
○ |
○ |
○ |
○ |
SSE |
| Intel(R) |
Xeon EM64T |
○ |
○ |
○ |
○ |
○ |
○ |
SSE |
| Intel(R) |
Core Duo EM64T |
○ |
○ |
○ |
○ |
○ |
○ |
SSE |
| Intel(R) |
Core 2 Duo EM64T |
○ |
○ |
○ |
○ |
○ |
○ |
SSE |
| Intel(R) |
Penryn
(Quad core) |
○ |
○ |
○ |
○ |
○ |
○ |
SSE |
サポートするOS の追加
Linux 版においては、RedHat Enterprise Linux 5.x 、SUSE LINUX 10.3、11.0 並びに Federa
Core 9 をサポートしました。PGI 8.0 において、サポートする OS は こちらをご覧ください。
なお、PGI 7.0以前でサポートしておりました、古い Linux DistributionであるRedHat 8.0/7.3、SuSE 8.1/8.0、SLES8
SP2は、PGI 7.2 以降サポートしておりませんのでご注意ください。
PGI 8.0 の新コンパイラ・オプションと従来との変更部分(2008年11月)

PGI コンパイラ 8.0 において新規に導入されたオプションについて説明 しているPDF ファイルです。
- 未知のコンパイラ・オプションを指定した場合、今までは「警告」レベルの扱いでしたが、PGI 8.0 より、「エラー」として扱われます。この変更によって、コンパイラが認識できないオプション(スイッチ)が指定された場合、コンパイルエラーとなり停止することになります。
一例 : pgf95-Error-Unknown switch: -Mconcu
しかしながら、新しいコンパイラ・オプションである -noswitcherror を指定すると、従来のように、未知のオプション(スイッチ)が指定された場合、エラーで停止するの代わりに「警告」を出すように変更できます。
次のオプションは、PGI 7.2から追加あるいは、修正されたものです。
- -Mnodwarf DWARF デバッグ情報を生成バイナリに付け加えないように指示する新しいオプションです。
- -Mnofpapprox 低い精度の浮動小数点演算を使用しないように指示する新しいオプションです。
- -Minfo いくつかの新サブオプションが追加されました。
- all 以下のサブオプションをすべて指定したものと解釈します。 -Minfo=accel,inline,ipa,loop,lre,mp,opt,par,unified,vect
- accel アクセレータ情報の有効化
- ccff オブジェクトファイルに最適化情報のような情報を追加します
- ftn Fortran特有な情報の有効化
- hpf HPF特融な情報の有効化 information
- inline インライン情報の有効化
- lre LRE情報の有効化
- par 並列化の情報の有効化
- pfo プロファイル・フィードバックに関する情報の有効化
- vect ベクトル化の情報の有効化
- -Mconcur 二つの新しいサブオプション(allcores、bind)が追加されました。
- allcores 環境変数OMP_NUM_THREADS あるいは NCPUSにセットしていない場合、すべての有効なコアを使用する(リンク時に指定すること)
- bind スレッドをコアあるいはプロセッサにバインドする(リンク時に指定すること)
- -Mprof の新しいサブオプション:
[no]ccff CCFF情報の有効化 [無効化]
- -Msmartalloc の新しいサブオプション:
hugebss hugeページの中にBSSセクションを置く
- -Mvect の新しいサブオプション:
[no]short 短いベクトル演算を有効化[無効化]
-Mvect=short は、ループ外のスカラコードから生じる、あるいは、ループ・イテレーションの中から生じる短ベクトル演算のためのパックSSE演算の生成を有効化します。
- -mp 二つの新しいサブオプション(allcores、bind)が追加されました。
- allcores 環境変数OMP_NUM_THREADS あるいは NCPUSにセットしていない場合、すべての有効なコアを使用する(リンク時に指定すること)
- bind スレッドをコアあるいはプロセッサにバインドする(リンク時に指定すること)
- -Mneginfo いくつかの新サブオプションが追加されました。
- all 以下のサブオプションをすべて指定したものと解釈します。-Mneginfo=accel,inline,ipa,loop,lre,mp,opt,par,vect
- accel アクセレータ情報の有効化
- ftn Fortran特有な情報の有効化
- hpf HPF特有な情報の有効化 information
- inline インライン情報の有効化
- ipa Enable IPA information
- lre LRE情報の有効化
- mp OpenMP情報の有効化
- opt 最適化の情報の有効化
- par 並列化の情報の有効化
- pfo プロファイル・フィードバックに関する情報の有効化
- vect ベクトル化の情報の有効化
- -tp 三つの新しいターゲットCPUタイプ
- shanghai AMD Shanghai プロセッサ 32-bit mode
- shanghai-32 AMD Shanghai プロセッサ, 32-bit mode
- shanghai-64 AMD Shanghai プロセッサ, 64-bit mode
- --pedantic 含まれたシステムヘッダーファイルに関わる警告メッセージを印刷しりためのスイッチ
Common Compiler Feedback Format(CCFF)
Common Compiler Feedback Format (CCFF)を使用して、 PGI コンパイラは、どのようにプログラムの最適化を行ったら良いか、あるいは、特定の最適化がなされないのか等の情報を実行モジュールファイルに保存します。この情報をオブジェクトファイルに追加するためには、コンパイラ・オプション
-Minfo=ccff を指定します。
PGPROF 性能解析プロファイラは、CCFF コンパイラ・フィードバック情報を閲覧するためのインタフェースやプログラムのコンポーネントの性能に関する情報を提供するインタフェースを備えました。
OpenMPの強化
OpenMP は、FORTRAN と C/C++ プログラムにおける共有メモリ上のスレッド並列化を指定するために使用するコンパイラ指示行、API、環境変数の「仕様」です。
PGI Workstation 8.0 は、OpenMP 3.0 をサポートします。このサポートに関連したいくつか、強化した点があります。
【重要】
The C++ Standard Template library は、STLport コード内で許可された範囲でスレッドセーフとなりました。特定のコンテナーへの同時のアクセスは安全であり、共有コンテナーへの同時の読み込みも安全となります。しかし、共有コンテナーへの同時の書き込みは、#pragma
omp critical セクションを指示してプロテクトしなければいけません。
ユーザは、テンプレートのヘッダーファイルとライブラリのスレッドセーフ・バージョンを使用するためには、-mp オプションを伴うコンパイル&リンクを行わなければなりません。指示行、プラグマ、クロウズ(指示節)、ランタイム・ライブラリ、環境変数等の詳細に関しては、PGI
Workstation User's Guide(英文)の5章、Using OpenMP をご覧ください。
新しいOpenMPディレクティブとプラグマ
OpenMP プログラムの全てのパートは、「タスク」に一部です。このリリースでは、PGI は OpenMP 3.0 の部分となる次に示す、ディレクティブとプラグマをサポートします。
- 明示的な TASK を定義するために、Task ディレクティブと omp task プラグマ
- 現在のタスクが開始してから生成された「子」タスク終了を待つために指定する Taskwait ディレクティブと omp taskwait プラグマ
- the DO...END DO, PARALLEL DO、and PARALLEL WORKSHARE ディレクティブと共に使用するCollapse
(n) クロウズ(指示節)。これは、どの位のループ数が、このループ構造とともに関連しているかを指定するものです。
新しい OpenMP ランタイム・ライブラリ・ルーチン
PGI Workstation 8.0 は、三つの新しいランタイム・ライブラリ・ルーチンをサポートします。
- omp_get_ancestor_thread_num
このルーチンは、現スレッドにネストされたレベルを与えることにより、その先祖スレッドを返す。
- omp_get_active_level
このルーチンは、このルーチンを呼び出すタスクを囲んでいるアクティブなパラレル・リージョンが囲んでいる数を返す。PGI 現在、アクティブな並列リージョンが1レベルのみをサポートします。したがって、この値は、常に1となります。
- omp_get_level
このルーチンは、呼び出しコールを含むタスクを囲んでいる並列リージョンの数を返します。
- omp_get_team_size
このルーチンは、現スレッドの指定されたネストレベルに対して、その先祖に属するスレッド・チームのサイズを返します。
- omp_set_schedule
このルーチンは、the run_sched_var(ランタイムスケジュール)の値をセットします。
- omp_get_schedule
このルーチンは、the run_sched_varの値を返します。
新しい OpenMP 環境変数
PGI Workstation 8.0 は、以下の OpenMP環境変数をサポートします。
- OMP_MAX_ACTIVE_LEVEL
この変数は現在、無効となっております。一般には、ネスト並列性を有効(無効)にします。
- OMP_THREAD_LIMIT
この変数は、デフォルト64です。プログラムで使用可能な最大スレッド数の絶対数です。
- OMP_STACKSIZE
正式には、OMP_STACK_SIZE、 この変数は、デフォルトのスタックサイズを上書きします。新しく生成されたスレッドのサイズを制御します。
新しい MPI サポート
PGI 7.1より前のバージョンでは、MPI のサポートは、PGI CDK 製品のみとしていましたが、PGI 7.1 のリリース以降、MPICH1
が PGI Workstation/Server ライセンス(Linux版)にバンドルされました。ただし、このPGI Workstation/Serverライセンスでは、そのMPI
プログラムの PGDBG デバッギング並びに PGPROF プロファイル機能は、ローカルなシステム上でかつ制限されたプロセス数(現在4プロセス)の範囲内での使用に限定されております。
この PGI Workstation 8.0-1 リリースでは、ローカルな MPI 使用機能の中に、MPICH-1 だけではなく、HP-MPI for Linux、 MPICH-2、 あるいは、 MVAPICH のデバッギングとプロファイル機能を使用できるように利用拡張しました。なお、MPI ライブラリは、MPICH-1 のみバンドルされております。他の
MPIライブラリは、任意にインストールしていただく必要があります。
PGI Tools Guide は MPIを利用した場合のツールの使用方法を説明しています。
- PGPROF graphical MPI/OpenMP/multi-thread performance profiler.
- PGDBG graphical MPI/OpenMP/multi-thread symbolic debugger
なお、MPIの使用方法については、PGI User's Guide の6章 Using MPI の項目をご参照ください。
※ PGI MPI プログラム開発用コンパイル・オプション、ツールの使用方法のページをこちらです。
ライブラリ・インタフェース
PGIは、Fortranモジュールを使用することによってCインタフェースをエキスポートするライブラリへのアクセスを提供します。これらのライブラリと関数は、PGI
User's Guide の8章の述べられております。
PGI Workstation 8.0
この章では、Linux、 Windows、 and Mac OS Xの各 OS に関わる PGI Workstation/Serverのアップデート並びに変更について述べています。
●PGI Workstation 8.0 for Linux
暫定的な x64+GPU サポート
PGI Workstation 8.0(Linuxのみ)は、 NVIDIA GPU の CUDA が有効な 64ビットLinux に対して、新しい高級言語上の
PGI アクセレータコンパイラのプログラミングモデルを暫定的にサポートします。(これは、一般の製品ライセンスでは使用できません)
Java Runtime Environment (JRE)
Linux 上でのPGIのインストールでは、32ビットバージョンのJREを含みますが、十分な32ビット X Window をサポートサポートするためには、適正な関数等が有効である必要があります。
いくつかのシステムでは、たとえば、最近の Fedora Core では、これらの関数の一部が標準のインストールにおいて行われないようになりました。X
Window は、一般的には、以下のライブラリをサポートします。
libXau libXdmcp libxcb
libX11 libXext
●PGI Workstation 8.0 for Windows
PGI Workstation 8.0 for Windows は、linux86 (32ビット)並びに linux86-64 (64ビット)環境と同様なほとんどの機能をサポートします。
新しいライセンス取得方法の提供(Windows版のみ)
PGI Workstation 8.0 for Windows のインストールにおいて、インストール時に www.pgroup.com から自動ライセンスファイル生成手続きができるようになりました。
●PGI Workstation 8.0 for Mac OS X
PGI Workstation 8.0 for Mac OS X は、linux86 (32ビット)並びにlinux86-64 (64ビット)環境と同様なほとんどの機能をサポートします。このリリースノートあるいはユーザマニュアルで指摘していること以外は、基本的に
Linux版の機能と同一です。
PGI Unified Binary
全ての PGI コンパイラは、PGI Unified Binary オブジェクトあるいは実行モジュールを生成することができます。この PGI
Unified Binary とは、AMD64 と EM64T(インテル(R)64)のどちらのプラットフォームに対しても性能ペナルティがない形で、それぞれの
CPU ターゲットに対してフルに最適化されたコードを「一つの実行モジュール」として生成する機能です。プロセッサが異なると、そのハードウェア命令やキャッシュサイズ等のハードウェアの特徴が微妙に異なります。コンパイラは、アーキテクチャ特有の命令や命令スケジューリング、ベクトル化実装を行います。実行時に、この実行モジュールは、その実行プラットフォーム環境を認識し、動的に該当するコード・ストリームを選択します。実行時には、実行モジュールがその環境を見極め、動的に適切な最適化コードブロックを選択します。PGI
Unified Binary は、複数のハードウェア・プラットホーム上で最適に動作する単一の実行モジュールを低オーバーヘッドで提供します。
実行モジュールのサイズは自動的に Unified binary culling( 抜粋)を経て制御されます。ターゲットが生成コードに影響する場所のサブルーチンや関数だけが、ユニークなバイナリイメージを有するようになっています。その結果、各々のターゲットのバイナリイメージのフルコピーを生成するものに比較して、10~90%
のコードサイズの削減効果があります。
プログラムは、それを構成する全てのオブジェクト・ファイルが Unified binary としてコンパイルされなくても、PGI Unified
Biary として使用することが可能です。PGI Unified Binary のオブジェクト・ファイルは、他のオブジェクト・ファイルからなるライブラリやプログラムを生成するために使用できます。PGI
Unified Biary の実行には、特別なスタートアップコードは必要ありません。
-Mpfi オプションは、PGI Unified Binary の生成を抑止します。その代わり、ホストのためのデフォルトのターゲット自動検出ルールはターゲット・プロセッサを選択するために使用します。
配布と配置
ここでは、コンパイラを使用する上で、関連するトピックスについて述べます。特に、PGI Unified Binary 技術を通しての最適化や、Windows
上のリンクオプションについて、
さらに、siterc ファイルあるいは rc ファイルによるコンパイラのカスタマイズについて説明します。
- PGI Unified Binaries の生成、そのコマンドラインのスイッチ、ディレクティブ、プラグマに関しては、PGI User's Guide
の9 章の Distributing Files - Deployment にて詳しく説明しております。
- スタティックリンクやダイナミックリンクを選択する際のコンパイラ・オプションの使用例やスタティック、ダイナミック・リンク・ライブラリの生成、使用法等に関する詳細は、PGI
User's Guide の8章の Creating and Using Libraries に説明しております。
- 特別の用途で、コンパイラの初期設定ファイルである、Siterc ファイルやユーザ rc ファイルをカスタマイズする方法は、PGI User's
Guide の1章の Examples of Using siterc and User rc Files を参照してください。
アプリケーションの配置と再配布
PGI コンパイラで構築されたプログラムは、ランタイム・ライブラリ・ファイルを必要とする場合があります。PGI コンパイラがインストールされていないシステム上でこのようなプログラムを実行するような場合は、プログラムと共にランタイム・ライブラリ・ファイルも配布する必要があります。このために、全ての
OS プラットフォーム用の再配布用ファイルを提供しています。Windows 版では、PGI は、Microsoft(R) の再配布ファイルも提供しています。
PGI 再配布用ランタイム・ライブラリ
PGI 8.0 リリースでは、ランタイム・ライブラリを含むディレクトリは以下のとおりです。
- $PGI/linux86/8.0/REDIST
- $PGI/linux86-64/8.0/REDIST
- $PGI/win64/8.0/REDIST
- $PGI/win32/8.0/REDIST
これらのディレクトリには、PGI End-user License Agreement(EULA) の条項に基づいた PGI ライセンス契約によって再配布可能なPGI
Linux ランタイム・ライブラリの共有オブジェクトファイル、あるいは、Windo wsダイナミック・リンク・ライブラリ(DLL) が含まれます。
Linux REDIST ディレクトリに中には、サポートする全ての(CPU)ターゲット用の PGI ランタイム・ラブラリの共有オブジェクトファイルが含まれています。これによって、PGIがサポートしている、ほとんどの
Linux システム上で実行することが可能な実行モジュールと PGI ランタイム・ライブラリのパッケージを作成することが可能となります。但し、このために必要な事項は、以下のとおりです。
- 実行モジュールを実行するエンドユーザは、ランタイム・ライブラリの場所(パス)の設定等、そのための適切な環境を構築しておくこと
- Linuxにおいては、PGI共有オブジェクトの検索場所を指定するためにLD_LIBRARY_PATH環境変数をセットすること。
Microsoft(R) 再配布用ランタイム・ライブラリ
Windows上のPGI製品は、Microsoft Open Tools を含みます。Microsoft Open Toolsのディレクトリには、"redist"と言うサブ・ディレクトリが存在します。PGI
7.2ライセンシーは、PGI End-user License Agreementに準拠し、このディレクトリ内のファイルを再配布することができます。
|