ソフテック・トップページへ
ホーム 製品 セキュリティ・サービス HPCサービス ダウンロード 企業情報



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



New Release Information
最新リリース情報
ソフテックは、PGI 製品の公認正規代理店です


PGI® Workstation & PGI® Server 9.0 Release
米国 PGI 社の PGI Workstation/Server コンパイラ製品のバージョン9.0 をリリースしましたのでお知らせいたします。なお、このリリースでは、Linux 版から Windows版、Mac OS X版を順次、リリースしていきますので、これらのプラットフォームの同時リリースではありません。ご了承ください。本リリースにおける製品の主な新機能、特徴に関して以下に説明します。なお、ソフトウェアは http://www.softek.co.jp/SPG/ftp.html ページにてダウンロード可能です。 (2009年6月)

製品名 現バージョン アップデート日
PGI Workstation and PGI Server for Linux 
9.0-4 2009-9-24
PGI CDK for Linux (ご購入ユーザ様のみにご案内) 9.0-4 2009-9-24
PGI Workstation and PGI Server for Windows 9.0-4 2009-9-24
PGI Visual Fortran Standard (Windows) 9.0-4 2009-9-24
PGI Workstation for Mac OS X 9.0-4 2009-9-24

現在の最新バージョンは、version 9.0 となります。年間サブスクリプション契約をご購入あるいはご継続中のお客様は、新リリースのソフトウェアをダウンロードの上、再インストールをお願いいたします。最新の「日本語インストールの手引き」を必要なお客様は、support@softek.co.jp へメールにて依頼いただければ、送付いたします。新リリースのソフトウェアの入れ替えは次のステップで行うことができます。

バージョンアップの方法についての詳細は、こちらをご覧ください

STEP1 : 新リリースのソフトウェアのダウンロード
STEP2 : 新リリースのソフトウェアのインストール
STEP3 : 新リリースのライセンス・キーの取得と license.dat の入れ替え


ライセンスの更新に関する FAQ は、こちらをご覧ください

・旧バージョン PGI® 8.0 のリリースノートは、こちらのページで閲覧できます。
・旧バージョン PGI® 7.2 のリリースノートは、こちらのページで閲覧できます。
・旧バージョン PGI® 7.1 のリリースノートは、こちらのページで閲覧できます。
・旧バージョン PGI® 7.0 のリリースノートは、こちらのページで閲覧できます。
・旧バージョン PGI® 6.2 のリリースノートは、こちらのページで閲覧できます。
・旧バージョン PGI® 6.1 のリリースノートは、こちらのページで閲覧できます。
・旧バージョン PGI® 6.0 のリリースノートは、こちらのページで閲覧できます。

・PGI 9.0 の英語版リリース・ノートは、こちらで閲覧できます。


Version 9.0 の詳細 (2009年6月)

PGI 9.0 リリース

PGI 9.0 の特長

Release 9.0 PGI Compiler Features and Performance (主な新規機能、特長について)

  • (NEW) PGI アクセラレータ x64+GPU Fortran/C99 コンパイラサポート : NVIDIA の GPGPU搭載の64ビットLinuxシステム上で、コンパイラ・ディレクティブ(指示行)ベースでプログラミング可能なアクセラレータ・コンパイラを業界で初めてリリースしました。PGF95並びにPGCC(R) アクセラレータ・コンパイラは、CUDAを実装したNVIDIA GPUが搭載されている、全てのインテル(R)並びにAMDの64ビットプロセッサベースのシステム上でサポートされます。この機能を使用することによって、Fortran/Cプログラムをマルチコアベースからx64+GPUベースのプラットフォームへの移行、並びに、さらなるチューニングを促します。 機能詳細は、"PGI アクセラレータ・コンパイラ”の説明をご覧下さい
  • PGI アクセラレータコンパイラに関する「情報サイト」を開設しました

PGI GPU用コンパイラ 情報サイト

PGI アクセラレータ・コンパイラの使用に関する制約

 PGI アクセラレータ・コンパイラは、標準的な PGI Workstation、Server、CDK のライセンスキーの他に、別のライセンスキーが必要となります。PGI 9.0 のリリースにおいては、「PGI アクセラレータ・コンパイラ」は、正式なライセンス製品の前の段階の無償のテクノロジー・プレビューという扱い」とし、PGI 9.0 リリースを利用する権利を有する(サブスクリプション有効の)お客様は、2009年12月31日まで本機能を使用することができます(PGI 9.0用のライセンスキーの中に、テクニカル・プレビュー用の使用ライセンスが組み込まれております)。現在、PGI コンパイラ・ライセンスのサブスクリプションの有効期間が過ぎてしまっている場合は、サブスクリプションの有効化を行うか、あるいは、新規のライセンスのご購入が必要となります。
 なお、アクセラレータ・コンパイラの機能は、、現有のライセンスでは、2009年12月31日を過ぎますと一切、使用できなくなりますので、予めご了承下さい。
 また、2009年11月に発売予定の PGI アクセラレータ・コンパイラは、現在の製品群の上位製品として、別製品として発売しますので、引き続きアクセラレータ機能を使用したいお客様は、製品のアップグレード、もしくは、新アクセラレータ・コンパイラ製品をご購入いただく必要があります。
(ご注意)
 現在のお持ちの PGI Workstation/Server/CDK 製品のライセンスは、自動的に新 PGI アクセラレータ・コンパイラ製品にはアップグレードしないことをご承知置き下さい。商用ライセンス、アカデミック用ライセンスを問わず、製品のアップグレード(有償)を行う必要がございます。

  • (NEW)Fortran 2003 追加機能 :IMPORT、 POINTER reshaping, ISO_C_BINDING C_F_POINTER, ENUM、MOVE_ALLOC()、ISO_FORTRAN_ENV モジュール、組込関数へのオプショナルkind、割り付けスカラ、VOLATILE属性とステートメント、PROCEDUREポインタとステートメント、高速POPCNT/POPPAR、これらの関数をサポートする明示的な組込関数を有するアーキテクチャ上でのLEADZ組込関数が含まれます。

    Fortran組込関数の強化
     いくつかのFortran組込関数は、オプション引数として、KIND引数を持てるようになりました。これらの関数にとって、KIND引数が存在する時、戻り値は、その指定されたkind値となる。これらの組込関数の詳細については、以下の章で後述します。また、PGI Fortran Referenceマニュアルの Intrinsicsの章に記述されております。

    C言語との相互運用性の強化 : 
    Fortran 2003は、C言語との相互運用性のためのメカニズムを提供します。インボルブされる任意のEntity実体は、CとFortranの両方において、等価な宣言がなされる必要があります。これに関する詳細は、以下の章で後述します。

  • (NEW) プラットフォームの追加 - 以下のプロセッサが、サポートされました。
    Intel Core i7 (Nehalem) : 
     Nehalem用の最適化とサポート、SSE 4.1/4.2 組込関数を含むループのベクトル化のサポート
    AMD Istanbul :
     6 コアAMD Opteron用の最適化とサポート
  • PGCC++/PGCCの強化 C++は、task機能を含み、OpenMP 3.0のフル・サポートがなされました。GNU linkonce サポート、C++コンパイルの速さの向上(最大20%向上)、PGCC C99コンパイラにおいて、_m128データ型のためのサポート等の機能強化を含みます。

  • PGDBG 並列MPI/OpenMPデバッガが新しいGUIに変わりました
    • 全て、新しい直感性のあるナビゲーションとlook-and-feelのGUIに変更されました。
    • 以前のGUIであった複数のメニューバーから、単一の分かりやすいメニューバーに変更されました。
    • source/assembly/mixed の三種のデバッギング・ビュー画面の切り替えを容易く迅速に行うために、タブで切り替えるように変更しました。また、複数のスレッド/プロセスに対するコンテキストのデバッギングやマルチスレッド・マルチプロセスの状態を見やすく配置しました。
    • C/C++ include files、 Fortran、INCLUDE processing、並びに Fortran MODULEに対するDWARF(デバッグ情報)の生成を向上させました。

  • PGPROF 並列MPI/OpenMP性能解析・チューニングルール
    • Pgcollectユーティリティを使用した新しいデータ集約メカニズムを採用することにより、再コンパイルなしでのプロファイリングや、特別のソフト権限無しでのプロファイリングが可能となりました。
    • 共有オブジェクト・ファイルの中のコードのプロファイルをサポート。
    • 複数のソースファイルへ「タブ」にてアクセスするためのGUIを更新しました。アセンブリコードへのドリル・ダウン(下位=アセンブラに移動する)が向上しました。
    • PGIコンパイラ以外によってコンパイルされたバイナリのプロファイルをサポートしました。

  • (NEW) ドキュメンテーションの更新 : PGI Users Guide、PGI Tools、Guide、 PGI Fortran Referenceのドキュメントを更新しました。

  • 動作プラットフォームの拡張
    • PGI Unified Binary? support for NVIDIA + x64 hosts.
    • PGI Unified Binary? support for the latest AMD and Intel processors
    • RHEL 5.3, Fedora 10, Fedora 11, SuSE 11, SuSE 11.1, and Ubuntu 9.04 Linux
    • Microsoft Vista 32-bit and 64-bit, Microsoft HPC Server 2008
    • Mac OS X Leopard 32-bit and 64-bit for x86

  • PGI User's GuidePGI Tools GuidePGI Visual Fortran Users Guide のアップデート

PGI® 9.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) 製品のライセンスキーが必要です)

サポートするプロセッサタイプ


32ビット x86 系のプロセッサ並びに 64ビットの AMD64、Intel(R) 64 のプロセッサに対応します。PGI 9.0 において、サポートする CPU は以下の表のとおりです。
新たに、インテル社の Core i7 (Nehalem)プロセッサ、AMD Opteron (Istanbul: 6コア) 用の最適化をサポートしました。

PGI コンパイラは、AMD64 ネイティブな最適化と Intel(R) インテル64 用の最適化を切り替えることが可能なクロス・コンパイル機能を有します。さらに、PGI コンパイラは、一つの実行モジュールフファイルで、AMD64 あるいは EM64T のどちらにも最適な性能を提供可能な PGI Unified Binaries の機能を業界で初めて提供しております。PGI コンパイラを利用することで、将来、ご使用システムを Intel 64(EM64T) もしくは AMD64 のどちらかの CPU プラットフォームに変更したとしても、最適化された共通コンパイラ基盤としてどちらのプラットフォームに対してもご利用いただけます。PGI 9.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
AMD Opteron (Istanbul) 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
Intel(R) Core i7
(Nehalem)
SSE


サポートするOS の追加

Linux 版においては、RedHat Enterprise Linux 5.3 、SUSE LINUX 11.1、SLES 11 並びに Federa Core 10, 11 ,Ubuntu 9.04 をサポートしました。PGI 9.0 において、サポートする OS はこちらをご覧ください。
なお、PGI 7.0以前でサポートしておりました、古い Linux DistributionであるRedHat 8.0/7.3、SuSE 8.1/8.0、SLES8 SP2は、PGI 7.2 以降サポートしておりませんのでご注意ください。


PGI 9.0 の新コンパイラ・オプションと従来との変更部分(2009年6月)

PGI コンパイラ 9.0 において新規に導入されたオプションについて説明 しているPDF ファイルです。 

  • 未知のコンパイラ・オプションを指定した場合、今までは「警告」レベルの扱いでしたが、PGI 8.0 より、「エラー」として扱われます。この変更によって、コンパイラが認識できないオプション(スイッチ)が指定された場合、コンパイルエラーとなり停止することになります。

    一例 : pgf95-Error-Unknown switch: -Mconcu

    しかしながら、新しいコンパイラ・オプションである -noswitcherror を指定すると、従来のように、未知のオプション(スイッチ)が指定された場合、エラーで停止するの代わりに「警告」を出すように変更できます。
    次のオプションは、PGI 8.0 から追加あるいは、修正されたものです。
  • -tp : 六つの新しいターゲットCPUタイプ

    istanbul AMD istanbul プロセッサ 32-bit mode
    istanbul-32 AMD istanbulプロセッサ, 32-bit mode
    istanbul-64 AMD istanbul プロセッサ, 64-bit mode
    nehalem Intel Core i7 (Nehalem) プロセッサ 32-bit mode
    nehalem-32 Intel Core i7 (Nehalem) プロセッサ 32-bit mode
    nehalem-64 Intel Core i7 (Nehalem) プロセッサ 64-bit mode

  • -ta=nvidia (,nvidia_suboptions), host : PGI アクセラレータ・コンパイラに伴う新しいオプションです。-ta は、ターゲット・アーキテクチャを意味します。Fortranにおける !$ACC ディレクティブ、C における #pragma acc ディレクティブをコンパイラに認識させるために、このオプションを使用します。これは、Fortran 並びに C コンパイラのみで有効です。このオプションは、以下のサブオプションを有します。

    * nvidia - NVIDIAアクセラレータをターゲットとして選択します。さらに、以下の nvidia 用のサブオプションがあります。
    • analysis ループの解析のみ行い、コードの生成を行いません
    • cc10 compute capability 1.0 のコードを生成
    • cc11 compute capability 1.1 のコードを生成
    • cc13 compute capability 1.3 のコードを生成
    • nofma fused-multiply-add命令を生成しない
    • time アクセラレータ領域の単純な時間情報を集積するためにプロファイル・ライブラリをリンクする
    * host - アクセラレータがターゲットとして存在しないコード生成を行う。アクセラレータ領域をホスト側で実行するようにコンパイルする。PGI Unified Binaryコードを生成します。

  • -Minfo : 新サブオプションが追加されました。
    accel アクセラレータ領域を GPU Kernel  に翻訳することが成功したかどうかの情報を示す。
  • -Msmartalloc :  新しいサブオプションが追加されました。
    nohuge -Msmartalloc=huge を上書き(無効化)するサブオプションです。
  • -M[no]m128 ? __m128, __m128d, __m128i : データ型を認識するための新しいオプションです。[C コンパイラのみ]
  • -Mfprelaxed : 新しいサブオプションが追加されました。
    recip    緩和した精度で逆数近似する。
  • -O に新しいサブオプションが追加されました。
    • 全てのレベル1、2、3の最適化を実施した上で、 hoisting of guarded invariant floating point expressions の最適化を行います。
  • -Minstrument [=functions] : 新しいサブオプションが追加されました。
    Common Compiler Feedback Format (CCFF) を使用して、 PGI コンパイラは、どのようにプログラムの最適化を行ったら良いか、あるいは、特定の最適化がなされないのか等の関数レベルのinstrument情報をオブジェクトに保持することを可能とします。-Minstrument=functions の指定も -Minstrument と同じ意味となります。このオプションは、-Minfo=ccff -Mframe の二つを指定したことと同意です。
    [linux86-64 のみ]
  • -Mipa : 新サブオプションが追加されました。
    nopfo プロファイル・フィードバック情報の引用回数情報を無視する。このサブオプションは、inlineサブオプションの次に指定されているときのみ有効となります。-Mipa=inline,nopfo は、IPA手続きに対して、PFO情報が有効な状態において、インラインされる関数を決める際に、PFO情報を無視するように伝えます。
  • -Mallocatable=[95|03] : このオプションは、割り付け方法の取り扱いを制御するものです。デフォルトの振る舞い方は、Fortran 95 のセマンテックを採用し、03 サブオプションを指定すると、Fortran 2003 セマンテックを採用するようにコンパイラに指示します。

新規導入ディレクティブ

このリリースにおいて、以下のコンパイラ・ディレクティブを新規追加しました。
* IGNORE_TKR
このディレクティブは、コンパイラに対して、kindあるいは、InterfaceやProcedureの中の指定された仮引数のランクを無視するように指示するものです。また、コンパイラは、genericな呼び出し時に曖昧性がある全ての指定をチェックするような場合、型、kind、実引数のランクを無視します。

Fortranの強化

■ FortranとCの相互運用性の強化
 Fortran 2003は、C言語との相互運用性のメカニズムを提供しています。この相互運用に係わる任意のentity は、C と Fortran の両方で等価な宣言を行わなければなりません。PGI は、これらのコンポーネントを追加することにより、C との相互運用性を拡張します。

  • Enumerators(ENUM構文) 整数定数のセットです。種別型 kind は、C 言語の同じ定数で選択した整数型に対応します。
  • ISO_C_BINDING モジュール(本リリースで実装)
  • BIND属性は、派生型と C 言語の型にマップするするための定数 kind の定義に対してサポートされます。
  • Procedureでは、VALUE と BIND 属性並びにグローバルデータに対する BIND 属性がサポートされます。
  • Procedure C_LOC がサポートされました。これは、オブジェクトのCアドレスを返します。
  • ポインタ型 - 派生型 c_ptrは、C言語のポインタ型との相互運用性を確保します。また、名前付き定数c_null_ptrは、C 言語のヌル値と対応します。
  • C_f_pointer :cptrをFortranポインタfptrへ C言語のアドレスを指示先として指示するサブルーチンです。また、そのオプションとして、配列の形状をshapeを指定することができます。構文は次の通りです。c_f_pointer (cptr, fptr [,shape])


これらコンポーネントの詳細は、PGI Fortran Referenceの章である「C言語との相互運用」をご参照下さい。

■ 新しいFortran文とassignment
 ここで述べる文(statement)は、PGI 9.0 で新たに加えられたものです。これらの詳細な説明は、PGI Fortran Referenceマニュアルをご参照下さい。

  • IMPORT : interface body の中だけで使用されます。この文は、親の有効域から名前付き要素がインポートされます。
  • Pointer Assignment : Fortran 2003 は、配列に対するポインタ割り当てを拡張しました。下限と上限の配列境界は指定できるようになります。
    構文 : p(0:、0:)=> a この下限境界値は、上限値が指定されている場合、人誌のスカラ整数式で指定できます。ターゲットとなる配列の要素の再構成も以下の例のように可能です。 p(1:m,1:2*m) => a(1:2*m)
  • Volatile Attribute : Fortran 2003 においては、型宣言文で使用されます。これは、コンパイラに対して、変数が変更されること、あるいは、Fortranプログラム以外から検証されることを指示するものです。
    構文: datatype, volatile :: var_name or datatype :: var_name
    volatile :: var_name
    次の例は、整数変数 xyz と実数変数 abc の両方を volatile として宣言したものです。
    integer, volatile :: xyz
    real :: abc
    volatile :: abc


■ 新しいFortran組込関数(intrinsic)
 固有の関数 (intrinsic) は、指定された言語上のコンパイラによって実装された(組込まれた)関数です。従って、コンパイラは、親和性の高い固有関数の知識を有するため、より質の高い統合や最適化を行うことが可能となります。このリリースでは、 PGIは以下のintrinsic を強化しました。

* LEADZ(I) : 変数 I の内部表現のleading zeroビットの数を返す。
* POPCNT(I) : 変数Iの内部表現の "1" ビットの数を返す。
* POPPAR(I)  : 変数Iの内部表現の"bitwise parit"を返す。
* MOVE_ALLOC(TO,FROM)  : 割付けを一つの割付けオブジェクトから他の割付けへ移動する。戻り値はない。
 次の組込み関数、あるいは手続きはKIND引数が追加されました。以下の組込関数のためのKIND引数は、スカラ整数で初期化された式で表されます。KIND引数はオプションですが、これが指定されると、その戻り値は、指定されたkindの種別となります。

* ACHAR(I [,KIND])
* IACHAR(C [,KIND])
* ICHAR(C [,KIND])
* INDEX(STRING, SUBSTRING [,BACK[, KIND ]])
* LBOUND(ARRAY [,DIM[,KIND]])
* LEN(STRING [,KIND])
* LEN_TRIM(STRING [,KIND])
* MAXLOC(ARRAY [,DIM] [,MASK] [,KIND])
* MINLOC(ARRAY [,DIM] [,MASK] [,KIND])
* SCAN(STRING, SET [,BACK[,KIND])
* SHAPE(SOURCE [,KIND])
* SIZE(ARRAY [,DIM[,KIND]])
* UBOUND(ARRAY [,DIM[,KIND]]) -
* VERIFY(STRING, SET [,BACK[,KIND]])

■ 新しい組込みモジュール
 PGI 9.0 は、Fortran組込みモジュールiso_fortran_env をサポートしました。この組込みモジュールは、名前付き定数の使用を通して、Fortran環境についての情報を提供します。

  • character_storage_size :文字・ストレージユニットのサイズ(ビット)
  • error_unit - :エラーを報告するために適した予め接続されている出力ユニット番号。これは出力ユニットと同じ場合もある。
  • file_storage_size :ファイル・ストレージユニットのサイズ(ビット)
  • nput_unit :入力のために予め接続されているユニット番号
  • iostat_end  :READ文実行中にend-of-file状態を示すIOSTAT= によって返す戻り値
  • iostat_eor  :READ文実行中にend-of-record状態を示すIOSTAT= によって返す戻り値
  • numeric_storage_size :numericalストレージユニットのサイズ(ビット)
  • output_unit :出力のために予め接続されている外部ユニット番号



 上記の指定されたユニット番号は、負になる可能性もあります。但し、-1は他の目的で使用されているため、使用できません。
 これら組込みモジュールの詳細は、PGI Fortran Referenceの章である「Intrinsics Modulesセクション」をご参照下さい。

■ 配列に関する強化
 以下の事項は、配列に関するFortran 2003の仕様です。

  • Allocatable attribute : Allocate 文の属性指定で、固定rankを持った配列を指定できます。ただし、配列形状については、今後のリリースにて利用可能となります。
  • Fortran 2003 allocatable regularization : PGF95に実装されます。これは、いつも有効となっております。これらの変更によって、仮引数として渡される割り付け配列の使用が可能となります。
  • Fortran 2003 Allocatable Array Assignment : PGF95に実装されます。デフォルトは、Fortran95割り当てセマンテックスが使用されますが、オプション-Mallocatable=03を指定することによって、Fortran 2003セマンテックスが使用されます。


■ その他のFortran強化

  • Fortran 2003 Asynchronous Input/Output :Fortran 2003非同期I/O は、一部、PGF77 とPGF95 コンパイラに実装されております。
  • OPEN文で、ASYNCHRONOUS='YES' で指定された外部ファイルは、非同期I/Oが使用できます。
  • 非同期 I/O 処理は、READ/WRITE文で ASYNCHRONOUS='YES'を指定することで可能です。
  • コンパイラは、ASYNCHRONOUS 属性あるいは、ASYNCHRONOUS 文を実装していません。
  • Fortran 2003 Stream Input/Output :Fortran 2003 Stream access I/Oは実装されております。

新しいRuntime(ランタイム)ライブラリ・ルーチン

PGI 9.0 は、PGI アクセラレータ・コンパイラのための新たなrun-timeライブラリを導入しました。詳細は、後述します。

新しい環境変数)

PPGI 9.0 は、PGI アクセラレータ・コンパイラのための新たな環境変数を導入しました。詳細は、後述します。

PGI Toolsの変更点(新機能、修正機能)

このセクションで述べる、新しい機能については、PGI Tools Guideに詳細に述べられています。

■ PGDBG
 PGDBGは、グラフィカルな MPI/OpenMP/マルチスレッドシンボリックデバッガです。このリリースにおいての強化された機能は、以下の通りです。

  • 全て新しいGUI に変更されました
  • 直感的ナビゲーションと使用法
  • 以前のGUIであった複数のメニューバーから、単一の分かりやすいメニューバーに変更されました。
  • source/assembly/mixed の三種のデバッギング・ビュー画面の切り替えを容易く迅速に行うために、タブで切り替えるように変更しました。また、複数のスレッド/プロセスに対するコンテキストのデバッギングやマルチスレッド・マルチプロセスの状態を見やすく配置しました。
  • C/C++ include files、 Fortran、INCLUDE processing、並びに Fortran MODULEに対するDWARF(デバッグ情報)の生成を向上させました。


■ PGPROF
 PGPROFは、グラフィカルな MPI/OpenMP/マルチスレッド用性能解析、チューニング・プロファイラです。このリリースにおいての強化された機能は、以下の通りです。

  • pgcollectユーティリティを使用した新しいデータ集約メカニズムを採用することにより、再コンパイルなしでのプロファイリングや、特別のソフト権限無しでのプロファイリングが可能となりました。また、PGIソフトウェアだけ使用したtime-baseのサンプリングを行った場合、pgcollectを単独使用モードで使用できます。これは、LinuxとMac OS X 10.5(Leopard) のみで可能です。
  • Linux上では、共有オブジェクト・ファイルの中のコードのプロファイルをサポートします。Mac OS X上では、まだ、ダイナミック・ライブラリはサポートされておりません。
  • 複数のソースファイルへ「タブ」にてアクセスするためのGUIを更新しました。アセンブリコードへのドリル・ダウン(下位=アセンブラに移動する)が向上しました。
  • PGIコンパイラ以外によってコンパイルされたバイナリのプロファイルをサポートしました。

新しい MPI サポート

PGI 7.1より前のバージョンでは、MPI のサポートは、PGI CDK 製品のみとしていましたが、PGI 7.1 のリリース以降、MPICH1 が PGI Workstation/Server ライセンス(Linux版)にバンドルされました。ただし、この PGI Workstation/Serverライセンスでは、その MPI プログラムの PGDBG デバッギング並びに PGPROF プロファイル機能は、ローカルなシステム上でかつ制限されたプロセス数(現在8プロセス)の範囲内での使用に限定されております。
 このPGI Workstation 9.0-1 リリースでは、MPIのサポートを拡張しました。
 このリリースでは、ローカルな MPI 使用機能の中に、MPICH-1 だけではなく、HP-MPI for LinuxMPICH-2、MVAPICH あるいは、OpenMPI のデバッギングとプロファイル機能を使用できるように利用拡張しました。なお、MPI ライブラリは、MPICH-1(Linux版)、OpenMPI (Mac OX X版) のみバンドルされております。他の MPIライブラリは、任意にインストールしていただく必要があります。Microsoft 社の MSMPI はシステムに別途インストールすることにより、MSMPI 用のデバッグ、プロファイルが Windows 版で可能となります。
 なお、MPI の使用方法については、PGI User's Guide の6章 Using MPI の項目をご参照ください。また、openMPI を使用した場合のプロファイリングの方法に関しては、PGI(r) Server 9.0/PGI(r) Workstation 9.0 Release Notes の3.11セクションに詳細に説明されておりますのでご参照下さい。


なお、MPIの使用方法については、PGI User's Guide の6章 Using MPI の項目をご参照ください。
※ PGI MPI プログラム開発用コンパイル・オプション、ツールの使用方法のページをこちらです。


ライブラリ・インタフェース

PGI は、Fortran モジュールを使用することによってCインタフェースをエキスポートするライブラリへのアクセスを提供します。これらのライブラリと関数は、PGI User's Guide の8章の述べられております。


PGI Workstation 9.0

この章では、Linux、 Windows、 and Mac OS Xの各 OS に関わる PGI Workstation/Server のアップデート並びに変更について述べています。

●PGI Workstation 9.0 for Linux

Java Runtime Environment (JRE)
Linux 上でのPGIのインストールでは、32ビットバージョンのJREを含みますが、十分な32ビット X Window をサポートサポートするためには、適正な関数等が有効である必要があります。
いくつかのシステムでは、たとえば、最近の Fedora Core では、これらの関数の一部が標準のインストールにおいて行われないようになりました。X Window は、一般的には、以下のライブラリをサポートします。
libXau libXdmcp libxcb
libX11 libXext

●PGI Workstation 9.0 for Windows

PGI Workstation 9.0 for Windows は、linux86 (32ビット)並びに linux86-64 (64ビット)環境と同様なほとんどの機能をサポートします。

新しいライセンス取得方法の提供(Windows版のみ)
PGI Workstation 9.0 for Windows のインストールにおいて、インストール時に www.pgroup.com から自動ライセンスファイル生成手続きができるようになりました。

●PGI Workstation 9.0 for Mac OS X

PGI Workstation 9.0 for Mac OS X は、linux86 (32ビット)並びにlinux86-64 (64ビット)環境と同様なほとんどの機能をサポートします。このリリースノートあるいはユーザマニュアルで指摘していること以外は、基本的に Linux版の機能と同一です。

PGI アクセラレータ・コンパイラ機能 (NVIDIA GPGPUサポート)

 「アクセラレータ」とは、特別の目的でCPUにアタッチして使用する協調プロセッサであり、時間の掛かる計算部分をCPU の演算機構からデータと実行部分のカーネルをオフロードするために使用されます。この章では、新しい PGI アクセラレータ・コンパイラについて説明します。この内容には、ホスト CPU からアタッチされているアクセラレータへオフロード可能な Fortran、C におけるコードの領域 (region) を指定するために使われるディレクティブに関する事項も含みます。
 PGI アクセラレータ、プログラミングモデル、ディレクティブに関する詳細な情報は、PGI User's Guide における18章「PGI Accelerator Compilers Reference」をご参照下さい。

■ コンポーネント

 PGI アクセラレータ・コンパイラのテクノロジーは、次のコンポーネントを含みます。

  • PGF95自動並列化アクセラレータ付きFortran 90/95コンパイラ
  • PGCC自動並列化アクセラレータ付きANSI C99 and K&R Cコンパイラ
  • システムが適切なGPUあるいは、アクセラレータカードを有するかどうかを検出するための単純なコマンドライン・ツール

 なお、アクセラレータ対応のデバッガあるいはプロファイラは、このリリースでは含まれておりません。

■ 可用性

 PGI Fortran & Cアクセラレータ・コンパイラは、64ビットLinuxシステム上のx64プロセッサベースのワークステーションやサーバでのみ使用できます。もちろん、このシステム上にはNVIDIA CUDA-enable GPUあるいは、TESLAカードが実装されている必要があります。これらのコンパイラは、x64+GPUプラットフォームのタイプでのみ有効です。この章で含まれている全ての例は、このようなプラットフォーム上で開発し、示しているものです。

■ ユーザ指示のアクセラレータ・プログラミング

 ユーザが指示するタイプのアクセラレータ・プログラミングにおいては、ユーザはアクセラレータ・デバイスへオフロードするために、その対象とすべきホスト・プログラムの領域を指定します。また、ターゲットとなるアクセラレータでサポートされていないコンストラクトを含む領域やユーザ・プログラムの大半は、ホスト上で実行されます。

■ カバーしていない、あるいは実装していない機能

 現在、PGIアクセラレータ・コンパイラは、コンパイラや他のツール等による、アクセラレータにオフロード化できるコード領域の検出やそのオフロード化のための機能は含んでおりません。また、アクセラレータ領域をシングルホスト上にアタッチされている複数のアクセラレータ上で実行できるような機能もカバーしておりません。PGIコンパイラの将来のバージョンでは、自動的なオフロード化や同一ホスト上のマルチ・アクセラレータの使用、あるいは、異なるタイプのマルチ・アクセラレータの使用もできるように計画していますが、現在のバージョンでは、これらはサポートされておりません。

■ 必要とされるシステム仕様

 PGI アクセラレータの機能を使用するためには、64ビットLinuxシステム上でNVIDIAドライバーコンポーネントをインストールしておく必要があります。

  • NVIDIA Driver
  • CUDA Toolkit
  • CUDA SDK

 これらは、NVIDIA の Webサイト( www.nvidia.com/cuda/) からダウンロード可能です。これらは、PGIコンポーネントではありませんので、NVIDIA 社によってライセンス並びにサポートされます。
さらに、最新の PGI リリースとCUDAソフトウェア、ドライバーの両方をサポートする64ビット Linux システムが必要とされます。

■ サポートするプロセッサとGPU

 今回の PGI アクセラレータ・コンパイラのリリースは、PGI コンパイラ&ツールの9.0リリースがサポートする全てのAMD64 並びに Intel 64 のホストプロセッサ上で利用できます。また、コンパイラのオプション・フラグである -tp <target> フラグを使用することもできます。
 NVIDIA GPU を対象としたアクセラレータのディレクティブの認識を有効にするための -ta=nvidia フラグも使用できます。そして、CUDA-enableなGeForce、Quadro、Tesla カードを有した CUDA がインストールされた任意のシステム上で、生成されたコードを使用することができます。
 アクセラレータのテクノロジーに関するこれらのフラグの詳細な情報は、PGI User's Guide をご参照下さい。また、サポートされるGPUの詳細なリストは、NVIDIA のウェブサイトでご覧下さい。www.nvidia.com/object/cuda_learn_products.html

■ インストールとライセンシング

 PGI アクセラレータ・コンパイラは、標準的な PGI Workstation、Server、CDK のライセンスキーの他に、別のライセンスキーが必要となります。PGI 9.0 のリリースにおいては、「PGI アクセラレータ・コンパイラ」は、正式なライセンス製品の前の段階の「無償のテクニカル・プレビューという扱い」とし、PGI 9.0 リリースを利用する権利を有する(サブスクリプション有効の)お客様は、2009年12月31日まで本機能を使用することができます(PGI 9.0用のライセンスキーの中に、テクニカル・プレビュー用の使用ライセンスが組み込まれております)。現在、PGI コンパイラ・ライセンスのサブスクリプションの有効期間が過ぎてしまっている場合は、サブスクリプションの有効化を行うか、あるいは、新規のライセンスのご購入が必要となります。
 なお、2009年末に、PGI アクセラレータ・コンパイラは、別のコンパイラ・エディション製品として発売する予定ですので、引き続きアクセラレータ機能を使用したいお客様は、製品のアップグレードを行っていただく必要があります。
 インストールの方法に関しては、「PGI Workstation Installation Guide」をご参照下さい。

■ アクセラレータ・プログラムの実行

 アクセラレータのディレクティブを有し、-ta=nvidia フラグを使ってコンパイル・リンクしたプログラムを実行させる方法は、-ta=nvidia フラグを付けないでコンパイル・リンクした場合と同じである。プログラムは CUDA ライブラリを探し、動的にロードします。もし、ライブラリがない場合、あるいは、プログラムをコンパイルした際に存在した場所とは異なるディレクトリ上にある場合は、LD_LIBRARY_PATH 環境変数に CUDA ライブラリの所在を追加する必要があります。
 プログラムが最初のアクセラレータ領域に到達した際、約0.5~1.5秒ほどのポーズ時間が存在します。これは、GPUへの操作権を得て、静的なリソースを割り付けるための時間オーバーヘッドです。この後は、引き続きオーバーヘッドなしに、アクセラレータ領域を実行することができます。
 アクセラレータ・プログラムを CUDA-enable の NVIDIA GPUを有しないシステムで動作させた場合、あるいは、ランタイム・ライブラリの検索範囲のディレクトリの場所に CUDA ライブラリが存在しない場合、プログラムは、その実行時にエラーメッセージ無しに終了してしまします。
 環境変数ACC_NOTIFY にゼロ以外の整数をセットした場合、ランタイム・ライブラリは GPU のカーネル(kernel) が開始される度に、その事実を標準エラーにプリントします。

■ PGI アクセラレータ・コンパイラのランタイム・ライブラリ

 PGI アクセラレータ・コンパイラは、アクセラレータの機能に関する問い合わせや実行時にアクセラレータ用のプログラムの挙動を制御するような、ユーザによる呼び出し可能な関数やライブラリ・ルーチンを提供します。Fortran において、PGI アクセラレータ・コンパイラのランタイム・ルーチンは、PURE あるいは ELEMENTA L手続きからコールされない。
 アクセラレータ・ライブラリにアクセスするためには、-ta フラグ(コンパイル・オプション)と共にアクセラレータ・プログラムをリンクする必要があります。
 C と Fortran では、各々、別のランタイム・ライブラリが存在します。

  • C ランタイム・ライブラリ・ファイル : Cでは、ランタイム・ライブラリ・ルーチンのプロトタイプが "accel.h"と言う名前のヘッダーファイルで用意されています。全てのランタイム・ライブラリ・ルーチンは、"C"リンケージを有する外部関数です。このファイルは、以下を定義します。
    1. このセクションの述べられている全てのルーチンのプロトタイプ
    2. アクセラレータの型を記述するenumulation型を含むこれらのプロトタイプで使用されている任意のデータ型
  • Fortranランタイム・ライブラリ・ファイル : Fortranでは、interfaceの宣言は、accel_lib.hと言う名前のFortranインクルード・ファイルの中、あるいは、accel_libと言うFortranモジュールの中で提供されます。これらのファイルでは、以下を定義します。
    1. このセクションの述べられている全てのルーチンのインタフェース
    2. これらのルーチンへの引数のための整数kind値を定義するための整数パラメータ
    3. アクセラレータの型を記述するための整数パラメータ。

yyyymm と言う値を持った整数パラメータ accel_version は、サポートしているアクセラレータ・プログラミングモデルのバージョンを示すもので、yyyy は年、mm は月を意味します。この値は、プリプロセッサ変数 _ACCEL の値に合致します。

 次のリストは、PGIが現時点でサポートしているPGIアクセラレータ・コンパイラのランタイム・ライブラリを簡単に述べたものです。これらのルーチンの完全な説明は、PGI User's GuideのPGI Accelerator Runtime Routinesの章をご覧下さい。

  • acc_get_device : 使用中のアクセラレータ・デバイスのタイプを返す。
  • acc_get_num_devices :ホスト側にアタッチしているアクセラレータ・デバイスの数を返す。
  • acc_init :アクセラレータ・デバイスに接続し、初期化を行い、アクセラレータ・ライブラリの中の制御構造を割り付ける。
  • acc_set_device_num :アクセラレータの領域を実行するときに使用されるデバイス伝えるルーチン。

■ 環境変数

 PGIは、アクセラレータ領域の挙動を修正するための環境変数を提供します。 このセクションでは、実行時のアクセラレータを使用するプログラムの挙動を制御するために使用する、ユーザが指定可能な環境変数について説明します。これらの環境変数は、以下のルールに準拠する必要があります。

  • 環境変数の名前は、大文字でなければなりません。
  • 環境変数にセットする値は、大文字・小文字の区別はありません。また、最初と最後の余白指定も可能です。
  • もし、プログラムが開始した後で、環境変数の値が変更された場合、その挙動は実装依存です。また、例えプログラム自身が値を変えたとしてもこれは同様です。


 次のリストは、PGIが現時点でサポートしているPGIアクセラレータ環境変数を簡単に述べたものです。これらのルーチンの完全な説明は、PGI User's GuideのPGI Accelerator Runtime Routinesの章をご覧下さい。

  • ACC_DEVICE:アクセラレータのためのPGI Unified Binaryを実行する時に使用するアクセラレータのデフォルト・デバイスを制御する。NVIDIA GPU上で実装する場合は、この環境変数は NVIDIAにセットしなければならない。それ以外の場合は、これは HOSTとなる。
  • ACC_DEVICE_NUM:アクセラレータ領域を実行する際に使用するデフォルトのデバイス番号を制御する。この値は、負ではない整数で0からホストにアタッチしているデバイスの数までの値となる。
  • ACC_NOTIFY:負ではない整数値をセットしたとき、デバイス上のカーネル(kernel) が開始される度に、その事実を標準エラーにプリントします。

■ コンパイラ・コマンド・オプション

 アクセラレータを動作させるために特に使用するコマンド・オプションは以下の通りです。

  • -tp : 対象となるホストプロセッサのアーキテクチャを指定するオプション
  • -Minfo or -Minfo=accel : このオプションを指定すると、コンパイラがアクセラレータ領域をGPUカーネルに翻訳できたかどうかについて、コンパイラのメッセージとして出力します。
  • -ta=nvidia(,nvidia_suboptions), host : PGI アクセラレータ・コンパイラに伴う新しいオプションです。-ta は、ターゲット・アーキテクチャを意味します。Fortranにおける !$ACC ディレクティブ、C における #pragma acc ディレクティブをコンパイラに認識させるために、このオプションを使用します。これは、Fortran 並びに C コンパイラのみで有効です。このオプションは、以下のサブオプションを有します。
    * nvidia - NVIDIAアクセラレータをターゲットとして選択します。さらに、以下の nvidia 用のサブオプションがあります。
    analysis :ループの解析のみ行い、コードの生成を行いません。
    • cc10 :compute capability 1.0 のコードを生成
    • cc11 :compute capability 1.1 のコードを生成
    • cc13 :compute capability 1.3 のコードを生成
    • nofma :fused-multiply-add命令を生成しない
    • time:アクセラレータ領域の単純な時間情報を集積するためにプロファイル・ライブラリをリンクする
    * host - アクセラレータがターゲットとして存在しないコード生成を行う。アクセラレータ領域をホスト側で実行するようにコンパイルする。PGI Unified Binaryコードを生成します。

コンパイラは、自動的に必要とする CUDA ソフトウェアのツールを発動し、GPU カーネルコードを生成し、Linux オブジェクト・ファイルの中にカーネルを埋め込みます。
 コマンドライン上でリンク時に、アクセラレータのライブラリにアクセスするためには、必ず、-ta フラグ・オプションを指定することが必要です。


■ アクセラレータ用のPGI Unified Binary

 PGI ンパイラは、異なるホストプロセッサ用に最適化がなされた関数を備え、一つの実行モジュール形態として実行モジュールを生成するための機能である PGI Unified Binary をサポートします。このリリースは、PGI Unified Binary をアクセラレータ用まで拡張します。特に、以下のような関数の二つのバージョンを含む単一バイナリを生成できます。

  • 一つは、アクセラレータ用に最適化したバージョン
  • 他は、アクセラレータが有効ではないとき、あるいは、アクセラレータ上での実行とホスト上での実行を比較したいときに、ホストプロセッサ上で実行するバージョン
  • この機能を有効にするには、拡張された-taフラグ・オプション-ta=nvidia,hostを使用します。このフラグは、コンパイラに対して、有効なアクセラレータ領域を有する、以下のような二つのバージョンの関数を生成するように指示する。
  • アクセラレータを対象としたコンパイル・バージョン
  • アクセラレータ・ディレクティブを無視し、ホストプロセッサを対象としたコンパイル・バージョン


 -Minfo フラグをコンパイル時に指定したときは、以下のコンパイル・メッセージと同じようなメッセージを得るでしょう。

 s1: (ホスト上の executableバージョン)
      12, PGI Unified Binary version for -tp=barcelona-64 -ta=host
      18, Generated an alternate loop for the inner loop
          Generated vector sse code for inner loop
          Generated 1 prefetch instructions for this loop
  s1:(nvidia上の executableバージョン)
      12, PGI Unified Binary version for -tp=barcelona-64 -ta=nvidia
      15, Generating copy(b(:,2:90))
          Generating copyin(a(:,2:90))
      16, Loop is parallelizable
      18, Loop is parallelizable
           Parallelization requires privatization of array t(2:90)
          Accelerator kernel generated
            16, !$acc do parallel
            18, !$acc do parallel, vector(256)
     Using register for t

上記では、PGI Unified Binaryのメッセージが、サブルーチン s1に関して、二つのバージョンを生成したことを示しています。

  • 一つは、アクセラレータのないバージョン(-ta=host)
  • もう一方は、NVIDIA GPUのためのバージョン(-ta=nvidia)


 実行時に、プログラムは NVIDIA CUDA 動的ライブラリをロードしようとします。そして、GPU の存在を確かめます。もし、ライブラリが有効でないか、あるいは、GPU が見つからない場合、プログラムはホストバージョンで実行されます。
 また、NVIDIA GPU 上で実行するようにプログラムに指示するために、環境変数をセットすることができます。これを行うためには、ACC_DEVICE を NVIDIA あるいは nvidia セットします。一方、この環境変数にこれ以外の任意の値をセットすると、ホストバージョンを使うようになります。
 なお、今回のリリースにおける -ta ターゲットは、"nvidia" と"host" の二つに限られます。

■ 複数のプロセッサターゲット

 -ta フラグと共に、複数のプロセッサターゲットを指定する形で、-tp フラグ・オプションも使用できます。この場合、次に述べるような挙動となります。

  • 一つの -tp ターゲット値の指定と、一つの -ta 値を指定した場合
    その指定された「プロセッサターゲット」と「アクセラレータターゲット」向けに生成された各サブプログラムを有する「一つの実行モジュール・バージョン」が生成される。
  • 一つの -tp ターゲット値の指定と、複数の -ta ターゲット値を指定した場合
    コンパイラは、その指定された「プロセッサターゲット」と各々の「アクセラレータターゲット」向けのアクセラレータ領域を含むサブプログラムを有する「二つの実行モジュール・バージョン」が生成される。
  • 複数の -tp ターゲット値の指定と、一つの -ta の指定をした場合
    二つあるいはそれ以上の「プロセッサターゲット」向けのそれぞれのサブプログラムのバージョンを一つの実行モジュール内に生成する。また、その各バージョンは、選択したアクセラレータ用のバイナリコードを含む。
  • 複数の -tp ターゲット値の指定と、複数の -ta ターゲット値を指定した場合
    例えば、N個の -tp の値と二つの -ta ターゲット値を指定すると、コンパイラは、N+1個のサブプログラムのバージョンを生成する。それは、始めに各 -tp ターゲット用にN個のバージョンを-ta=hostの指定と等価なアクセラレータ領域を無視したバイナリで生成します。そしてさらに、アクセラレータ向けの一つのバージョンを生成します。

■ アクセラレータ・カーネルのプロファイリング

 今回のリリースでは、以下のコマンドライン・オプションをサポートします。
   -ta=nvidia,time

 Timeサブオプションは、タイマーライブラリをリンクします。このサブオプションは、アクセラレータ領域と生成されたカーネルに関するタイミング情報を集積し、印字します。

    Sample Accelerator Kernel Timing Data
       Accelerator Kernel Timing data
       /proj/qa/tests/accel/bb04.f90
       s1
          15: region entered 1 times
               time(us): total=1490738
                   init=1489138 region=1600
                   kernels=155 data=1445
               w/o init: total=1600 max=1600
                         min=1600 avg=1600
          18: kernel launched 1 times
              time(us): total=155 max=155 min=155 avg=155

上記の例において、いくつかの事象を見て取れます。

  • 各アクセラレータ領域において、ファイル名 /proj/qa/tests/accel/bb04.f90 とサブルーチンあるいは関数名 s1 とそのアクセラレータ領域の行番号が印字されています。上記例では、15行目という風に。
  • ライブラリは何回、領域に入ったかをカウントしています(上記例では、1)。そして、その領域内で諸比した時間をマイクロ秒単位で表示します(上記例では、1490738)。この内訳は、初期化に係わる時間(例では、1489138)と実行時間(例では、1600)の二つに分けて表示します。
  • 実行時間は、「カーネル実行時間」と「ホストとGPU間のデータ転送時間」に分離して表示されます。
  • 各カーネルは、行番号が表示されます(上記例では18)。カーネルの開始数に沿って、カーネルで消費したtotal、max、min、平均の各時間が表示されます。この例では、1 回のカーネル実行ですので、全て155 です。

■ サポートする組込関数

 PGIアクセラレータ・コンパイラは、FortranとCのく見込み関数、サブプログラムをサポートします。PGI組込関数に関する詳細な情報は、PGI User's Guide における7章「Using an Accelerator」の「Supported Intrinsics」をご参照下さい。さらに、組込関数については、今後のリリースで追加される予定です。

配布と配置

ここでは、コンパイラを使用する上で、関連するトピックスについて述べます。特に、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 9.0 リリースでは、ランタイム・ライブラリを含むディレクトリは以下のとおりです。

  • $PGI/linux86/98.0/REDIST
  • $PGI/linux86-64/9.0/REDIST
  • $PGI/win64/9.0/REDIST
  • $PGI/win32/9.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 9.0 ライセンシーは、PGI End-user License Agreementに準拠し、このディレクトリ内のファイルを再配布することができます。

既知の制限事項

  • 一般的な制限事項
    ここで述べる問題の多くは、コンパイラ・オプション、サブオプションの特定な使用法に関連するものです。
    • PGI 9.0 で生成されたオブジェクトあるいはモジュールは、PGI 5.x並びにそれ以前のリリースのオブジェクト、モジュールとは互換性がありません。
    • PGI 6.1並びにそれ以前のリリースにおいて -Mipaオプションを付加して作成されたオブジェクト・ファイルは、PGI 9.0上で再コンパイルが必要です。
    • -i8オプションを使用するプログラムにおいて、PGIコンパイラにバンドルしているACMLライブラリととともに使用する場合、互換性がありません。このオプションの互換ライブラリに関しては、developer.amd.comをご参照ください。
    • -i8オプションの使用において、プログラムをMPIライブラリとACMLライブラリと共に使用する場合、互換性がありません。Integer*8配列の引数の使用により、これらのライブラリと共に使用する場合、異常終了します。
    • PGCCの-Mipa=liboptと-Mipa=vestigialオプションを同時に使用した場合、リンク時に未解決な参照が生じる場合があります。これは、-Mipaにサブオプションvestigialを付加することにより、エラーとなる関数が削除されるために起こります。この場合は、vestigialを付加せずに、-Mipaのみの指定で対処してください。
    • -mpを使用して生成された OpenMP プログラムが、SuSE9.0 システム上の複数プロセッサで並列実行した場合、極端に遅くなります。しかし、これと同じ実行モジュールが SuSE9.1 上で動作させると期待される性能と効果が得られます。
    • ACML4.3.0ライブラリは、-cache_alignを含んだ -fassseコンパイル・オプションを使用して構築されております。32-bitターゲットシステム上で、-lacmlオプションを使用してACMLライブラリをリンクする際に、必ず、全てのプログラムに -cache_alignもしくは、このオプションを含む複合オプションである -fastsseを付加してコンパイル/リンクを行ってください。64-bitターゲットシステム上では、デフォルトでスタック16byteアラインメントであるため、この問題は生じません。なお、性能が多少劣りますがポータビリティの良いバンドルされたlibblas.aとliblapack.aライブラリは、SSE命令を有していないプロセッサ上で使用することができます。
    • -fPIC あるいは、-mcmodel=medium オプションを使用してコンパイルし、-lacml (ACMLライブラリ)をリンクする際に、 "error while loading shared libraries: libacml_mv.so: cannot open shared object file: No such file or directory." と言うエラーメッセージが出力されます。その際は、" -lacml_mv" オプションをリンク時のコマンド列に追加してください。
    • -Mpfiと-mpを同時に使用することはサポートされていません。-Mpfiオプションは、コンパイル時に -mp を抑止しますが、それは、プログラムの中のOpenMPディレクティブ/プラグマの解釈に依存してプログラムの実行時にエラーを引き起こすことになります。OpenMPに依存しないプログラムは、正確にprofile feedbackを使用することができます。-Mpfoオプションは、OpenMP処理を抑止します。

  • プラットフォーム特有の制限事項
    ここでは、各プラットフォーム別のコンパイラ制限事項について説明します。

    Linux
    -mcmodel=mediumオプションを使用してコンパイルされたオブジェクトを組み込んだプログラムは、静的にリンクされることはできません。これは、linux 86-64環境における制約事項であり、PGIコンパイラによる制約事項ではありません。

    Apple Mac OS X
    • Apple Mac OS プラットフォーム上では、 PGI Workstation 9.0 コンパイラは、ユーザバイナリの静的リンク(Static linking) をサポートしません。今後の Apple 社のアップデートとの互換性のために、コンパイラは、ユーザバイナリのダイナミック・リンク方式(Dynamic linking) をサポートします。
    • osx86-64上で、-Mprof=func あるいは、-Mprof=linesの使用は、Tiger 並びにLeopardのOS共にサポートしておりません。
    • OpenMPI、PGDBG、PGPROFは、Mac OS X 10.5(Leopard) 上でサポートされます。これらは、Mac OS X 10.5 (Tiger) では、サポートされません。
    • Mac OS X 10.5 (Tiger)上のPGDBGによるOpenMPIのデバッグセッションを開始するには以下の方法をとります。
    1. デバッガを起動する際に、実行モジュール名を「フルパス名」で指定します。例えば、次のような形態です。
      pgdbg -mpi:mpirun -np 4 /home/user1/a.out
    2. main上でブレークポイントを指定します。
    3. ブレークポイントへ continueします。
    4. デバッグセッションを開始します。

    Windows
    • Windowsにおいて、cygwinに含まれるvi のバージョンは、SHELL変数に予期しないものが指定されている場合、問題が起きる可能性があります。このケースの場合、viが起動される時、次のようなメッセージを出力します。この問題を修復するには、SHELL環境変数に対してcygwinのbinディレクトリの中のシェルを指定してください。(例、/bin/bash)
      E79: Cannot expand wildcards
      E79: Cannot expand wildcards
      E79: Cannot expand wildcards
      Hit ENTER or type command to continue
    • Windows上で、デバッギングのためにビルドされたランタイム・ライブラリ(例 msvcrtdとlibcmtd)は、PGI Workstationには含まれていません。デバッグ用途のために、-gオプションを付けてコンパイルするとき、PGIランタイム・ライブラリとMicrosoftランタイム・ライブラリの両方の標準的なnon-debugバージョンがいつも使用されます。この制約は、アプリケーションコードのデバッギング時にのみに影響します。
    • Dynamic Link Libraries(DLLs) は、PGI 8.0 によってMicrosoft Windowsプラットフォーム上で構築することができます。但し、次の制約があります。
    1. DLLsは、PGI C++コンパイラでは生成することはできません。
    2. もし、DLLsがPGIコンパイラにより構築された場合、ランタイムDLLsが必要となります。コンパイラ・オプション-Mmakedllは、正確なランタイム・ライブラリが使用されることを保証するためのものです。
    3. もし、実行モジュールが PGI コンパイラでコンパイルされた DLLs とリンクされているものならば、PGI ランタイム・ライブラリDLLs を使用しなければなりません。この場合は、デフォルトで使用される静的ライブラリを使用することができないからです。これを実現するためには、実行モジュールを作成する時に PGI 7.1 から導入された -Bdynamic オプションを使用してください。

    以下は、WindowsとPGDBGに係る問題・制限事項となります。
    • PGDBG Windows-Windows 上の PGDBG においては、一般にディレクトリ・パス名を区切るためにバックスラッシュ文字(“\” )を使用します。PGDBG は、C 言語の数式表示として、バックスラッシュをエスケープ文字の意味として使用します。一方、Windowsプ ラットフォームにおける PGDBG は、ディレクトリ・パス名を区切るためにフォワードスラッシュ文字(”/”)を使用してください。但し、この事項は DEBUG コマンド、あるいはコマンドライン上の実行モジュール名には適用されません。(但し、このコンベンション自体は、これらのコマンドにおいても動作します)
    • Windows プラットフォーム上のPGDBG において、一つのプロックである「システムコール」を超えてシングル・ステップ実行したとき、Windows は stepi/nexti をタイムアウトします。これを改善する方法に関しては、オンライン www.pgroup.com/support/tools.htm をご参照ください。
    • PGDBG SFU/SFA - オペレーティングシステムのサポートがないために、SFU/SUA システム上のPGDBGは、ハードウェア watchpoint(hwatchコマンド)をサポートしていません。
    • PGDBG SFU/SFA - オペレーティングシステムの制約により、32bit SUA 上のプログラムだけがPGDBGのマルチスレッドのデバッギングが可能です。但し、一つ制約があり、一度ストップすると、プロセスは全てのスレッド、あるいは、シングルスレッドの続行(スレッドの部分的なセットの続行ではなく)をしなければ、プロセスの続行ができません。スレッドの部分的なセットの続行は、結果として全てのプロセス(スレッド)を続行させることになります。
    • PGI Workstation ランタイム・ライブラリ DLLs と共に、-Mprof を使用しないでください。プロファイリングのための実行モジュールを構築するためには、スタティック・ライブラリを使用してください。基本的に、-Bdynamicがを使用しない限り、スタティック・ライブラリがデフォルトとなります。

  • PGDBGに関する制限事項
    • PGDBG-.so や.dll 等の shared ライブラリは、そのライブラリの中に含まれるコードがブレークポイントとしてセットされる前にロードされていなければなりません。
    • PGDBG は、スタティック・ライブラリで構築されている OpenMPI ライブラリを使用した OpenMPI プログラムのデバッグをサポートします。OpenMPI がダイナミック・ライブラリとして構築されている場合、多くのシェアード・ライブラリが openMPI プログラムによってロードされます。PGDBG のシェアード・オブジェクトの oad/unload イベントハンドラーの現在の実装では、OpenMPI のシェアード・オブジェクトをリンクしているMPIプログラムをデバッグすると、MPI_init らびに MPI_finalize は、非常に実行時間がかかります。したがって、OpenMPI イブラリを生成する際の config では、次のオプションを付けて生成したスタティック・ライブラリの openMPI を使用することを推奨します。
        --enable-static ?-disable-shared
    • PGDBG 8.0 リリースは、ランダムなアドレスを有効にするシェアード・ライブラリのローディングをサポートする新しい Linux システム上で、MPI プログラムのデバッギングをできます。
      ・ このモードが有効な時、PGDBG の現在の実装は、極めて多くのメモリを使用するため、その結果、性能が低下します。PGDBG MPIプログラムをデバッグする際は、PGI は現在、Linux カーネル上でこのモードを抑止することを推奨しています。このカーネルモードを抑止するにはルート権限で次のコマンドを実行してください。
        sysctl -w kernel.randomize_va_space=0
    • Fedora Core 6 or RHEL5 上でシェアード・ライブラリのロード認識においてPGDBG 内の問題により、MPICH-1 のデバッギングにおいて rank0 のプロセス以外のプロセスのブレーク・ポイントが無視されます。これは、ランダムなアドレスを有効にするシェアード・ライブラリのローディングを行っている時に生じます。
    • "pgserv" 環境の下で起動した MPI ジョブのデバッギング時に、プログラムの最初の実行文の前にジョブの進行が停止させられます。この時点でソースレベルのデバッグ情報が存在しないため、ソースレベルの次のコマンドを出すことは非常にゆっくりと実行し、遅くなります。これが完了するか、例外により止まるか、ユーザによって入力された PGDBG 停止コマンドによって止まるまで、こうした理由で処理が完了するまでジョブの実行が始まらないことを回避するため、ユーザは、最初のブレークポイントをセットすべきです。フォートラン・プログラムがデバッグされている場合は、"continue" コマンドを出す前に実行パス上で、メイン、またはMAIN_、あるいは別のポイントで最初のブレークポイントをセットしてください。
    • PGDBG-デバッグコマンドの watch 系のコマンドは、ローカル変数と共に使用されたとき信頼できません。Watchされるローカル変数のスコープ範囲内から関数、サブルーチンを呼ぶことは、イベントを見失うか、あるいは明確なイベントを誤ることを引き起こします。もし、プログラムのスコープがwatchされる変数のスコープ部分から離れていない場合、ローカル変数は正しくwatchできます。グローバル、静的変数に対するwatchコマンドは、常に正しいものを与えます。
    • PGDBG - Unified Binaries (-tp x64)を付けて構築されたモジュール)のデバッギングは、フルにサポートされません。いくつかのサブプログラム名が unified binaries を生成する過程で変更されています。PGDBG は、アプリケーションのソースコード内で使用されているプログラム名とこれら変更された名前との間の変換を行いません。デバッグにおいては、Unified Binaries 生成オプションと付けずに、nativeなプロセッサターゲットで実行モジュールを生成してください。あるいは、Unified Binariesのデバッグを行う方法に関しては、http://www.pgroup.com/support/tools.htm に詳細な情報がありますので、ご参照下さい。
    • MPICH-1 のアプリケーションのデバッグ(mpirun -dbg=pgdbg ...) において、現在のディレクトリを含めて実行モジュール名を表記する、./ を指定しないでください。例えば、
       mpirun -dbg=pgdbg -np 4 ./a.out
      という形で実行モジュール名を指定すると、Linux カーネルモードの時に rank 0 以外のプロセスのブレーク・ポイントが失われる場合があります。これを解決する方法は、以下の形式で実行モジュール名を指定してください。
       mpirun -dbg=pgdbg -np 4 a.out

  • PGPROFに関する制限事項
    • -Mprof=func並びに-mcmodel=mediumあるいは-mpを一緒に使用した場合、生成された実行モジュールはセグメンテーション・フォールトが生じます。これらのオプションを同時に使用することは避けてください。
    • gprofスタイルのプロファイリング機能(-pg)を使用してコンパイル・リンクしたプログラムは、2.6.4 Linuxカーネルのシステム上でセグメンテーション・フォールトが生じます。
    • マルチスレッドのサンプルベースのプロファイル機能(gprofスタイルのプロファイリング:-pgあるいは、-Mprof=timeオプション)でレポートされる時間は、マスタ・スレッドだけのものとなっています。一方、PGI形式のプロファイリング(-Mprof=lines|func)あるいはハードウェア・カウンタ・ベースプロファイリング(-Mprof=hwcts) あるいは、pgcollectは、個々のスレッドあるいはプロセスの時間データを個別に取得するために使用されます。

※文中で使用されている商品名、名称は、各社の商標あるいは登録商標です

(C) SofTek Systems, Inc. 2009

ライセンスの更新に関する FAQ
現在サブスクリプション契約期間中であるお客様は無償でバージョンアップが可能です。是非、この機会に性能が向上した新 9.0 リリースをご利用くださいますようお願いいたします。

  • コンパイラ製品のバージョンの見方と調べ方

    製品バージョンの表し方は、メジャーマイナーおよびバグフィックスの 3 種類となります。最初の1 桁目がメジャーバージョン、2 桁目がマイナーバージョン、最後のハイフォンで続く数字がバグ・フィックス番号となります。サブスクリプション契約を行っていないお客様に関しては、購入時のマイナーバージョンの以降のバグ・フィックスに関しては無償でソフトウェアを入手することができます。
      (例) version 9.0-2
           9 : メジャーバージョン番号
           0 : マイナーバージョン番号
           2 : バグ・フィックス番号

    現在所有している PGI コンパイラのバージョンを調べるには、以下のコマンドを実行してください。
       $ pgf77 -V
        pgf77 9.0-2 <--- バージョンを表す
        Copyright 1989-2000, The Portland Group, Inc. All Rights Reserved.
        Copyright 2000-2009, STMicroelectronics, Inc. All Rights Reserved.

  • 今所有しているライセンスで新バージョンが動作しますか?

    PGI のライセンス・ファイル (license.dat) には、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、7.1、7.2 、8.0 あるいは 9.0 と言った動作可能なバージョンを示すフィールドを持っています。現在、所有しているライセンスファイルの中のフィールドが現在、動作可能な最も高いリリース番号となります。最新のリリースを動作させるためには、最新リリース番号へのフィールド値の更新が必要です。年間サブスクリプション契約(ソフトウェア情報パッケージ購入)を行っているお客様は、ライセンスの発行サイトにおいて、新ライセンスを取得して、 license.dat の内容を変更してください。バージョンアップがサブスクリプション契約期間内で行われた場合、ライセンス発行サイト上で表示されるライセンスは自動的に更新されたものとなっていますので、この内容をコピーして、システム上の license.dat の内容を更新すると新リリース用のライセンスファイルとなります。(もちろん、新しいリリース・ソフトウェアは、インストールされていることが前提です)

======== (License.dat の例 : Release 9.0 の場合) =================
SERVER photon0 0002b32c36ba 27000
DAEMON pgroupd
PACKAGE pgi90-server-complete pgroupd9.0 ACF229192811 \
COMPONENTS="pgi-hpf-lin64:9.0 pgi-f95-lin64:9.0 \
pgi-f77-lin64:9.0 pgi-cc-lin64:9.0 pgi-cpp-lin64:9.0 \
pgi-hpf-lin32:9.0 pgi-f95-lin32:9.0 pgi-f77-lin32:9.0 \
(中略)
FEATURE pgi90-server-complete pgroupd9.0 31-dec-0 2 8355F01C7AD3 \
VENDOR_STRING=512349:16:ws DUP_GROUP=U SUITE_DUP_GROUP=U \
BORROW=336 TS_OK SIGN="0E79 CD28 B097 9765 8022 9A26 7008 7CE0 \
FAD6 1AC0 44B5 7309 13A6 9183 91EA 1371 BFB7 D294 FF29 DF3B \
9E16 ED8A 7583 6A59 1D77 9089 FC27 CF92 B78F 0D58"
======== (License.dat の例 : Release 9.0 の場合) =================

  • 一方、例えば新規購入で、リリース 9.0-1 のライセンスを取得していれば、その後のバグ・フィックスのリリースである 9.0-2、9.0-3 等の製品はサブスクリプション契約なしでも使用可能です。なお、ライセンスファイルのバージョン・フィールドの数字より前のコンパイラリリース製品は、問題なく動作します。

ライセンス発行の手順に関しては、こちらをご覧ください。

  • 現在の自分のライセンス情報をどのように調べればよいでしょうか?

現在の自分が所有しているライセンス情報は、ライセンス発行サイトにてオンラインで入手が可能です。お客様のWebアカウントでログインした後、"Manage PGI Products" --> "PIN Management" の画面になりますので、PIN番号のボタンをクリックすると、ライセンス情報、サブスクリプション期間終了日等がが表示されます。

  • 「年間サブスクリプション契約(ソフトウェア情報パッケージ)」とは何ですか?

年間サブスクリプション契約がなされているお客様は、製品のマイナーバージョンアップ時の新しいライセンスを得る権利を有します。製品のライセンスを新規に購入し、同時に年間サブスクリプション料金をお支払いただいた場合、1年以内の最新のリリースに対するアップグレードが可能となります。年間サブスクリプションをご購入いただいていないお客様は、購入の後に50日以内のバージョンアップ・リリースに対しては、新リリースのライセンス更新が可能です。なお、サブスクリプション契約を行っていないお客様が、その後、新バージョン用のライセンスの取得を行いたい場合、サブスクリプション契約空白期間も含めたサブスクリプション料金をお支払いただくことにより、新ライセンスの取得が可能となります。

  • お客様のアクセスコード(ユーザID、パスワード)を紛失あるいは忘れた方へ

お客様のお名前、組織名、ソフテック製品出荷ID をお書き添えいただき、support@softek.co.jp へその旨、お知らせください。アクセスコードを再度メールにてお送りいたします。



 ※本ページに記載されている会社名、製品名は、各社の登録商標または商標です。
 ソフテックは、PGI 製品の公認正規代理店です

サイトマップ お問合せ
(C) Copyright SofTek Systems Inc. All Rights Reserved.