PGI® 7.1 のリリース・ノートの詳細版は、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.0 と同様に、32ビット x86 系のプロセッサ並びに 64ビットの AMD64、Intel(R) 64 のプロセッサに対応します。PGI
7.1 において、サポートする CPU は以下の表のとおりです。PGI 7.0-3 から導入された CPU ターゲットである、-tp barcelona、 -tp barcelona-64 もサポートしております。これらのターゲットは、それぞれ新しい AMD クアッドコアのプロセッサ(Barcelona) の 32 ビット用、64ビット用に最適化するためのものです。なお、PGI
6.2 から新規に導入された target は core2 並びに core2-64 ですが、これは、インテル社の Core 2 duo 等の Core アーキテクチャを有するプロセッサとなります。インテル社のクアッドコア・プロセッサに対しても
core2、core2-64 のターゲットで最適化します。(インテル社のクアッドコアは、内部的にデュアルコアが二つ組み合わせたものであるため、下記の表の「コア数」の表示では
core2 が 2 コアと言う表示になっております)
PGI コンパイラは、AMD64 ネイティブな最適化と Intel(R) EM64T 用の最適化を切り替えることが可能なクロス・コンパイル機能を有します。さらに、PGI コンパイラは、一つの実行モジュールフファイルで、AMD64 あるいは EM64T のどちらにも最適な性能を提供可能な
PGI Unified Binaries の機能を業界で初めて提供しております。PGI コンパイラを利用することで、将来、ご使用システムを Intel 64(EM64T) もしくは
AMD64 のどちらかの CPU プラットフォームに変更したとしても、共通コンパイラ基盤としてどちらのプラットフォームに対してもご利用いただけます。PGI
7.1 コンパイラがサポートするプロセッサに関しては、こちらをご覧ください。
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 |
サポートするOS の追加
最新の Linux ディストリビューションである RedHat Enterprise Linux 5.0 、SUSE LINUX 10.3 並びに Federa
Core 7 を新たにサポートしました。従来からサポートしている SUSE Linux、 RedHat Enterprise Linux 3, 4 並びに Fedora Core 3, 4, 5、6 もサポートされます。 PGI コンパイラがサポートする Linux Distributions に関しては、こちらをご覧ください。なお、PGI 7.0 以前でサポートしておりました、古い Linux DistributionであるRedHat 8.0/7.3、SuSE 8.1/8.0、SLES8 SP2 は、PGI 7.1 以降サポートしておりませんのでご注意ください。
PGI Workstation and Server 7.1 Windows 版では、Winodws(R) の UNIX 環境のサブシステム(Subsystem for Unix-base Applications、Windows
Serviced for Unix) も対応しました。Windows(R) 上で使用可能なコマンドベースのコンパイラ(PGI Workstation
& Server)が対応する Windows(R) バージョンは、こちらをご覧ください。
PGI 7.1 では、2007 年12月 以降に、Intel プロセッサベースの Mac OS X に対応するコンパイラを正式にリリースします。
PGI 7.1 新しい有益な機能の追加
【MPIプロセスのデバッギング機能とプロファイル機能の追加】
- MPICH-1 ライブラリ (version 1.2.7) が製品の中にバンドルされました (Linux 版のみ)。
- Linux 版の PGDBG/PGPROF は、ローカル上(同一システム上)での 4 プロセスまでの MPICH-1 プロセス・デバッギング並びにプロファイリングが可能となります。一方、PGI CDK 製品は、ローカル並びにリモート MPI プロセス(MPICH-1、MPICH-2、MVARPICH) に対応し、その上限プロセス数は、購入ライセンスの「PGI
CDKプロセス数」まで対応します。
- Windows 版の PGDBG/PGPROF は、Microsoft Windows CCS クラスタ上で実行する MSMPI 並列プログラムのデバッギングとプロファイリング機能を有します。
PGI 7.1 コンパイラの新機能、特長等
- Multiple PGI Unified Binary Targets− 以前のバージョン PGI 7.0 より、-tpスイッチは、コンマ(,)で区切られた複数のプロセッサ Target リストを指定する形態をサポートしております。二つ以上の64-bit
ターゲットに対しての PGI Unified Binary としての最適化(例: -tp k8-64e,p7-64,core2-64 と指定すると三つのターゲットに最適化されたコードを生成します)を指示することができます。-tp
x64 オプションの場合は、-tp k8-64,p7-64 と等価となります。
PGI Unified Binary 指示用のディレクティブ、プラグマは、新しいプロセッサであるbarcelonaやCore 2 Duo 等のターゲットをサポートします。
- 性能の向上− いくつかの標準ベンチマークや研究コミュニティ・コード、ISVコードのベンチマークの測定において、5〜10% の性能向上を達成しました。詳細は、
http://www.pgroup.com/benchmark に記載いております。
- OpenMP− 全ての PGI 製品構成で、OpenMP 実行スレッド(自動並列を含む)の制約が撤廃されました。以前のバージョンでは、使用並列スレッドの実行数に制約がありました。OpenMP
ランタイムライブ、デバッガ、プロファイラの使用時のスレッド数は、ライセンス制約がなくなり、ソフトウェアのハードリミットである最大 64 までとなっております。
- PGC++ 低オーバーヘッドの例外処理の実装− 新しい例外ハンドリングの実装は、例外が引き起こされるまで例外処理のためのコストを先延ばしします。多くの例外領域を有しながら、あまり例外が起こらないプログラムでは、このためのコンパイル・オプションによって、ランタイム性能の向上に繋がるかもしれません。この新しい実装は、Windows
と libgcc_en を有した新しい Linux に対して有効です。
- Windows上のメモリ・アロケーションの向上− Windows システムのメモリ割付ルーチンのためのラッパーライブラリが、-Msmartalloc オプションにより有効となります。ラッパーライブラリは、多くのメモリをアロケーションするプログラムに対して性能を向上させるために、小さなブロックのヒープサイズを構成するようにします。メモリアロケータも、キャッシュ競合を避けるためにメモリの大きなブロックを整列するようにします。
- メモリ・アロケーションに対するhugeページの使用− -Msmartalloc が Linux 並びに Widows 上の large TLB をサポートするために強化されました。多くのメモリをアクセスするプログラムにとって、
huge page は TLBミスの数を削減する効果を持ち、性能が向上します。このオプションは、AMD のBarcelona やインテルの Core
2 システムに対して大きな効果をもたらします。古いアーキテクチャの場合は、TLB エントリの数が少ないため、その恩恵は小さくなります。
- 新しいFortran組込み関数、サブルーチン、属性− GET_COMMAND_ARGUMENT、GET_ENVIRONMENT_VARIABLES、GET_COMMAND、LEADZ、POPCNT、POPPAR、SIZEOF、CTIME8
、TIME8を実装しました。Windows上では、GETDAT、GETTIM、TIME64、 CTIME64、 LOCALTIME64 を加えて、DECORATE
属性をサポートしました。
- 追加Fortan I/O Feature− access=append パラメータを追加し、FLUSH 文をサポートしました。
- OpenMP強化−ループに対する C99/C++ スタイルの並列型を実装しました。さらに、64ビットlong、すなわち、long long を対象に加え、ループ・インデックス変数として全ての
unsigned 型の並列化に対応しました。
- Windows環境−inter-procedural analysis (IPA)のための Windows ライブラリ・ルーチンの範囲を拡大しました。また、長いコマンドラインをサポートし、コマンドライン上のレスポンスファイル(@filename)を伴う多くの引数持ったプログラムをリンクすることができます。
- gcc/g++ 互換性の強化− extension __builtin_expect をサポートし、aligned、 weak、alias 属性をサポートしました。さらに、特定なレジスタに対する変数サポートし、アセンブラコードで使用される名前を制御できるようにしました。
- profile-feedbackとcode placement最適化の強化− profile-feedback 最適化と code layout 最適化が32ビット/64ビットプラットフォーム上のF95, F77,
C, C++コンパイラで利用できます。新しいprofile feedback に基づいた最適化は、call-site inlining、 switch-statement、expansion,
register allocation を含みます。静的コードレイアウト最適化は、全てのプラットフォーム上で有効となります。
- SSEベクトル化の拡張− 間接アドレッシングの gather インデックス配列を有するループは、ベクトル化できるようになりました。FMAX, FMIN, DMAX,
DMIN リダクション演算もベクトル化できるようになりました。
ループ内の間接アドレッシングのベクトル化
PROGRAM TEST
IMPLICIT NONE
integer N
parameter(N=300)
integer nx,ny,nz,nu
parameter(nx=N)
parameter(ny=N)
parameter(nz=N)
parameter(nu=N)
real*4 a,b,c
integer ind
dimension a(nz,ny,nx)
dimension b(nz,ny,nx)
dimension c(nu)
dimension ind(nz,ny,nx)
integer i,j,k
integer index
double precision :: start, finish
call cpu_time(start)
do i=1,nx
do j=1,ny
do k=1,nz ! ループ内の間接アドレッシングのベクトル化
#if defined (VECT)
a(k,j,i) = a(k,j,i)+c(ind(k,j,i))*b(k,j,i)
! 以下の形態の間接アドレッシングは、ベクトル化不可
#else
index = ind(k,j,i)
a(k,j,i) = a(k,j,i)+c(index)*b(k,j,i)
#endif
enddo
enddo
enddo
call cpu_time(finish)
print *,"TIME for loop =", finish-start,"(second)"
end
photon26:~/PGI/indirect>pgf95 -fastsse -Minfo -DVECT indirect.F
test:
27, Generated vector sse code for inner loop (SSEベクトル化)
Generated 2 prefetch instructions for this loop
photon26:~/PGI/indirect> ./a.out
TIME for loop = 0.2781519889831543 (second)
photon26:~/PGI/indirect> pgf95 -fastsse -Minfo -DVECT -Mvect=nosse indirect.F
test:
27, Loop unrolled 4 times (SSEベクトル化を抑止)
photon26:~/PGI/indirect> ./a.out
TIME for loop = 0.2997751235961914 (second)
photon26:~/PGI/indirect> pgf95 -fastsse -Minfo indirect.F
test:
27, Unrolled inner loop 8 times (index = ind(k,j,i)として分離した場合)
Generated 3 prefetch instructions for this loop (ベクトル化しない)
Loop unrolled 4 times (completely unrolled)
photon26:~/PGI/indirect> ./a.out
TIME for loop = 0.3222777843475342 (second)
(自動並列化の適用も可能、外側ループで並列化)
photon26:~/PGI/indirect> pgf95 -fastsse -Minfo -DVECT indirect.F -Mconcur
test:
25, Parallel code for non-innermost loop generated; block distribution
27, Generated vector sse code for inner loop
Generated 2 prefetch instructions for this loop
Loop unrolled 4 times (completely unrolled)
photon26:~/PGI/indirect> ./a.out
TIME for loop = 0.1890208721160889 (second)
- 一時変数の使用の削減− 一時配列やサブプログラム実引数をコピーする際の associated descriptor (接続記述子)を再利用することによってスタック・フレームのサイズを削減しました。配列の値を持った関数から値を返す際のコピーを削除しました。
- FLEXlmライセンシングソフトウェアのアップグレード− 全てのプラットフォームで FLEXlm version を 11.4.1 にしました。
- サポートOS − RedHat Enteprise Linux 5.0、Fedora Core 7 並びに SUSE 10.3 をサポートしました。Windows(r)上では、GNU
ld を使用した SFU と SUA の配下でのネイティブなコンパイル・実行環境を提供します。
- Quad-Core AMD Opteron processor support− AMD クアッドコアのプロセッサ Barcelona Rev.B のためのチューニングパラメータやメモリコピールーチンを更新しました。Windowsアセンブラの中で、Barcelona
POPCNT 'OF B8' (Rev A) から 'F3 OF B8'(Rev. B)へのオペコードを更新しました。
- Apple Core 2 and Core 2 Duo support− PGI Workstation for Mac OS X を正式にリリースします。
PGI 7.1 の新コンパイラ・オプションと従来との変更部分(2007年10月)

PGI コンパイラ 7.1 において新規に導入されたオプションについて説明 しているPDF ファイルです。
- 未知のコンパイラ・オプションを指定した場合、今までは「警告」レベルの扱いでしたが、PGI 7.1 より、「エラー」として扱われます。この変更によって、コンパイラが認識できないオプション(スイッチ)が指定された場合、コンパイルエラーとなり停止することになります。
一例 : pgf95-Error-Unknown switch: -Mconcu
しかしながら、新しいコンパイラ・オプションである -noswitcherror を指定すると、従来のように、未知のオプション(スイッチ)が指定された場合、エラーで停止するの代わりに「警告」を出すように変更できます。
- -fast − 64ビットシステムのターゲット上での C/C++ 言語において、-fast 複合オプションの中に、 -Mautoinline オプションが加わりました。-fast
オプションの指定で、自動インラインモードでコンパイルすることになります。
- -noswitcherror −未知のオプション(スイッチ)が指定された場合、エラーで停止するの代わりに「警告」を出すように変更します。この同様な挙動は、コンパイラのサイト初期設定ファイル
siterc ファイルの中で、NOSWITCHERROR=1 をセットすることによって、サイトのデフォルトを変更することができます。siterc
ファイルは、一般に $PGI/linux86{-64}/7.1/bin の配下にセットします
- -Minline=[no]reshape − 配列の形態(Array shape) が一致しない場合でも Fortran におけるインライン処理を許可(抑止)します。-Mconcur
あるいは -mp の場合を除いたデフォルトは、-Minline=noreshape です。-Mconcu rあるいは-mp の場合のデフォルトは、-Minline=reshape
です。-Mipa=[no]reshape − IPA 処理において、配列の形態(Array shape) が一致しない場合でも Fortran
におけるインライン処理を許可(抑止)します。
- -Mmpi=[mpich1|mpich2] − デフォルトのものあるいは、指定されたMPIライブラリを使用します。
mpich1: デフォルトの MPICH-1 ライブラリを使用する
mpich2: デフォルトの MPICH-2 ライブラリを使用する(PGI CDK のみ)
MPICH ライブラリの使用方法については、こちらのページをご覧ください。
- -Mmpi2 − このオプションは削除されました。その代わり、-Mmpi=mpich2 を使用します。
- -Mprof[=[mpich1|mpich2]] − プロファイルするアプリケーションにリンクするための mpich1 とmpich2 ライブラリ名を、-Mprof オプションに指定するようになりました。
mpich1 : プロファイル用 MPICH-1 ライブラリを使用する。 -Mmpi=mpich1 を包含します。
mpich2 : プロファイル用 MPICH-2 ライブラリを使用する。 -Mmpi=mpich2 を包含します。(CDKのみ)
- -M[no]smartalloc[=huge|huge:<n>|hugebss] − -Msmartalloc オプションは、Linux 並びにWindows上での large TLBs をサポートするために強化されました。このオプションは、最適な
malloc ルーチンを有効にするために、メイン・プログラムをコンパイルする際に使用することが必要です。サブ・オプション huge は、シングルプログラムで使用される大きな
2MB ページを有効にするために指定します。これは、実行するために必要な TLB エントリ数を削減する効果があります。このオプションは、 AMD
の Barcelona やインテル(r)の Core2 システムで特に有効です。古いプロセッサ・アーキテクチャでは、TLB エントリの数が少ないため、大きな効果は期待できない可能性もあります。サポートするサブ・オプションは、以下のとおりです。
huge : huge page のランタイムライブラリをリンクします。
huge:<n> : 使用されるページの数の限度を n に設定します。
hugebss : huge page の中に BSS セクションを置きます。
それ自身、huge サブ・オプションは、必要とされる huge page をアロケートしようとします。Huge page の数は、:nサブ・オプションで制限を設けることができ、あるいは、環境変数
PGI_HUGE_SIZE でも設定できます。Hugebss は、プログラムの初期化されていないデータセクションを huge page の中に置きます。
- -O4 − -O4 レベルの最適化に、algebraic transformations と レジスタ・アロケーション最適化を追加しました。
- -M[no]unroll[=c:<n>|n:<n>|m:<n>] − マルチ・ブロックを持ったループをアンロールする機能を追加しました。特に、条件文を伴ったこのようなループでは、アンロールできるようになりました。新しいオプション
-Munroll="m" は、この機能を制御するために導入されました。
n:<n> : シングル・ブロックをn回アンロール
m:<n> : マルチ・ブロックをn回アンロール
デフォルトでは、-Munroll=m は有効となっておりません。また、-Munroll=m の場合のデフォルトの n 値は 4 です。
- -Mvect[=[no]gather] − gather(ギャザー)サブ・オプションが導入され、配列の間接参照を有するループのベクトル化ができるようになりました。コンパイラのデフォルトは、-Mvect=gather
です。
sum = 0.d0
do k=d(j),d(j+1)-1
sum = sum + a(k)*b(c(k))
enddo
- -M[no]propcond − equality conditionals から派生する assertions からの constant propagation 最適化を有効にします。これは、デフォルトで有効となります。
- -M[no]traceback− 環境変数 $PGI_TERM を使用することにより、ランタイム traceback のためにデバッグ情報が追加されました。また、デフォルトでのトレースバック機能は、f77、f90/f95では有効となっておりますが、C/C++では無効となっています。コンパイラへの初期設定ファイル
siterc あるいは、.mypg*rc ファイルに TRACEBACK=OFF をセットすることで、デフォルトのレースバック機能を無効にすることができます。反対に
OFF の代わりに ON と指定することによって、有効にすることができます。
- -M[no]fpapprox[=div|sqrt|rsqrt] − 特定の単精度浮動小数点演算を低精度近似を使用して実行します。
div : 浮動小数点除算近似
sqrt : 浮動小数点平方根近似
rsqrt : 浮動小数点逆数平方根近似
デフォルトでは、-Mfpapprox は使用されません。もし、サブ・オプションを指定しない -Mfpapprox のみの場合は、上記の全てのサブ・オプションが指定されたものとして扱います。
- -M[no]fpmisalign − AMD barcelona プロセッサに対して、16-byte 境界に整列されていないアドレスを持つメモリ・オペランドのベクトル演算命令の使用を許可します。デフォルト設定は、Barcelona
を含めて、全てのプロセッサにおいて -Mnofpmisalignです。本オプションは、-tp barcelona-64 あるいは、-tp barcelona
の設定時、あるいは、barceona 上でコンパイルされたときにのみ効果があります。また、このオプションでコンパイルされたコードは、barcelonaプロセッサ上だけで実行できるものとなりますのでご注意下さい。
- -M[no]loop32 − barcelona 上での 32-byte 境界上にある最内側ループを整列します。barcelona 上で 32-byte 境界で整列されている場合、小さなループは性能が向上する可能性があります。しかし、実際には、ほとんどのアセンブラが、まだ効果的なパッディング(padding)を実装していません。その結果、このオプションで遅くなる可能性もあります。Barcelona
に対して最適化されたアセンブラを有するシステム上でこのオプションを使用してください。デフォルトは、-Mnoloop32 です。
- -alias=[ansi|traditional] − C、C++プログラムにおける、「型」ベースのポインタ・エイリアス規則に基づき最適化方法を選択します。
ansi : ANSI C型ベースのポインタの一義化(disambiguation)を使用した最適化を有効にする
traditional : 型ベースのポインタ一義化を無効にする
C言語コンパイラでは、デフォルトは -alias=ansi で、C++においては、-alias=traditional としています。
- -Xs − C/C++ において、レガシーな標準モードを使用する。これは、-alias=traditional オプションを内包します。
- -Xt − C/C++ において、レガシーな移行モードを使用する。これは、-alias=traditional オプションを内包します。
- --zc_eh − ゼロ・オーバーヘッド例外領域を生成します。本オプションは、実際の例外処理が起こるまで、例外ハンドリングのコストを遅らせる措置を行います。多くの例外領域を有しながら、あまり例外が起こらないプログラムでは、このためのコンパイル・オプションによって、ランタイム性能の向上に繋がるかもしれません。デフォルトは、--zc_ehを使用しませんが、その代わり、setjmp
と longjmp と共に例外ハンドリングを実装する -sjlj_eh を使用します。このオプションは、PGI C++の以前のバージョンでコンパイルされた
C++ コードにも互換性があります。--zx_eh オプションは、libgcc_eh 内のシステムunwind ライブラリを提供している新しい
Linux システムと Windows 上でのみ有効です。
- -Xm − このオプションは削除されました。C++ コンパイラに、名前の中のドルサイン($)を許すことを指示するものでした。今は、ほとんどの場合、ドルサインは許可されております。
- -Bstatic and -Bdynamic − Windows 上において、-Bstatic と -Bdynamic オプションが新規に使用できるようになりました。-Bstatic は、コンパイルされたプログラムに静的ライブラリをリンクするものです。-Bdynamic
は、DLLをリンクするものです。(注意)実行形式モジュールにリンクされる全てのファイルは、同じオプションでコンパイル・リンクされなければなりません。デフォルトは、-Bstatic
となります。
- -Mmakedll − -Mmakedll オプションは、このバージョンから -Mdynamic オプションを内包します。
- -Mdll − -Mdll オプションが削除されました。その代わり、-Mdynamic オプションを使用します。
- -stack=nocheck − -stack オプションは、Windows上で自動ランタイムスタック拡張を行わないようにすることができるように変更されました。もし、researve
と commit サブオプションが、十分なスタック量を確保できるようにセットされたなら、自動的な拡張チェックは必要ありませんし、スタックのチェックを避けることができます。デフォルトは、-stack=checkです。Win64
では、デフォルトの researve 値あるいは commit 値はありません。Win32 では、researve、commit それぞれのデフォルト値は、2,097,152byte
です。
- -Mchkstk − −Mchkstk オプションでコンパイルされたプログラムは、スタック high-water mark の情報を収集できるように指示できます(Windows版のみ)。もし、環境変数
PGI_STACK_USAGE が実行時にセットされた場合、スタックの high-water mark が実行終了時に印字されます。
- -[no]compress_names − C++ マングル名を 1024 キャラクタにフィットするように圧縮します。高度にネストされたテンプレート・パラメータは、非常時長い関数名が作成されるようになります。これらの長い名前は、古いアセンブラでは問題を引き起こす原因になります。現在のデフォルトは、-no_compress_names
です。全ての C++ユーザコードは、このスイッチを使用する際に、再度コンパイルされなければなりません。PGI によって提供されるライブラリは、-compress_names
と共に動作します。
- -V − -Vオプションは、プロセッサ名をプリントするようになりました。例えば、Core 2 Duo 上でコンパイルすると-Vオプションは、-tp
core2-64 と表示します。
- -Mstandard − -Mstandard は、-Mbackslash を内包しました。これは、-Mstandard が現れたときにバックスラッシュ・エスケープ・シーケンスを認識することを禁止します。例えば、バックスラッシュは標準的なキャラクタとして扱います
PGDBG(デバッガ)の新機能等 NEW!!
PGI Workstation/Server 7.1は、PGDBG 並列デバッガの中で、いくつかの新しい機能の追加と機能強化を行いました。
- PGDBG 7.1 は、PGDBG が動作する同じシステム上で動く MPICH-1 の 4 つのプロセスまでのアプリケーション・デバッグができるようになりました。以前までのバージョンでは、MPI プロセスのデバッギング機能は含まれておりませんでした。(OpenMPスレッド並列のデバッギングも従来どおり可能です)
- PGDBG 7.1 (Windows版)は、Microsoft(R) Windows CCS クラスタ上で動作する MSMPI アプリケーションのデバッギングをサポートしました。これは、CCS対応の MSMPI デバッギングをサポートする、業界で初めての製品です。
- PGDBG 7.1 は次の機能の強化を行いました。
・ スタックトレース機能の向上
・ Microsoft(R) Visual C++ との互換性をより強化しました
・ gcc/g++ との互換性をより強化しました
・ 高速な disassebly 全体の性能向上
PGPROF(プロファイル)の新機能等 NEW!!
PGI Workstation/Server 7.1 は、PGPROF 並列プロファイラの中で、いくつかの新しい機能の追加と機能強化を行いました。
- PGPROF 7.1 は、集合通信ルーチンも MPI プロファイリングをサポートします。
- PGPROF 7.1 は、(Windows版) は、Microsoft(R) Windows CCS クラスタ上で動作する MSMPI アプリケーションのプロファイリングをサポートしました。
- PGPROF 7.1 は、いくつかの GUI の向上を行いました。
Linux上でのMPICHプログラムの実行
PGI Workstation/Server 7.1 for Linux は、MPICHライブラリ、ツールを製品の中にバンドルし、さらに、MPIプログラムをコンパイルし、実行、デバッグ、プロファイリングを行うためのライセンスを含む形となりました。PGI
Workstationは、一つのシングルノード上にインストールされ、そのノードは、あたかもクラスタのように扱われます。MPIデバッガ&プロファイラは、PGI Workstation / Server ライセンスでは、一つのノード上のみのプロセス分析に制約されますが、PGI CDKライセンスでは、ローカル、リモートを問わず、一般的なクラスタ上での開発ツールとして使用することが可能です。PGI Tools Guide は、MPIを利用する際のツールの利用法について詳細に説明しております。
※ PGI MPI プログラム開発用コンパイル・オプション、ツールの使用方法のページを新設しました。
- PGIPROF は、グラフィカル MPI/OpenMP/マルチスレッド対応の性能解析プロファイラ
- PGDBG は、グラフィカル MPI/OpenMP/マルチスレッド対応のシンボリック・デバッガ
- 32ビット/64ビット MPICH MPI ライブラリ、バージョン1.2.7 開発環境(Linuxのみ)
PGI Workstation 7.1 for Apple Mac OS
PGI Workstation 7.1 for Mac OS X は、linux86 並びに linux86-64 に対する 32 ビット、64
ビットの機能・特徴のほとんどをサポートします。このリリースノートで注意として記されたもの以外は、MacOS 機能上の PGI コンパイラとツールは、Linux
のものと同一です。
Mac OSデバッギング
(注意) 技術的な問題により、現リリースでは、 MAC OS X 上の PGDBG デバッガは、サポートされません。 PGI 社は Apple社と共に、この問題の解決を図っております。できるだけ早く、今後のソフトウェアの中に組み込めるように計画しております。
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 のディレクティブとプラグマ
- -tp スイッチは、コンマ(,)で区切られた複数のプロセッサ Target リストを指定する形態をサポートしました。二つ以上の 64-bit
ターゲットに対しての PGI Unified Binary としての最適化(例: -tp k8-64e,p7-64,core2-64 と指定すると三つのターゲットに最適化されたコードを生成します)を指示することができます。-tp
x64オプションの場合は、-tp k8-64,p7-64 と等価となります。
- PGI Unified Binary 指示用のディレクティブ、プラグマが新設されました。これらは、コンパイラに対して、一つ以上のターゲット用の
Unified Binary 最適化コードを関数、サブルーチン、ファイル全体に対して生成するように指示するものです。ディレクティブを指示した場合は、特別のコマンドライン・オプションは必要ありません。
Fortran ディレクティブの書式は、以下のとおりです。
!pgi$[g|r| ] pgi tp [target]...
ここで、ディレクティブが有効となるスコーピングの範囲は、g(global)、r(routine)、あるいは空白で指示します。デフォルトは、r(routine)
単位となります。例えば、
!pgi$g pgi tp k8_64 p7_64
は、全体のソースファイルに対して( g(global) でスコーピングを指示している)、k8_64 並びに p7_64 用の最適化を施した Unified
Binary を生成すると言う意味となります。
C/C++のプラグマの書式は、以下のとおりです。
#pragma [global|routine|] tp [target]...
ここで、ディレクティブが有効となるスコーピングの範囲は、g(global)、r(routine)、あるいは空白で指示します。デフォルトは、r(routine)
単位となります。
#pragma routine tp k8_64 p7_64 core2_64
これは、次の function/routine に対して、k8_64、p7_64、core2_64用の Unified Binary を生成すると言う意味となります。
環境モジュール(Environment Modules)の使用
- Linux 環境における Environment Modules パッケージ(例えば、the module load command) を使用しているユーザに対して、該当するモジュールファイルをセットアップするためのスクリプトを提供しました。
PGIコンパイラをインストールしたディレクトリ /opt/pgi、そしてMODULEPATH環境変数の値を /usr/local/Modules/modulefiles
と仮定した場合、次のコマンドを実行してください。
/opt/pgi/linux86/7.1-1/etc/modulefiles/pgi.module.install -all -install /usr/local/Modules/modulefiles
このコマンドは、インストールされているPGIコンパイラの全てのバージョンに対するモジュールファイル(module files) を作成します。
modulefiles ディレクトリには、writeパーミッションを与える必要があります。これによって、moduleコマンドを有効化します。
module load pgi32/7.1
module load pgi64/7.1
module load pgi/7.1
ここで、pgi/7.1は、32ビットシステム上では32ビットのコンパイラを、64ビットシステム上では、64ビットコンパイラを使用すると言う意味となります。何のバージョンが有効かを見るためには、以下のコマンドを使用してください。
Module avail pgi
- Module loadコマンドは、次のような環境変数をセット、あるは修正することができます。
| PGI |
the base installation directory |
| CC |
full path to pgcc |
| FC |
full path to pgf90 |
| F90 |
full path to pgf90 |
| F77 |
full path to pgf77 |
| CPP |
full path to pgCC |
| CXX |
path to pgCC |
| C++ |
path to pgCC |
| PATH |
prepends the PGI compiler and tools bin directory |
| MANPATH |
prepends the PGI man page directory |
| LD_LIBRARY_PATH |
prepends the PGI library directory |
Environment Modules パッケージ自身は、PGI 製品のサポートの範囲外ですので、詳細については、以下のURLをご覧ください。 (http://modules.sourceforge.net)
REDIST ディレクトリ
PGI コンパイラで構築されたプログラムは、ランタイム・ライブラリ・ファイルを必要とする場合があります。PGI コンパイラがインストールされていないシステム上でこのようなプログラムを実行するような場合は、プログラムと共にランタイム・ライブラリ・ファイルも配布する必要があります。このために、全ての
OS プラットフォーム用の再配布用ファイルを提供しています。Windows 版では、PGI は、Microsoft(R) の再配布ファイルも提供しています。
PGI 再配布用ランタイム・ライブラリ
PGI 7.1 リリースでは、ランタイム・ライブラリを含むディレクトリは以下のとおりです。
- $PGI/linux86/7.1/REDIST
- $PGI/linux86-64/7.1/REDIST
- $PGI/win64/7.1-1/REDIST
- $PGI/win32/7.1-1/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.1ライセンシーは、PGI End-user License Agreementに準拠し、このディレクトリ内のファイルを再配布することができます。
|