| PGI コンパイラ製品の購入をご検討の方は、こちらからお問い合わせください |

|
 |
|
|
New Release Information
最新リリース情報
|
|
|
|
ソフテックは、PGI 製品の公認正規代理店です
|
| PGI® Workstation & PGI® Server 7.0 Release |
米国 PGI 社の PGI Workstation/Server コンパイラ製品のバージョン7.0 をリリースしましたのでお知らせいたします。本リリースにおける製品の主な新機能、特徴に関して以下に説明します。なお、ソフトウェアは http://www.softek.co.jp/SPG/ftp.html ページにてダウンロード可能です。 (2007年3月)
現在の最新バージョンは、version 7.0 となります。サブスクリプション(保守)契約をご購入あるいはご継続中のお客様は、新リリースのソフトウェアをダウンロードの上、再インストールをお願いいたします。最新の「日本語インストールの手引き」を必要なお客様は、support@softek.co.jp へメールにて依頼いただければ、送付いたします。新リリースのソフトウェアの入れ替えは次のステップで行うことができます。
バージョンアップの方法についての詳細は、こちらをご覧ください。
STEP1 : 新リリースのソフトウェアのダウンロード
STEP2 : 新リリースのソフトウェアのインストール
STEP3 : 新リリースのライセンス・キーの取得と license.dat の入れ替え
ライセンスの更新に関する FAQ は、こちらをご覧ください。
|
|
|
|
|
・旧バージョン PGI® 6.2 のリリースノートは、こちらのページで閲覧できます。
・旧バージョン PGI® 6.1 のリリースノートは、こちらのページで閲覧できます。
・旧バージョン PGI® 6.0 のリリースノートは、こちらのページで閲覧できます。
・PGI 7.0 の英語版リリース・ノートは、こちらで閲覧できます。
|
| Version 7.0 の新機能、特徴 (2007年3月) |
|
Release 7.0 PGI Compiler Features and Performance (主な新規機能、特長について)
- (NEW) PGI 7.0-3 以降、新プロセッサAMD クアッドコア・プロセッサ(Barcelona) に対応しました。
- (NEW) 新しい OS / Distributions のサポート
- 64-bit and 32-bit Microsoft Subsystem for UNIX-based Applications (SUA)
and 32-bit Microsoft Services for UNIX (SFU)
- 64-bit and 32-bit Apple Mac OS X Preview
- SuSE 10.2
- Fedora Core 6
- Windows Vista
- PGI Unified Binary - AMD と インテルの両方の x64 プロセッサにフルに最適化された、一つの実行バイナリの生成
- (NEW) Fortran ディレクティブあるいは C/C++ プラグマを利用して、複数の 64-bit ターゲット用の最適化を関数、サブルーチン単位、あるいはファイル全体に対して適用可能
- (NEW) 性能が向上する部分(関数、サブルーチン等)にのみ、複数のターゲット特定のバイナリを生成することにより、PGI 6.2 に較べて 5〜90%
のコードサイズの縮減が可能
- (NEW) Fortran 2003 サポートの追加
- 外部ファイルからの非同期 read/write
- Stream I/O
- BIND and C_LOC ISO 'C' bindings
- (NEW) C99 サポートの強化
- (NEW) ネットワーク対応のインストール方法の追加(インストール・スクリプト)
- (NEW) 複数のコンパイラ環境とバージョンを単純に変更できるユーザ・モジュール(シェル環境)の提供
- (NEW) 拡張アセンブラ/GNU statement expressions等を含む GCC 互換機能の強化
- OpenMP 2.5 のほかに (NEW)提案されている OpenMP 3.0 機能の一部サポート
- (NEW) C/C++ プロプロセッサの向上(ビック・マクロ・サポートとの強化を含む)
- (NEW) 新しい Intel SS3E3 命令、AMD SSE4a と ABM 命令の使用
- (NEW) Windows互換性の強化
- (NEW) PGPROF は、oprofile を実装したシステム上で、ハードウェア性能カウンタの集積と表示をサポートしました。
- (NEW) PGI User's Guide と PGI Tools Guideの再構成とアップデート
- PGI Fortran Reference manual のアップデート
- (NEW) すべてのターゲットに対する PGI 最適化 ACML 3.6 数学ライブラリのサポート( serial and OpenMPの二つのバージョンをバンドル)
|
|
| PGI Release 7.0 の詳細 |
|
PGI® 7.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ビット 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 6.1 と同様に、32ビット X86 系のプロセッサ並びに 64 ビットの AMD64、Intel 64(EM64T) の両方のプロセッサに対応します。PGI コンパイラの大きな特長は、CPU ターゲットを指定するコマンド・ライン・オプションである -tp p7-64
を指定することで、Intel(R) EM64T に特化した最適化を行います。PGI コンパイラは、AMD64 ネイティブな最適化と Intel(R)
EM64T 用の最適化を切り替えることが可能なクロス・コンパイル機能を有します。さらに、PGI コンパイラは、一つの実行モジュールにおいて、AMD64 あるいは EM64T のどちらにも最適な性能を提供可能な
PGI Unified Binaries の機能を業界で初めて提供しております。
PGI コンパイラを利用することで、将来、ご使用システムを Intel 64(EM64T) もしくは AMD64 のどちらかの CPU プラットフォームに変更したとしても、共通コンパイラ基盤としてどちらのプラットフォームに対してもご利用いただけます。なお、PGI
6.2 から新規に導入された CPU target は、これは、インテル社の Core 2 Duo 等の Core マイクロアーキテクチャ(Xeon 5000番台 を含む)を有するプロセッサとなります。PGI 7.0-3 以降では、AMD クアッドコアのプロセッサ(Barcelona)をサポートしました。PGI 7.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 |
サポートするOS の追加
最新の Linux ディストリビューションである SUSE LINUX 10.2 並びに Fedora Core 6 を新たにサポートしました。従来からサポートしている SUSE Linux、 RedHat Enterprise Linux 3, 4 並びに Fedora Core 3, 4, 5 もサポートされます。 PGI コンパイラがサポートする Linux Distributions に関しては、こちらをご覧ください。
PGI Workstation and Server 7.0 Windows 版では、Winodws(R) の UNIX 環境のサブシステム(Subsystem for Unix-base Applications、Windows
Serviced for Unix) にも対応しました。Windows(R) 上で使用可能なコマンドベースのコンパイラ(PGI Workstation
& Server)が対応する Windows(R) バージョンは、こちらをご覧ください。
PGI 7.0 では、2007 年第 3Q 以降に、Intel プロセッサベースの Mac OS X に対応するコンパイラをリリースする予定です。2007 年 4 月以降にプレビュー・バージョンがリリースされます。なお、現在の予定では、Mac OS X 版を単独のコンパイラ製品として販売せずに、他のOSプラットフォームと組み合わせたクロスプラットフォーム版の製品として販売する予定です。Mac OS X用のプレビュー版のリクエストフォームは、こちらにあります。
(Windows Vista 上での注意)
PGI 7.0 はWindows(R) Vista(32ビット、64ビット)上でもサポートされておりますが、2007年3月現在、Macrovison
社の FLEXlm ライセンス管理ソフトウェア(lmgrd) が Vista に十分対応していないため、この lmgrd ソフトウェアの自動起動ができません。システムの再起動の度に、「手動」で FLEXlm ライセンス管理マネージャ(lmgrd.exe) を起動する必要があります。詳細に関しましては、こちらをご覧ください。
新しいシステムコール
PGI 7.0 における PGI 用の Runtime ライブラリの中で、例えば、OpenMP や Fortran I/O に関係するものなどは、Linux
システムに実装されたシステムライブラリを利用しています。本リリースでは PGI の Runtime ライブラリに、以下に記すLinux システム・ライブラリの使用を追加しております。
64ビットLinuxシステム上で、追加されたライブラリは以下のとおりです。
aio_error aio_read aio_return
aio_suspend aio_write calloc
getrlimit pthread_attr_init pthread_mutex_init
pthread_mutex_lock pthread_mutex_unlock setrlimit
sleep
32ビットLinuxシステム上で、追加されたライブラリは以下のとおりです。
aio_error aio_read aio_return
aio_suspend aio_write calloc
getrlimit pthread_attr_init setrlimit
sleep
PGI 7.0 コンパイラの新機能、特長等
- PGI Unified Binaries− PGI 7.0コンパイラは、PGI 6.1で導入された PGI Unified Binary オブジェクトあるいは実行モジュールを生成することができます。この
PGI Unified Binary とは、AMD64 とEM64T(インテル(R) 64)のどちらのプラットフォームに対しても性能ペナルティがない形で、それぞれのターゲットに対してフルに最適化されたコードを「一つの実行モジュール」として生成する機能です。プロセッサが異なると、そのハードウェア命令やキャッシュサイズ等のハードウェアの特徴が微妙に異なります。コンパイラは、アーキテクチャ特有の命令や命令スケジューリング、ベクトル化実装を行います。実行時に、この実行モジュールは、その実行プラットフォーム環境を認識し、動的に該当するコード・ストリームを選択します。この
PGI Unified Binary を生成するためには、コンパイラオプション -tp x64 を明示的に指定してコンパイルする必要があります。また、以下に述べるように、複数のターゲットを指定することもできます。
プログラムは、それを構成する全てのオブジェクトファイルが Unified binary としてコンパイルされなくても、PGI Unified
Biary として使用することが可能です。 PGI Unified Binaryのオブジェクトファイルは、他のオブジェクトファイルからなるライブラリやプログラムを生成するために使用できます。PGI
Unified Biary の実行には、特別なスタートアップコードは必要ありません。
- Multiple PGI Unified Binary Targets− -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 routine tp k8_64 p7_64 core2_64
これは、次の function/routine に対して、k8_64、p7_64、core2_64 用の Unified Binary を生成すると言う意味となります。
- PGI Unified Binary Culling− PGI Unified Binary の生成において、そのプロセッサ target が生成コードに影響を及ぼす関数やサブルーチンのみに対して、ユニークなバイナリイメージとなります。その結果、パフォーマンスに影響を及ぼさないで、PGI
6.2 のもの(個々のターゲット用にフル最適化コードを生成していた)に較べて 10〜90% 程度のコードサイズの縮小が見られました。
- Fortran 2003 ISO_C_BINDING− 組み込みモジュール ISO_C_BINDING が、部分的に実装されました。BIND 属性は、C 言語の型にマッピングするための派生タイプや定数
kind 定義を行うためにサポートされました。「手続き」に対しては、グローバルデータに対しての BIND 属性だけではなく、VALUE と BIND
属性がサポートされました。オブジェクトの C 言語におけるアドレスを返す、手続き C_LOC がサポートされました。ISO_C_BINDING
におけるその他の手続き、例えば、C_ASSOCIATED 等はまだサポートしていません。
test.c: call by value
int main(int ac, char *av[])
{
call_fortran_(99);
}
f.f95:
subroutine call_fortran(i)
integer, value :: i
print *, i
end
$ pgf95 -c f.f95
$ pgcc test.c f.o -pgf90libs
$ ./a.out
99
- Fortran 2003 Allocatable Regularization− Fortran 2003 の割付規則が PGF95 に実装され、これがいつも使用可能となっております。これらの変更によって、割付配列が、仮引数や関数からの戻り数、そして派生タイプのコンポーネント(要素)になることが可能となります。
- Fortran 2003 Allocatable Array Assignment− Fortran 2003 の割付配列の割り当てルールがPGF95 で利用可能となりました。デフォルトは、Fortran 95 の割当ルールが適用されますが、オプション
-Mallocatable=03 を指定すると Fortran 2003 割当ルールが適用されます。
- Fortran 2003 Asynchronous Input/Output− Fortran 2003 の非同期I/Oの機能が、部分的にPGF95 並びに PGF77 で利用可能となりました。Open 文において、ASYNCHRONOUS='YES'
を指定した外部ファイルに対して適用可能です。実際の非同期 I/O 処理では、READ文、WRITE 文内にASYNCHRONOUS='YES'
の指定が必要です。なお、コンパイラには、まだ ASYNCHRONOUS 属性やASYNCHRONOUS 文は実装していません。
program test character*13 b
b = "hello, world\n"
open(unit=10,file='u.dat',access='stream',form='unformatted',asynchronous='yes')
write (unit=10, asynchronous='yes') b ! Do something useful wait(10) close(10)
end
- Fortran 2003 Stream Input/Output− Fortran 2003 の stream access I/O が実装されました。
iostream.f90:
program binarytest
real*8 test(20000)
real*8 test1(20000)
integer*4 testnum
character*8 ICHA,ICHA1
character*20 formtype,accesstype
testnum=10
ICHA="ABCDEFGH"
do i=1,20000
test(i)=real(i)
enddo
! OPEN(33, FILE='test.b', ACCESS='sequential', FORM='binary')
OPEN(33, FILE='test', ACCESS='STREAM', FORM='binary')
inquire(33,form=formtype,access=accesstype)
print *,formtype,accesstype
write(33) (test(i),i=1,testnum)
write(33) 10,20
write(33) ICHA
write(33) (test(i),i=testnum+1,testnum*2)
rewind(33)
read(33) (test1(i),i=1,testnum)
read(33) i11,i21
read(33) ICHA1
read(33) (test1(i),i=testnum+1,testnum*2)
print *,(test1(i),i=1,testnum)
print *,i11,i21
print *,ICHA1
print *,(test1(i),i=testnum+1,testnum*2)
CLOSE(33)
stop
end
$ pgf95 -V iostream.f90
pgf90 7.0-2 32-bit target on x86 Linux
Copyright 1989-2000, The Portland Group, Inc. All Rights Reserved.
Copyright 2000-2007, STMicroelectronics, Inc. All Rights Reserved.
$ ./a.out
UNFORMATTED STREAM
1.000000000000000 2.000000000000000 3.000000000000000
4.000000000000000 5.000000000000000 6.000000000000000
7.000000000000000 8.000000000000000 9.000000000000000
10.00000000000000
10 20
ABCDEFGH
11.00000000000000 12.00000000000000 13.00000000000000
14.00000000000000 15.00000000000000 16.00000000000000
17.00000000000000 18.00000000000000 19.00000000000000
20.00000000000000
FORTRAN STOP
- Fortran lib3f− 他のプラットフォームと一致させるために、Win32 用に sleep3f、sleepqq3f を実装しました。
- ANSI C99− __STDC_VERSION__ のデフォルト値を 199901L として定義しました。 Designated initializers
と Compound literals が実装されました。
- C Preprocessor − 大文字の .S サフィックスを有するファイルは、アセンブラにファイルを渡す前に前処理を行うためのアセンブラ・ソースファイルとして扱います。但し、”C”
の識別子には、”$” を含むことができるため、”$” に続くマクロに関しては、プリプロセッサによって拡張はされません。プリプロセスされるソースがアセンブラファイルの場合(
.s あるいは .S の入力ファイルの場合)、”$” はプリプロセッサにおいて識別子から除外されます。
- C++ __restrict type qualifier− __restrict 型修飾子は、ポインタを通してアクセスされる全てのデータが restrict ポインタを使用してアクセスする必要があるポインタであることを示します。__restrict
型修飾子は、const 型修飾子と同じような意味合いを有します。コンパイラに更なる最適化を促すことができます。
- Expanded gcc compatibility− PGC++ コンパイラは、今回 gcc の拡張アセンブラ、インライン組込みライブラリ、GNU statement expressions、そして、再定義可能なプリデファイン・マクロである、__PGIC__、__PGIC_MINOR__、
and __PGIC_PATCHLEVEL__をサポートしました。Linux においては、.init と.fini セクションの代わりに、constructors/destructors
用の .ctor 並びに .dtor セクションを使用します。
- Expanded cl compatibility− Windows(R)上において、Microsoft CL、すなわち -D__STDC__=0 との互換性を保つために、__STDC__ を定義しました。また、定数サフィックス
i64 と ui64 をサポートしました。さらに、__declspec(aslign(n)) (ここで nは2,4,8,16,or 32 )のサポートと、Windows上で
GNU __extension__ キーワードのサポートを加えました。
- OpenMP 3.0 Stack Size− OpenMP 3.0 の OMP_STACK_SIZE 環境変数とスタックサイズ API が、新たに生成されるスタック(子スタック)のサイズを制御するためにサポートされました。API
の関数としては、omp_set_stack_size と omp_get_stack_size が実装されております。
(例)export OMP_STACK_SIZE=100M
システム上のデフォルトスタックサイズを修正します。B,K,M,Gのサイズ識別子を付加する
ことができます。B=Byte,K=Kbyte,M=Megabyte,G=Gigabayte の意味です。
- OpenMP 3.0 Wait Policy− OpenMP 3.0 の OMP_WAIT_POLICY 環境変数は、スレッドのアイドル時の挙動に影響を与えるもので、特に、アイドル時、spin
か sleep のどちらを使用するかを指定するものです。シリアルリージョンの実行中、待機しているスレッドは、バリア(ACTIVE) を使用した
busy wait の状態、あるいはオペレーティングシステム内の mutex(PASSIVE) を使用した politely wait のどちらかを選択でき、これは、OMP_WAIT_POLICY
をセットすることにより可能となります。デフォルトは、ACTIVE です。詳細は、こちらのページに説明しています。
(例)
export OMP_WAIT_POLICY=ACTIVE (default)
export OMP_WAIT_POLICY=PASSIVE
ACTIVE : 並列スレッドアイドル時に、スレッドをスタンバイの状態で保持(CPUを使用)
PASSIVE: 並列スレッドアイドル時に、スレッドの制御を OS に任せる(リリースする)
- Support for SSSE3, SSE4a, and ABM− Intel(R) Core 2 の SSSE3 命令と AMD SSE4a とABM 命令は C 並びに C++ のインライン組込みパッケージに取り込まれました。さらに、これらの命令は、拡張アセンブラを通して利用可能であり、またWindows(R)
では as32 あるいは as64 アセンブラの中で利用可能です。Window(R) アセンブラは GNU 形式の構文をサポートしています。Linux
上では、これらの命令は、binutils パッケージの中の as を通して利用可能です。
- 性能の向上− コード生成時の最適化が強化されました。これには、プロパゲーション最適化、符号拡張の排除、使用していないゼロ拡張の削除、dead-store
の排除、戻り番地へ飛ぶ際の 2バイトリターンの使用、32bit と 64bit のシフト処理の最適化、さらに最良のレジスタ割付等の最適化が含まれます。
- Fortran/C/C++性能− ハイレベルの最適化が強化されました。これには、シリアル処理上のネスト内の冗長分岐の排除、より多くの部分をベクトル化や自動並列化の対象となるように解析手法の向上、ポインタ変数を活性させる
LRE(Load Redundancy Elimination)、ローカルな共通な演算項の削除を行う範囲の拡大、C++ コンパイラへの LRE
の追加、確度の低いターゲットへの分岐やまれなパス上でのみ呼び出されると考えられる、ある特定の関数名の出口の発見 (an exit heuristic)
等の最適化を含みます。
- マルチコアプロセッサのための自動並列化 − ループの繰り返し数が少ないと判断されるような対象に対しても自動並列化の対象となるかどうかの確認を強化しました。また、自動並列化ループに対してシリアル処理用の代替コードを生成する時、ネスト・ループを含むループに対してもより多くの検討対象となるように、機能が強化されました。
- ベクトル化の強化− ベクトライザの更なるチューニングがなされました。これには、イディオム(idiom:慣用句)の認識の向上や型変換を伴うループのベクトル化等が含まれます。64ビットのターゲットにおいては、-fast
オプションは、SSEコード生成とベクトル化を行うように変更されました。
- ACML 3.6 − AMD Core Math Library の最新エディションである ACML 3.6 が PGI 7.0 にバンドルされております。【注意】
ACML 3.6 は、-Mcache_align を内包しているコンパイル/リンク・オプション -fastsse を使用して生成されております。従って、この
ACML 3.6 を使用する際は、必ず、全てのプログラムのコンパイル・リンク時に、-Mcache_alignあるいは -fastsse オプションを付して実行してください。
- サポートOS − Fedora Core 並びに SUSE 10.2 をサポートしました。Windows(R) では、Vista をサポートし、さらに、Winodws
上の SFU と SUA のためのネイティブなコンパイル・実行環境も提供します。
- Visual Studio 2005 SP1− PGI Visual Fortran 製品において、Visual Studio 2005 SP1 上の動作サポートを行いました。
- Quad-Core AMD Opteron processor support− 新しい CPU ターゲットである、-tp barcelona、 -tp barcelona-64 が実装されました。これらのターゲットは、それぞれ新しい
AMD クアッドコアのプロセッサ(Barcelona) の32ビット用、64ビット用に最適化するためのものです。これは、PGI バージョン 7.0-3
より実装されております。
- Apple Core 2 and Core 2 Duo support− PGI Workstation for MAC OS X 用のプレビュー・バージョンが 2007 年 4 月にリリースします。
- Environment Modules− Linux 環境における Environment Modules パッケージ(例えば、the module load command) を使用しているユーザに対して、該当するモジュールファイルをセットアップするためのスクリプトを提供しました。
PGIコンパイラをインストールしたディレクトリ /opt/pgi、そしてMODULEPATH環境変数の値を /usr/local/Modules/modulefiles
と仮定した場合、次のコマンドを実行してください。
/opt/pgi/linux86/7.0-2/etc/modulefiles/pgi.module.install -all -install
/usr/local/Modules/modulefiles
このコマンドは、インストールされているPGIコンパイラの全てのバージョンに対するモジュールファイル(module files) を作成します。
modulefiles ディレクトリには、writeパーミッションを与える必要があります。これによって、moduleコマンドを有効化します。
module load pgi32/7.0
module load pgi64/7.0
module load pgi/7.0
ここで、pgi/7.0は、32ビットシステム上では32ビットのコンパイラを、64ビットシステム上では、64ビットコンパイラを使用すると言う意味となります。
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)
PGDBG(デバッガ)とPGPROF(プロファイラ) の新機能、特長等
- PGDBG 7.0 は、Windows 上で動作しているプロセスをアタッチできるようになりました。これは、PGDBG の “attach” コマンドあるいは、PGDBG
の GUI の中の ”File->Attach to Target” を通して行えます。
- PGDBG 7.0 は、新しいコマンド引数 -attach を新設しました。これは、スタートアップ時に自動的に動作しているプロセスをアタッチすることができる機能です。例えば、シェルあるいは、コマンド・ウィンドウから”pgdbg
-attach 1234” と入力した場合、PGDBG はプロセス番号 1234 をアタッチしようとします。
- Microsoft Visual C++ でコンパイルされた C/C++ プログラムに対するシンボリック・デバッグが可能となりました。VC++
あるいは Microsoft CL(Command Line) でコンパイルされたオブジェクトは、 PGI Fortran のメインプログラムとリンクすることができ、さらに、デバッギングも可能です。
- Java(TM) 2 Runtime Envirenmnet, Standard Edition 1.5.0_10 がバンドルされました。
|
|
■ PGI 7.0 の新コンパイラ・オプションと従来との変更部分(2007年3月)
PGI コンパイラ 7.0 において新規に導入されたオプションについて説明 しているPDF ファイルです。
- -fast − 64 ビットシステムのターゲットに対して、-fast オプションは、従来の -fastsseオプションと同じ機能を有するオプションに変更しました。新しい
-fast オプションは、SSE 命令を伴うベクトル化、キャッシュ整列、 flushz(SSEのflush-to-zeroモード) 機能を有効にします。従来の
-fast と等価な機能として、-nfastと言うオプションが新設されました。
- -fast − C/C++コンパイラは、-fast あるいは -fastsse の複合オプションの中に、-Mautoinline 機能も有効になるように変更されました。
- -tp − -tpオプションは、コンマ(、)で区切られた複数のターゲットを記述する方式を採用しました。以前のバージョンでは、これは一つのターゲットのみの記述方式でした。もし、複数のターゲットが指定された場合、PGI
unified binary は、各ターゲットに対して最適化されたコードを生成します。
- -O4 − 新しい最適化レベルのオプションを導入しました。-O4 レベルの最適化は、浮動小数点演算式の中で不変変数に対する巻上げ最適化を行うようになります。
- -d[D|I|M|N] − -d オプションは、プリプロセッサからの追加情報を出力させるためのものです。
-dD : ソースファイルからマクロと値をプリントします。
-dI : インクルードファイル名をプリントします。
-dM : 前以って定義され、コマンドラインマクロを含むマクロと値をプリントします。
-dN : ソースファイルからマクロ名をプリントします。
- -soname library.so − shared オブジェクトを生成する時、library.so(一例) と言うシェアードライブラリを内部の DT_SONAME フィールドへセットするようにリンカーに指示します。(Linuxのみ)
- -Mdll − −Mdll オプションは、−D_DLL 機能を含意します。-D_DLL は、プリプロセッサ・シンボル_DLL を定義するものです。(Windowsのみ)
- --flagcheck− 全てのオプション・フラグに問題がなければ、単純に zero ステータスを返します。
- -E − pgcc -E は、 .hファイルの前処理を行うようになりました。
- -M[no]dse − 参照しない変数の保存を排除(dead store eliminations)する最適化を有効[無効]にするオプションです。これは、C++
プログラムのようなパフォーマンス向上のために、関数呼び出しをインライン化することが多い場合に有効となります。
- --keeplnk − もし、コンパイラが長いリンカ・コマンドに対して一次的な間接ファイルを生成した場合、--keeplnk オプションは、コンパイラに、そのファイルの削除をせずに一時ファイルとして保持することを指示するものです(Windowsのみ)。
- -Mmakeimplib− DLLを生成することなしに、インポートライブラリを生成します。これは、まだ、それ自身のDLLライブラリが構築される前に、DLLのためにインポートライブラリを生成したい時に使用します(Windowsのみ)。
- -Mallocatable=[95/03] − -Mallocatableオプションは、コンパイラがメモリ割付 (allocatable) に係る意味合いを制御します。デフォルトは Fortran
95 に準拠します。 =03フラグは、Fortran 2003 に準拠します。
- -noswitcherror − コンパイラに有効なオプションではないものが指定された場合、エラーで終了させる代わりに警告レベルに変更する。この挙動は、siterc ファイルに
set NOSWITCHERROR=1 を指定することでも可能となります。
- --cyglbs and --mslibs − Win32 用の PGI Workstation の以前のリリースで使用していたこれらのオプションは、サポートしません。
|
既知の制限事項
- PGI 7.0 で生成されたオブジェクトあるいはモジュールは、PGI 5.x 並びにそれ以前のリリースのオブジェクト、モジュールとは互換性がありません。
- PGI 6.1 並びにそれ以前のリリースにおいて -Mipa オプションを付加して作成されたオブジェクトファイルは、PGI 7.0上で再コンパイルが必要です。
- PGF90 でコンパイルされた Windows プログラムは、PGI のランタイム DLL である、pg.dll ファイルを含むディレクトリを
PATH 環境変数 (Winodwsの環境変数) にセットして動作させる必要があります。このDLLは、他のシステムへ再配布可能であり、PGF90
7.0 で生成したプログラムを動作させようとする任意の Windows システム上にコピーする必要があります。
- Windows 版の PGI C++ 7.0 for Windows において、template instantiation が Linux
上の PGI C++コンパイラと互換をとるために変更となりました。Windows 上の全てのC++ソースプログラムは、再コンパイルが必要であり、全ての
template instantiation フラグは Windows makefile から削除しなければなりません。
- Windows において、cygwin に含まれる vi のバージョンは、SHELL 変数に予期しないものが指定されている場合、問題が起きる可能性があります。このケースの場合、vi
が起動される時、次のようなメッセージを出力します。
E79: Cannot expand wildcards
E79: Cannot expand wildcards
E79: Cannot expand wildcards
Hit ENTER or type command to continue
- -i8 オプションの使用において、プログラムを MPI ライブラリととともに使用する場合、互換性がありません。典型的には、Integer*8
配列の引数の使用により、これらのライブラリと共に使用する場合、異常終了します。
- -i8 オプションを使用するプログラムにおいて、PGI コンパイラにバンドルしている ACML ライブラリととともに使用する場合、互換性がありません。このオプションの互換ライブラリに関しては、developer.amd.com
をご参照ください。
- -mcmodel=medium オプションを使用してコンパイルされたオブジェクトを組み込んだプログラムは、静的にリンクされることはできません。これは、
linux 86-64 環境における制約事項であり、PGI コンパイラによる制約事項ではありません。
- PGCC の -Mipa=libopt と -Mipa=vestigial オプションを同時に使用した場合、リンク時に未解決な参照が生じる場合があります。これは、-Mipa
にサブオプション vestigial を付加することにより、エラーとなる関数が削除されるために起こります。この場合は、vestigial を付加せずに、-Mipa
のみの指定で対処してください。
- -Mprof=func 並びに -mcmodel=medium あるいは -mp を一緒に使用した場合、生成された実行モジュールはセグメンテーション・フォールトが生じます。これらのオプションを同時に使用することは避けてください。
- gprof スタイルのプロファイリング機能 (-pg) を使用してコンパイル・リンクしたプログラムは、2.6.4 Linux カーネルのシステム上でセグメンテーション・フォールトが生じます。また、いくつかの
Linux distributions 上で、gprof と PGPROF によって各々のプログラム・ユニットの報告された時間が、実際の時間より10倍以上大きな数値になることがあります。これは、これらの
Linux distributions に含まれる、ある共有ライブラリのバグによるものです。
- -mpを使用して生成された OpenMP プログラムが、SuSE9.0 システム上の複数プロセッサで並列実行した場合、極端に遅くなります。しかし、これと同じ実行モジュールが
SuSE9.1 上で動作させると期待される性能と効果が得られます。
- ACML3.6 ライブラリは、-cache_align を含んだ -fassse コンパイルオプションを使用して構築されております。32-bit
ターゲットシステム上で、-lacml オプションを使用してACMLライブラリをリンクする際に、必ず、全てのプログラムに -cache_align
もしくは、このオプションを含む複合オプションである -fastsse を付加してコンパイル/リンクを行ってください。64-bit ターゲットシステム上では、デフォルトでスタック16byte
アラインメントであるため、この問題は生じません。なお、性能が多少劣りますがポータビリティの良い libblas.a と liblapack.a
ライブラリは、SSE 命令を有していないプロセッサ上で使用することができます。
- Windows の SUA 並びに SFU 上において、-Mchkstk と-mp あるいは -Mconcur を使用してコンパイルされたマルチスレッド・プログラムは、以下のような
stack overflow のメッセージ(一例: thread 0,max 10561KB, used 2KB request 64B)を伴うスタック制限のオーバーフローであるようなエラーを報告することがあります。これを避けるためには、マルチスレッド・プログラムの中の任意のファイルに対して、-Mchkstk
オプションを使用しないことです。
- Windows の SUA 並びに SFU 上において、-Mchkstk を使用してコンパイルされたプログラムは、 tanh、sinh 等のハイパーボリックな数学関数を実行するときに、正常に実行できません。これは、x87
スタックが「空ではない」とエラーを報告するからです。これを避けるためには、ハイパーボリックな数学関数を呼ぶルーチンのコンパイルでは、-Mchkstk
オプションを使用しないことです。
- マルチスレッドのサンプルベースのプロファイル機能(gprofスタイルのプロファイリング: -pg あるいは、-Mprof=time オプション)でレポートされる時間は、マスタ・スレッドだけのものとなっています。一方、PGI
形式のプロファイリング( -Mprof=lines|func )あるいはハードウェア・カウンタ・ベースプロファイリング(-Mprof=hwcts)
は、個々のスレッドあるいはプロセスの時間データを個別に取得するために使用されます。
- PGDBG−Windows プラットフォーム上では、PGDBG コマンドラインからプログラムの実行引数を正確に引き渡せません。例えば、これは、実行モジュールが
C プログラムの中で、argv[0] と argv[1] の両方を指定しているようなものです。プログラム引数を正確に引渡すためには、PGDBG
の run コマンドを使用して行うようにしてください。
- PGDBG GUI−GUI のコマンド・ペインから行う source コマンドは、「実行停止」するために実行をウェイトしません。たとえ、ターゲットが実行していてもコマンドを読み続けます。例えば、もし、source
スクリプトがブレークポイントをセットするコマンドを含んでいて、実行、スタックトレースの印字をした場合、スタックトレースはブレークポイントで印字するものと期待します。実際は、それはエラーを返します。これは、Stacktrace
を実行しているときにターゲットが実行しているためです。この問題を避けるためには、スクリプトの中の各制御コマンドの後に wait コマンドを挿入することです。
- PGDBG−デバッグコマンドの watch 系のコマンドは、ローカル変数が対象の場合は信頼できません。Watch されるローカル変数のスコープ範囲内から関数、サブルーチンを呼ぶことが、イベントを見失うか、あるいは明確なイベントを誤る場合があります。もし、プログラムのスコーピングが
watch される変数のスコープ部分から離れると、ローカル変数は正しく watch できます。グローバル、静的変数に対する watch コマンドは、常に正しいものを与えます。
- PGDBG−デバッグコマンドの stacktrace コマンドは、-g オプションを付けずにコンパイルしたルーチンに入った場合、コール・スタック中のフレームをスキップすることがあります。例外が
memset() のようなライブラリルーチンで現れる時、これ問題は顕著になり、stacktrace は、calling ルーチンを示さなくなります。現在のルーチンは、名前によって識別できないため、unlknownaddr
だけを表示します。この制約に対する解決策はありません。
- PGDBG−デバッグコマンドのcallコマンドは、次のF90/F95フィーチャをサポートしません: array-valued functions, pointer-valued,
functions, assumed-shape array arguments, pointer arguments。この問題に対する解決策はありません。
- PGDBG−以前に run あるいは rerun である特定の I/O リダイレクションを行っているプログラムの実行後に、再度、引数のない run あるいは
rerun を行うと、I/O 処理は、前の実行時の途中から継続されます。この問題は、stdout 等のファイルへ追加出力、stdin等の入力ポイントがリセットされない等の予期せぬ結果を引き起こします。この制約は、I/Oリダイレクトを伴う
run あるいは rerun の後に行う shell コマンドに対しても同様な振る舞いとなります。
- PGDBG−shared ライブラリは、そのライブラリの中に含まれるコードがブレークポイントとしてセットされる前にロードされていなければなりません。
- PGDBG - Unified Binaries (-tp x64を付けて構築されたモジュール)のデバッギングは、フルにサポートされません。いくつかのサブプログラム名が
unified binaries を生成する過程で変更されています。PGDBGは、アプリケーションのソースコード内で使用されているプログラム名とこれら変更された名前との間の変換を行いません。デバッグにおいては、Unified
Binaries 生成オプションと付けずに、native なプロセッサターゲットで実行モジュールを生成してください。あるいは、Unified
Binaries のデバッグを行う方法に関しては、http://www.pgroup.com/support/tools.htm に詳細な情報がありますので、ご参照下さい。
- PGDBG Windows−Windows においては、一般にディレクトリ・パス名を区切るためにバックスラッシュ文字(“\” )を使用します。PGDBG は、C 言語の数式表示として、バックスラッシュをエスケープ文字の意味として使用します。一方、Windows
プラットフォームにおける PGDBG は、ディレクトリ・パス名を区切るためにフォワードスラッシュ文字(”/”)を使用します。但し、この事項は
DEBUG コマンド、あるいはコマンドライン上の実行モジュール名には適用されません。(このコンベンション自体は、これらのコマンドにおいても動作します)
- PGPROF Windows− DLL のプロファイルはサポートされておりません。
- -Mpfi と -mp を同時に使用することはサポートされていません。-Mpfi オプションは、コンパイル時に ?mp を抑止しますが、それは、プログラムの中のOpenMPディレクティブ/プラグマの解釈に依存してプログラムの実行時にエラーを引き起こすことになります。OpenMPに依存しないプログラムは、正確に
profile feedback を使用することができます。-Mpfo プションは、OpenMP 処理を抑止します。
- PGDBGは、現在、SFU/SUA システム上の core ファイルのデバッギングをサポートしていません。
- オペレーティングシステムのサポートがないために、SFU/SUA システム上 PGDBG は、ハードウェアwatchpoint (hwatchコマンド)
をサポートしていません。
- オペレーティングシステムの制約により、32bit SUA上 のプログラムだけが PGDBG のマルチスレッドのデバッギングが可能です。但し、一つ制約があり、一度ストップすると、プロセスは全てのスレッド、あるいは、シングルスレッドの続行(スレッドの部分的なセットの続行ではなく)をしなければ、プロセスの続行ができません。スレッドの部分的なセットの続行は、結果として全てのプロセス(スレッド)を続行させることになります。
|
DLL(dynamic link libraries) 使用の制約事項等
PGIコンパイラを使用してWindows上のDLLを構築、使用する方法に関しては、PGI Users Guide 8章に説明しております. PGI
7.0コンパイラによって構築されたDynamic-link libraies(DLL)は、次に述べる制約事項があります。
- DLLは、PGC++コンパイラでは生成できません。
- DLLがPGIコンパイラによって構築された場合、必ずランタイムDLLを使用しなければなりません。-makedllオプションによって、正確なランタイムライブラリが使用しているかを確認できます。
- 実行モジュールが任意のPGIコンパイラで生成したDLLとリンクされる場合は、PGIランタイムライブラリDLLを使用しなければなりません(特に、静的ライブラリが使用することはできません)これを実現するために、実行モジュールを生成する時に、-Mdllオプションを使用してください。
- PGIランタイムライブラリDLLと-Mprofを一緒に使用することはできません。プロファイリングのための実行モジュールを構築する際は、静的ライブラリを使用してください。-Mdllを使用しないデフォルト環境では、静的ライブラリが使用されます。
※なお、文中で使用されている商品名、名称は、各社の商標あるいは登録商標です
|
| ライセンスの更新に関する FAQ |
|
現在サブスクリプション契約期間中であるお客様は無償でバージョンアップが可能です。是非、この機会に性能が向上した新 7.0 リリースをご利用くださいますようお願いいたします。
- コンパイラ製品のバージョンの見方と調べ方
製品バージョンの表し方は、メジャー、マイナーおよびバグフィックスの 3 種類となります。最初の1 桁目がメジャーバージョン、2 桁目がマイナーバージョン、最後のハイフォンで続く数字がバグ・フィックス番号となります。サブスクリプション契約を行っていないお客様に関しては、購入時のマイナーバージョンの以降のバグ・フィックスに関しては無償でソフトウェアを入手することができます。
(例) version 7.0-1
7 : メジャーバージョン番号
0 : マイナーバージョン番号
1 : バグ・フィックス番号
現在所有している PGI コンパイラのバージョンを調べるには、以下のコマンドを実行してください。
$ pgf77 -V
pgf77 7.0-2 <--- バージョンを表す
Copyright 1989-2000, The Portland Group, Inc. All Rights Reserved.
Copyright 2000-2007, STMicroelectronics, Inc. All Rights Reserved.
- 今所有しているライセンスで新バージョンが動作しますか?
PGI のライセンス・ファイル (license.dat) には、1.7、3.0、3.1、3.2、3.3、4.0、4.1、5.0、5.1、5.2
、6.0、6.1、6.2 あるいは 7.0 と言った動作可能なバージョンを示すフィールドを持っています。現在、所有しているライセンスファイルの中のフィールドが現在、動作可能な最も高いリリース番号となります。最新のリリースを動作させるためには、最新リリース番号へのフィールド値の更新が必要です。年間サブスクリプション契約(ソフトウェア情報パッケージ購入)を行っているお客様は、ライセンスの発行サイトにおいて、新ライセンスを取得して、 license.dat の内容を変更してください。バージョンアップがサブスクリプション契約期間内で行われた場合、ライセンス発行サイト上で表示されるライセンスは自動的に更新されたものとなっていますので、この内容をコピーして、システム上の license.dat の内容を更新すると新リリース用のライセンスファイルとなります。(もちろん、新しいリリース・ソフトウェアは、インストールされていることが前提です)
======== (License.dat の例 : Release 7.0 の場合) =================
SERVER moj1 0090275c30e8 7496
#
# In the DAEMON line, the location of the pgroupd daemon
# may need to be modified.
DAEMON pgroupd pgroupd
FEATURE pgf77-linux86 pgroupd 7.000 31-dec-0 1 3BD8F0B1414C40403DEC \
VENDOR_STRING=109839:4 HOSTID=0090275c30e8 ck=190
FEATURE pgprof pgroupd 7.000 31-dec-0 1 BB986021EC3F71B560B6 \
VENDOR_STRING=109839:4 HOSTID=0090275c30e8 ck=29
FEATURE pgdbg pgroupd 7.000 31-dec-0 1 EBC8706172F613B398F2 \
VENDOR_STRING=109839:4 HOSTID=0090275c30e8 ck=249
======== (License.dat の例 : Release 7.0 の場合) =================
- 一方、例えば新規購入で、リリース 7.0-1 のライセンスを取得していれば、その後のバグ・フィックスのリリースである 7.0-2、7.0-3
等の製品はサブスクリプション契約なしでも使用可能です。なお、ライセンスファイルのバージョン・フィールドの数字より前のコンパイラリリース製品は、問題なく動作します。
ライセンス発行の手順に関しては、こちらをご覧ください。
- 現在の自分のライセンス情報をどのように調べればよいでしょうか?
現在の自分が所有しているライセンス情報は、ライセンス発行サイトにてオンラインで入手が可能です。サイトのユーザ認証のために、製品納品時に同封したユーザ登録書に記されたアクセス・コード (ユーザー名とパスワード)
を入力し、"Information" --> "Information and current licenses"
のボタンをクリックすると、サブスクリプション期間終了日と新しいマイナー・リリースに対する新ライセンス・キーが表示されます。この新ライセンス・キーをコピーして
現在の license.dat を更新してください。
- 「年間サブスクリプション契約(ソフトウェア情報パッケージ)」とは何ですか?
年間サブスクリプション契約がなされているお客様は、製品のマイナーバージョンアップ時の新しいライセンスを得る権利を有します。製品のライセンスを新規に購入し、同時に年間サブスクリプション料金をお支払いただいた場合、1年以内の最新のリリースに対するアップグレードが可能となります。年間サブスクリプションをご購入いただいていないお客様は、購入の後に50日以内のバージョンアップ・リリースに対しては、新リリースのライセンス更新が可能です。なお、サブスクリプション契約を行っていないお客様が、その後、新バージョン用のライセンスの取得を行いたい場合、サブスクリプション契約空白期間も含めたサブスクリプション料金をお支払いただくことにより、新ライセンスの取得が可能となります。
- お客様のアクセスコード(ユーザID、パスワード)を紛失あるいは忘れた方へ
お客様のお名前、組織名、ソフテック製品出荷ID をお書き添えいただき、support@softek.co.jp へその旨、お知らせください。アクセスコードを再度メールにてお送りいたします。
|
|
| ※本ページに記載されている会社名、製品名は、各社の登録商標または商標です。 |
| ソフテックは、PGI 製品の公認正規代理店です |
|