PGI
®
Server 2017
PGI
®
Workstation 2017
リリースノート
Release 2017
2017 年 9 月
2017 年 9 月作成(PGI 17.9)株式会社 ソフテック
目次
1 サポートするプラットフォーム ... 1
1.1 PGI Workstation/Server Release 2017 のソフトウェア内容 ... 1
1.2 サポートするプロセッサ・システムについて ... 2
1.3 サポートする OS の追加 ... 2
2. PGI 2017 の新機能、変更点等 ... 5
2.1 PGI 2017 Update and Additions ... 5
2.2 PGI Accelerator OpenACC Compilers の新機能 ... 11
2.3 C++コンパイラ ... 14 2.4 ランタイム・ライブラリ・ルーチンの新機能と変更点 ... 15 2.5 ライブラリ・インタフェース ... 15 2.6 Environment Modules ... 15 2.7 Beta 版 LLVM コードジェネレータ ... 16 3. 配布と配置 ... 16 3.1 アプリケーションの配置と再配布 ... 16 4. 既知の制限事項 ... 17 4.1 プラットフォーム特有の制限事項 ... 17 4.1.1 Linux ... 17 4.1.2 Apple OS X ... 17 4.1.3 Microsoft Windows ... 18 4.2 PGDBG に関する問題 ... 18 4.3 PGPROF に関する問題 ... 18 4.4 OpenACC に関する制限事項、問題 ... 18 4.5 修正事項 ... 19 本資料の全ての情報は、現状のまま提供されます。株式会社ソフテックは、本資料に記述あるいは表現 されている情報及びその中に非明示的に記載されていると解釈されうる情報に対して一切の保証をいたし ません。また、本資料に含まれる情報の誤りや、それによって生じるいかなるトラブルに対しても一切の 責任と補償義務を負いません。また、本資料に掲載されている内容は、予告なく変更されることがありま す。 本資料で使用されている社名、製品名などは、一般に各社の商標または登録商標です。 株式会社ソフテック 〒 154-0004 東京都世田谷区太子堂 1-12-39 http://www.softek.co.jp/
Copyright © 2017, SofTek Systems, Inc.
All rights reserved.
米国NVIDIA 社の PGI コンパイラ製品のバージョン 2017 のリリースノートを以下に記します。本リリー スにおける製品の主な新機能、特徴に関して纏めたものです。
1 サポートするプラットフォーム
64 ビット Linux 64 ビット x64 互換のプロセッサ上で動作する 64 ビット Linux オペレーティングシステム上で利用可 能です。 64 ビット/32 ビット Windows 64ビットx64互換のプロセッサ上で動作する64ビット Windows®オペレーティングシステム上で利 用可能です。 64 ビット Apple macOS64 ビットの Intel®ベースのプロセッサを搭載したシステムで、64 ビット Apple Mac オペレーティン
グシステム上で利用可能です。
1.1 PGI Workstation/Server Release 2017 のソフトウェア内容
PGFORTRAN ネイティブ OpenMP/自動並列/OpenACC Fortran 2003 コンパイラ
PGF77 ネイティブ OpenMP/自動並列 FORTRAN 77 コンパイラ
PGCC ネイティブ OpenMP/自動並列/OpenACC ANSI C11 and K&R C コンパイラ
PGC++ ネイティブ OpenMP/自動並列/OpenACC GNU g++ ABI 互換 C++14 コンパイラ(Linux/OS X)
PGPROF OpenACC, CUDA, OpenMP, マルチスレッド並列対応グラフィカル・プロファイラ
PGDBG マルチスレッド/OpenMP/MPI 並列対応グラフィカル・デバッガ
(Linux) NVIDIA GPUDirect をサポートする Open MPI 1.10.2 ライブラリをバンドルします。 GPUDirect は、CUDA 7.5 以上を必要とします。GPUDirect は、InfiniBand のサポートに依存し ます(OFED3.18 以上のスタック・ソフトウェアが必要です)。InfiniBand 媒体がシステム上で 有効であれば、Open MPI はこれを使用するように構成します。なお、64-bit linux86-64 MPI メッセージ2GB サイズ以内となります。
(macOS) MPICH MPI ライブラリ, version 3.2(64-bit only)をバンドルします。
(Windows) Microsoft HPC Pack 2012 MS-MPI Redistributable Pack (version 4.1)ライブラリをバ ンドル
Linux/macOS 用に ScaLAPACK 2.0.2 線形数値計算ライブラリをバンドルします。これは、Open MPI, MPICH or MVAPICH ライブラリとともに使用できる分散メモリシステム用のライブラリ です。
Network floating for x86 Linux(旧 PGI CDK)製品には、MVAPICH2 MPI ライブラリの version 2.0 ならびに MPICH MPI ライブラリ version 3.2 もオンラインで提供します。
the customized OpenBLAS project source をビルドした最適化 BLAS 、LAPACK ライブラリをバ ンドルします。
FlexNet ライセンスマネージャのユーティリティ
PDF、HTML によるオンラインドキュメントと UNIX man ページ
(Windows 用製品のみ) Win64 環境上で、UNIX ライクの bash シェル・コマンド環境(Cygwin)
MPI デバッグのサポート
MPI アプリケーションのデバッグのために PGDBG を提供しています。PGDBG MPI Debugger は、PGI ノードロックライセンスでは 16 プロセスまでの 1 ノード内デバッグが可能です。PGI ネットワークフローティングライセンスでは 256 プロセスまでのリモートデバッグが可能で
す。
macOS 版の PGDBG に関して macOS 10.12 Sierra 上の PGDBG は現在のところサポートしており ません。OS X 10.9(Mavericks) から 10.11 (El Capitan)上ではサポートしております。
(注意) ご購入ライセンス製品によって、使用できるコンパイラ言語の種類が決まります。
1.2 サポートするプロセッサ・システムについて
64 ビットの AMD64、Intel® 64 のプロセッサに対応します。PGI 2017 において、サポートする CPU
は以下の表のとおりです。 Brand CPU -tp <target> Mem Addressing Floating point HW
SSE1 SSE2 SSE3 SSSE3 SSE4 ABM SSE4a AMD Piledriver Piledriver-64 64-bit Yes Yes Yes No Yes Yes AMD Bulldozer bulldozer-64 64-bit Yes Yes Yes No Yes Yes AMD Istanbul istanbul-64 64-bit Yes Yes Yes No Yes Yes AMD Opteron/Quad-Core shanghai-64 64-bit Yes Yes Yes No No Yes AMD Opteron/Quad-Core barcelona-64 64-bit Yes Yes Yes No No Yes AMD Opteron/Athlon64 k8-64 64-bit Yes Yes Yes No No No AMD Opteron Rev E/F
Turion/Athlon64 k8-64e 64-bit Yes Yes Yes No No No AMD Turion64
Turion/Athlon64 k8-64e 64-bit Yes Yes Yes No No No Intel Core i7/i5/i3
(Haswell以降) haswell-64 64-bit Yes Yes Yes Yes Yes Yes Intel Core i7/i5/i3
(Ivy Bridge) ivybridge-64 64-bit Yes Yes Yes Yes Yes Yes Intel Core i7/i5/i3
(Sandy Bridge) sandybridge-64 64-bit Yes Yes Yes Yes Yes Yes Intel Core i7/Core i5/i3
(Nehalem) nehalem-64 64-bit Yes Yes Yes Yes Yes Yes Intel Penryn penryn-64 64-bit Yes Yes Yes Yes Yes No Intel Core 2 Core2-64 64-bit Yes Yes Yes Yes Yes No Intel P4/Xeon EM64T p7-64 64-bit Yes Yes Yes Yes No No
1.3 サポートする OS の追加
PGI 2017 において、サポートする OS は以下のとおりです。なお、CentOS や Scientific Linux は、 Red Hat のクローン OS ですので、Red Hat と同じように利用可能です。
Linux Operating Systems and Features Supported in PGI 2017
Distribution Type 64-bit HT pgc++ pgdbg NPTL NUMA glibc GCC
RHEL 7.2 Linux Yes Yes Yes Yes Yes No 2.17 4.8.5
RHEL 7.1 Linux Yes Yes Yes Yes Yes No 2.17 4.8.3
RHEL 7.0 Linux Yes Yes Yes Yes Yes No 2.17 4.8.2
RHEL 6.5 Linux Yes Yes Yes Yes Yes No 2.12 4.4.7
RHEL 6.4 Linux Yes Yes Yes Yes Yes No 2.12 4.4.7
RHEL 6.3 Linux Yes Yes Yes Yes Yes No 2.12 4.4.6
RHEL 6.2 Linux Yes Yes Yes Yes Yes No 2.12 4.4.6
RHEL 6.1 Linux Yes Yes Yes Yes Yes No 2.12 4.4.5
RHEL 6.0 Linux Yes Yes Yes Yes Yes No 2.12 4.4.4
RHEL 5.6 Linux Yes Yes Yes Yes Yes No 2.12 4.4.4
RHEL 5.5 Linux Yes Yes Yes Yes Yes No 2.5 4.1.2
RHEL 5.4 Linux Yes Yes Yes Yes Yes No 2.5 4.1.2
RHEL 5.3 Linux Yes Yes Yes Yes Yes No 2.5 4.1.2
Fedora 25 Linux Yes Yes Yes Yes Yes Yes 2.24 6.2.1
Fedora 24 Linux Yes Yes Yes Yes Yes Yes 2.23 6.1.1
Fedora 23 Linux Yes Yes Yes Yes Yes Yes 2.22 5.1.3
Fedora 22 Linux Yes Yes Yes Yes Yes Yes 2.21 5.1
Fedora 21 Linux Yes Yes Yes Yes Yes Yes 2.20 4.9.2
Fedora 20 Linux Yes Yes Yes Yes Yes Yes 2.18 4.8.2
Fedora 19 Linux Yes Yes Yes Yes Yes Yes 2.17 4.8.1
Fedora 18 Linux Yes Yes Yes Yes Yes Yes 2.16 4.7
Fedora 17 Linux Yes Yes Yes Yes Yes Yes 2.15 4.7
Fedora 16 Linux Yes Yes Yes Yes Yes Yes 2.14.90 4.6.2
Fedora 15 Linux Yes Yes Yes Yes Yes Yes 2.13 4.6.0
Fedora 14 Linux Yes Yes Yes Yes Yes Yes 2.112 4.4.5
Fedora 13 Linux Yes Yes Yes Yes Yes Yes 2.12 4.4.4
Fedora 12 Linux Yes Yes Yes Yes Yes Yes 2.11 4.4.2
Fedora 11 Linux Yes Yes Yes Yes Yes Yes 2.9 4.3.3
Fedora 10 Linux Yes Yes Yes Yes Yes Yes 2.9 4.3.2
SUSE Leap
42.2 Linux Yes Yes Yes Yes Yes Yes 2.22 4.8
SUSE Leap
42.1 Linux Yes Yes Yes Yes Yes Yes 2.19 4.8
SUSE 13.2 Linux Yes Yes Yes Yes Yes Yes 2.19 4.8.3
SUSE 13.1 Linux Yes Yes Yes Yes Yes Yes 2.18 4.8.1
SUSE 12.3 Linux Yes Yes Yes Yes Yes Yes 2.17 4.7.2
SUSE 12.2 Linux Yes Yes Yes Yes Yes Yes 2.15 4.7
SUSE 12.1 Linux Yes Yes Yes Yes Yes Yes 2.14 4.6.2
SUSE 11.3 Linux Yes Yes Yes Yes Yes Yes 2.11.2 4.5
SUSE 11.2 Linux Yes Yes Yes Yes Yes Yes 2.10.1 4.4.1
SUSE 11.1 Linux Yes Yes Yes Yes Yes Yes 2.9 4.3.3
SLES 12sp3 Linux Yes Yes Yes Yes Yes Yes 2.22 4.8.5
SLES 12sp1 Linux Yes Yes Yes Yes Yes Yes 2.19 4.8.5
SLES
11sp1/sp2 Linux Yes Yes Yes Yes Yes Yes 2.9 4.3.3
Ubuntu
16.10 Linux Yes Yes Yes Yes Yes Yes 2.24 6.1.1
Ubuntu
16.04 Linux Yes Yes Yes Yes Yes Yes 2.23 5.3.1
Ubuntu
15.10 Linux Yes Yes Yes Yes Yes Yes 2.21 5.2.1
Ubuntu
15.04 Linux Yes Yes Yes Yes Yes Yes 2.21 4.9.2
Ubuntu
14.10 Linux Yes Yes Yes Yes Yes Yes 2.19 4.9.1
Ubuntu
14.04 Linux Yes Yes Yes Yes Yes Yes 2.19 4.8.2
Ubuntu
13.10 Linux Yes Yes Yes Yes Yes Yes 2.17 4.8
Ubuntu
13.04 Linux Yes Yes Yes Yes Yes Yes 2.15 4.7
Ubuntu
12.10 Linux Yes Yes Yes Yes Yes Yes 2.15 4.7
Ubuntu
12.04 Linux Yes Yes Yes Yes Yes Yes 2.14 4.6
HT = hyper-threading, NPTL = Native POSIX Threads Library, NUMA = Non-Uniform Memory Access. Windows上で使用可能なコマンドベースのコンパイラ(PGI Workstation & Server)、PGI Visual Fortran が 対応するOS は、以下のとおりです。
Windows® Operating Systems and Features Supported in PGI 2017
OS Type 64-bit HT pgc++ pgdbg NPTL NUMA glibc GCC
Microsoft® Windows® (64ビット)
10 Yes Yes NA Yes NA Yes NA NA 8.1 Yes Yes NA Yes NA Yes NA NA 8 Yes Yes NA Yes NA Yes NA NA 2016 Yes Yes NA Yes NA Yes NA NA 2012 Yes Yes NA Yes NA Yes NA NA 7 Yes Yes NA Yes NA Yes NA NA 2008 R2 Yes Yes NA Yes NA Yes NA NA
Intel プロセッサベースの Apple OS X は、以下のとおりです。
Apple Operating Systems and Features Supported in PGI 2017
OS Type 64-bit HT pgc++ pgdbg NPTL NUMA glibc GCC
Apple macOS
Sierra Yes No Yes Yes NA NA NA 4.2.1 El Capitan Yes No Yes Yes NA NA NA 4.2.1 Yosemite Yes No Yes Yes NA NA NA 4.2.1
Mavericks Yes No Yes Yes NA NA NA 4.2.1
2. PGI 2017 の新機能、変更点等
2.1 PGI 2017 Update and Additions
PGI 17.9 update
■ PGI アクセラレータコンパイラ
CUDA Toolkit 9.0 RC をサポート。 但し、コンパイラによって使用されるデフォルトのバージョンは、 CUDA 7.5 を使用します。 代わりに CUDA 8.0 または CUDA 9.0 を使用するには、-usta = tesla ま たは -Mcuda のコンパイル時およびリンク時のオプションに cuda8.0 または cuda9.0 のサブオプ ションを追加します。
(注意)CUDA 9.0 インストールで PGI 17.9 コンパイラを使用すると、既知の問題があります。 特に、CUDA 9.0 では、新しい同期ワープシャッフル命令が導入されています。 この PGI リリースのコンパイラは、 acc routine vector を有するルーチンの中で、ワーピング中のスレッド間で値を共有し、ベクトルルーチン 0 からすべてのベ クトルレーンへ値をコピーするために、より古い、今は信頼できないワープシャッフル命令を使用します。 この 問題は、Kepler および Maxwell GPU でも発生する可能性があります。 この問題は、今後の PGI リリースで修正 される予定です。
PGI 17.7 update
■ PGI アクセラレータコンパイラ
PGI OpenACC と CUDA Fortran に Tesla V100 GPU のサポートが追加されました。 Tesla V100 は 、 新しい NVIDIA Volta GV100 GPU に基づいて、より多くのメモリ帯域幅、より多くのストリーミング マルチプロセッサ、次世代 NVLink、新しいマイクロアーキテクチャの機能を提供し、パフォーマン スとプログラマビリティを向上させます。 OpenACC および CUDA Fortran プログラマ向けに、Tesla V100 は、x86-64 および OpenPOWER プロセッサベースのシステム上で CUDA Unified Memory 機 能のハードウェアサポートとパフォーマンスを向上させます。 Tesla V100 GPU 用のコードを生成す るには、オプション-ta=tesla あるいは -Mcuda のサブオプションとして cc70 を指定してコンパイ ルおよびリンクする必要があります。 Volta GPU をターゲットにする場合は、CUDA 9 toolkit を使用 する必要があります。
CUDA 9 toolkit の初期サポートが追加されました。 PGI 17.7 コンパイラとプロファイラで CUDA 9 を使用するための要件:
CUDA 9 toolkit のリリース候補(RC)またはアーリーアクセス(EA)版をインストールし ます。
コンパイルオプション CUDAROOT を使用して CUDA 9 toolkit の場所を指定します。 た とえば、CUDA 9 が /opt/local/cuda-9.0 にインストールされている場合は、プログラムの コンパイル、リンク時に、コンパイルオプションの引数として他のオプションと共に CUDAROOT=/opt/local/cuda-9.0 を指定します。
さらに、サブオプション cuda9.0 は、-ta=tesla または -Mcuda のコンパイル時およびリ ンク時のオプションとともに使用します。
CUDA Unified Memory のサポートが追加されました。 PGI 17.7 コンパイラは、Pascal および Volta GPU ハードウェア機能、NVLink、CUDA Unified Memory を 活用して、GPU アクセラレーションされ た x86-64 および OpenPOWER プロセッサベースのサーバで OpenACC および CUDA Fortran プ
ログラミングを簡素化します。 CUDA Fortran または OpenACC において Allocatable なデータが CUDA Unified Memory に配置されている場合、明示的なデータ移動またはデータ指示は必要ありま せん。 これにより、割り当て可能なデータを大量に使用するアプリケーションの GPU アクセラレー ションが簡素化され、アルゴリズムの並列化とスケーラビリティに集中できます。 この機能を有効 にするには、 -ta=tesla:managed コンパイラ・オプションを使用します。 以前の PGI リリースで は、オプションでインストールされた評価機能としての用途で、CUDA Unified Memory のコンパイ ラサポートが提供されていました。
CUDA Unified Memory のサポートのために cudaMallocManaged() への呼び出し回数を最小限に抑 えるプールアロケータを追加しました。 プールアロケータは、 -ta=tesla:managed または -ta=tesla:pinned が使用されている場合、デフォルトで有効になります。
Fortran の派生型の自動ディープコピー(deep copy)のベータサポートを追加しました。 この機能を 使用すると、OpenACC を使用して最新のネストされたデータ構造を持つアプリケーションを Tesla GPU に移植することができます。 PGI 17.7 コンパイラでは、OpenACC の copy、copyin、copyout、 update ディレクティブに集約された Fortran データオブジェクトをリストして、集約データオブジ ェクト内のポインタベースのオブジェクトのトラバーサルと管理を含め、ホストとデバイスのメモリ 間で移動させることができます。 フルディープコピー(full deep copy) を有効にすると、派生型の Fortran 変数をホストからデバイスまたはデバイスに移動するときに、ポインタと割り当て可能な配 列を含むデータ構造全体が、ホストとデバイス間、またはデバイスとホスト、メモリ間でコピーされ ます。 ディープコピーを有効にするには、オプション -ta=tesla に deepcopy サブオプション (-ta=tesla,deepcopy) を指定します。 注意すべき 2 つの点として、多型データ型はサポートされて おらず、重複するポインタが存在すると実行時エラーが発生する可能性があります。
cuSOLVER ライブラリは cuBLAS および cuSPARSE ライブラリをベースにしており、高密度行列、 スパース最小二乗ソルバおよび固有値ソルバの行列分解および三角解法ルーチンをサポートし、共分 散行列を持つ行列のシーケンスを解くのに役立つリファクタリングライブラリを提供します。 PGI が提供するインターフェイスモジュールと、PGI 17.7 以降にバンドルされている cuSOLVER ライブ ラリの PGI コンパイル済みバージョンを使用して、CUDA Fortran および OpenACC Fortran から最 適化された cuSolverDN type ルーチン群(cuSolverSP ならびに cuSolverRF type は今後のリリース で対応予定)を呼び出すことができるようになりました。 この同じ cuSolver ライブラリは、PGI コ ンパイラを使用して構築されており、また、PGI OpenMP ランタイムと互換性があるため、PGI OpenACC C/C++ からも呼び出すことができます。
■ 全ての PGI コンパイラ
PGI Linux/ 86-64 コンパイラに Beta 版 LLVM コードジェネレータと OpenMP ランタイムを追加し ました。 PGI Beta 版 コンパイラは、個別のダウンロードおよびインストールパッケージとして利用 できます。 プロダクション PGI コンパイラにはいくつかの制限がありますが、ベータ版にはすべて の OpenACC、CUDA Fortran、OpenMP 4.5 の機能が含まれており、多くの C++ アプリケーション でパフォーマンスが大幅に向上しています。 詳細については、「Beta 版 LLVM コードジェネレータ 」 を参照してください。
OpenMP 4.5 の構文と機能の初期サポートが追加されました。 PGI Fortran、C、および C++ コンパ イラは、マルチコア CPU またはサーバのすべてのコアで並列実行のために、ほとんどの OpenMP 4.5 プログラムをコンパイルするようになりました。 ターゲットリージョンはマルチコアホストをター ゲットとしてデフォルトでサポートされ、 parallel および distribute ループはすべての OpenMP ス レッドにわたって並列化されて実装されます。 この機能は、Beta 版 LLVM コードジェネレータのみ を使用する Linux/x86 プラットフォームでサポートされています。
-Minline オプションによるインライン化の改善。 以前のリリースよりも、このリリースでインライン 展開された別の関数が表示されることがあります。 インライン化された関数の数が増えるため、コ ンパイルが完了するまでにかなりの時間がかかることがあります。-Minline オプションに、
smallsize:number サブオプションを追加しました。これは、他のサイズ制限にかかわらず、number より小さいサイズの関数を常にインライン化するために使用できます。 プログラム分析サマリー出力(PASO)と呼ばれるプログラム探索のための新しい機能を追加しまし た。 PASO は、様々な編集段階の内部表現(IR)から収集された情報を、組織化された、人間が読 める形式でエクスポートすることを可能にします。 このデータは、プロジェクトを構成するすべて のファイルにまたがっているだけではなく、プログラムの内部構造の詳細な要約を構成します。 PASO を有効にするには、 -Msummary オプションを使用してコンパイルしてリンクします。 PASO の仕組みとその活用方法の詳細については、「要約出力を使用したプログラム分析」を参照してくだ さい。 PASO は、macOS を除く PGI がサポートするすべてのプラットフォームで利用できます。
■ C++コンパイラ LCALS ループのベンチマークの生のパフォーマンスを平均 20% 改善し、これらのループに関連する ラムダ抽象的なペナルティを排除しました。 OpenACC GPU アクセラレータ計算領域でのキャプチャ付きラムダのサポートを追加しました。 EDG 4.13 に準拠した C++17 フィーチャの一部のサポートを追加しました。 このサポートには以 下が含まれます: braced-init-list からの自動控除の新しい規則 テンプレートテンプレートパラメータリストでtypename を許可する 名前空間と列挙子の属性 u8 文字リテラル ネストされた名前空間定義 拡張static_assert 一般化された範囲ベース 廃止予定のレジスタキーワードを削除する 廃止予定のオペレーターを削除する++(bool) __has_include [[fallthrough]] [[nodiscard]] [[maybe_unused]] 16 進浮動小数点数 繰り返しのない属性名前空間を使用する 標準および非標準属性 GNU 6.3 との相互運用性のサポートが追加されました。 PGI C++ コンパイラのサポートが CUDA 9.0 NVCC ホストコンパイラとして追加されました。 ■ プロファイラ 次の新しいプロファイラ機能は、CUDA 9 でプロファイラを起動する場合にのみ有効です。PGI 17.7 で CUDA 9 を使用するには、 CUDAROOT オプションを CUDA 9 のインストール場所に設定してプ ロファイラを起動します。 たとえば、CUDA 9 が /opt/cuda-9.0 にインストールされている場合は、 プロファイラを起動するときに CUDAROOT=/opt/cuda-9.0 コンパイルオプションを追加します 。 強化された Unified Memory メモリプロファイリング ページスラッシング、スロットリング、およびリモートマップのための新しい統合メモリプ ロファイリングイベントが追加 ページスラッシング、スロットリング、およびリモートマップのための新しい統合メモリプ ロファイリングイベントが追加 セグメントと非セグメントのタイムラインの切り替えをサポート 仮想アドレス、移行理由またはページフォールトアクセスタイプに基づいてイベントのフィ
ルタリングを追加 記録された各イベントを要約した OpenACC の詳細テーブルを追加しました。 協調的なカーネル起動のプロファイリングのサポートが追加されました タイムラインに NVLink イベントを追加しました NVLink トポロジ・ダイアグラムにメモリスループットを追加しました マルチホップリモートプロファイリングで利用可能なオプションが増えました。 すべてのマルチコアシステムで OpenACC プロファイリングのサポートが追加されました ■ ドキュメンテーション す べ て の PGI コ ン パ イ ラ と ツ ー ル の HTML 形 式 の ド キ ュ メ ン ト を http://www.pgroup.com/resources/docs.php でオンラインで追加しました。 新しいフォーマットでは、 インターネットに接続されたシステムやデバイスを使用してPGI のドキュメントを検索または参照す ることが容易になります。 すべての文書の PDF 版も利用可能です。 ■ Operating Systems Fedora 25 と openSUSE 13.2 のサポートが追加されました。 PGI 17.5 update ■ Operating Systems
Ubuntu 17.04 と RHEL 6.9 Linux distributions をサポートしました。
■ CUDA Toolkit
Linux x86-64 上のオブジェクト・ファイルの順位に関する問題を解決する nvlink utility の更新を行い ました。
PGI 17.4 update
■ PGI Community Edition release for Windows 64bit
Windows 版の Community Edition(無償版)の最初のリリース。但し、コマンドラインインタフェー ス(PGI Workstation)のソフトウェアのみで、PGI Visual Fortran ソフトウェアは無償版としては提供い たしません。なお、Windows 版には、C++ コンパイラの提供はありません。Fortran/C のみとなりま す。
■ PGI Accelerator Compilers
デバイスコード内での Fortran 単精度複素数型に対する Atomic add and subtract 機能をサポ ート
浮動小数点マクロ isfinite, isnan, isinf, round 関数のデバイス・バージョン追加 CUDA Fortran warp-vote 演算のサポートを追加
デバイスコードをコンパイルする際に使用される -g 最適化レベルの挙動変更。ホストコード上では、 -O といった他の最適化オプションと共に使用されない限り、-g は、コンパイラ最適化レベルをゼロ にします。今回、デバイスコードにおいても同じ挙動とします。デバイスコードのためのデバッグ情 報の詳細については、PGI Compiler Reference Guid の DWARF Debug formats を参照下さい。 nvlink のバージョンを 8.0.73 に更新しました。このバージョンのデバイス・リンカーは、当該コマ ンドライン上で任意にオブジェクト・ファイルを記述することができます(順序による依存性がない と言うこと)。
■ PGI Tools
macOS versions 10.11 (El Capitan) and 10.12 (Sierra) 上での C++ プログラムのデバッグ機能の向上
PGI 17.3 update
■ PVF release for 2017 PVF 2017 の最初のリリース
■ macOS version 10.12 (Sierra)
macOS version 10.12 (Sierra)用のデバッガ機能を追加しました。
■ PGI C/C++ compiler plug-in for Eclipse
Eclipse versions Neon and Mars 用の PGI C/C++ compiler plug-in の更新。Linux x86-64 と OpenPOWER platform 用を提供しました。 PGI 17.1 update ■ 全ての PGI コンパイラ 浮動小数点除算演算について、スカラ計算とベクトル計算処理の両方で同じ結果になるように保 証するために演算方式を変更しました。この変更により、PGI 17.1 とそれ以前のバージョンでの 数値的な誤差が起こる場合があります。まれなケースですが、この変更により実行時間の増加が 見られることがあります。 -Minline オプションによるインライン機能を強化しました。以前のバージョンでインラインを実 施できていたルーチンや関数の違いが見えるかもしれません。あるケースでは、インライン可能 となる関数の増加に伴い、コンパイル時間が増加する場合もあります。また、-Minline の細かな 制御のためのサブオプションの幾つかは、以前のリリースとは異なるものもあります。 totalsize:n を追加しました。インラインする際の総サイズを n とします。n はファイルベ ースで考えた時の組み込むプログラムユニットのサイズを意味します。 サブオプションの変更として以前のsize:n を maxsize:n に変更しました。これは、約 n 行 未満の関数だけのインラインを許可するサブオプションとなります。以前のsize:n で指定 した場合は、コンパイラで自動的にmaxsize:n に変換して処理します。 levels:n サブオプションを廃止しました。このオプションは、関数の階層レベル n を指定し てインラインすることを指示するためのものでした。もし、これが指定されても、コンパ イラは無視します。 -Mpreprocess オプションのエイリアスとして、-cpp オプションを追加しました。 ■ PGI C++Compiler GCC 5.2, 5.3, 5.4, 6.0, 6.1, 6.2 との互換性を保つために、EDG release 4.11 との統合を 行いました。GCC 5.1 以降にサポートされた C++11 機能を利用するためには、PGC++コンパ イラ・オプションに--c++11 を指定してください。 C++14 を包括的にサポートしました。但し、サポートした C++14 機能を使用するためには GNU GCC 5.1 以上の実装環境が必要となります。pgc++コンパイラにて、C++14 機能を使用す るためには、--c++14 オプション を追加してコンパイルする必要があります。以下の機能を除 いた C++14 機能をサポートします。
variable templates
clarifying memory allocation (merged allocation)
pgc++コンパイラを nvcc host compiler として使用する場合、C++11 のサポートを追加しまし た。但し、この場合はパッチを実装したpost-CUDA-8.0-production version の nvcc が必要です。
[email protected]にお問い合わせください。
C++ の例外ハンドリングが機能向上しました。これに関連して、次のコンパイラ・オプション を廃止しました。--[no_]exceptions, --need_exception_spec, --sjlj_eh, --[no]zc_eh -M[no]variadic_macros を追加しました。これは、可変個引数マクロを許可したりしなかったり
するためのものです。デフォルトで許可されています。 --edg and –gnu オプションを廃止しました。
GNU は、バージョン 5.0 において GCC STL ヘッダーファイルを変更しました。この変更は、 以前の GCC バージョンでコンパイルされたコードとの互換性の問題が発生します。GCC 5.0 よ りも前に作成したオブジェクトとライブラリとの互換性をサポートするための対処策として、 -D_GLIBCXX_USE_CXX11_ABI=0 を付してコンパイルすることを進めています。これに関する 詳細な情報は、https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.htmlをご覧く ださい。
■ PGI Accelerator OpenACC Compilers CUDA7.0 のサポートを終了しました。
コンパイル時に使用されるCUDA Toolkit のデフォルトバージョンを 7.5 に変更しました。また、 明示的に8.0 Tooklit を使用したい場合は、-ta=tesla あるいは-Mcuda オプションに cuda8.0 のサ ブオプションを付加してください。
NVIDIA Compute capability 2.0 (Fermi) デバイス用の executable はデフォルトで生成されませ ん。明示的に -ta=tesla,cc20 で生成する必要があります。今後のリリースで、cc20 サブオプシ ョンは廃止される予定です。
OpenACC cache directive 内のデータ管理方法を強化し性能向上を行いました。 次の OpenACC 2.5 機能をサポートしました。
if_present clause を update directive に追加しました。これは、データが存在していない とき、ランタイムエラーからno operation に挙動を変えるためのものです。
新しいオプショナルなfinalize clause を exit data directive に追加しました。これは、動的 な参照カウントをゼロにセットするために使用します。
exit data directive の振る舞い方を、動的に参照カウントを減らすような挙動に変更しまし た。
新しい init, shutdown, set directives を追加しました。
デフォルトの async queue 値を得る、あるいはセットするための新しい API routines を 追加しました。
routine bind clause の新しい 定義をサポートしました。
_OPENACC の値を 201510 に変更しました。
以下の機能を除いて、OpenACC 2.5 機能を全てサポートしました。
2.0 の機能で nested parallelism と declare link 機能。また、cache 領域内で cache clause 変 数が別の変数を参照するために行う制約を追加しました。
■ PGI Tools
バンドルするJRE バージョンを 1.8.0_112 に更新しました。 PGDBG は、可変ロールオーバーライブラリをサポートしました。
distribution は、デフォルトでこのライブラリを含んでおりません。したがって、デバッガを使 用する際は、ncurses と互換性のあるライブラリをインストールする必要があります。
■ バンドルするライブラリの更新
全てのPGI 製品は、新しく customized OpenBLAS project source に基づいた BLAS / LAPACK ラ イブラリをバンドルしました。このライブラリをリンクするには、リンクオプションに -lblas -llapack を指定してください。なお、従来バンドルしてきた AMD ACML ライブラリのバンドル は廃止されました。
Linux 版の製品には、Open MPI 1.10.2 がバンドルされます。
PGI Network floating for Linux ライセン購入ユーザと PGI CDK ユーザは、別途、MVAPICH 2.2 な らびに MPICH 3.2 ライブラリのダウンロードが可能です。
PGI-built versions of NetCDF 4.4.1.1 and Parallel NetCDF 1.7.0 がオンラインでアクセス可能です。 PGI-built versions of the Earth System Modeling Framework (ESMF) 7.0.0(one per PGI-built MPI
distribution)がオンラインでアクセス可能です。
■ その他の機能、変更ポイント
サポートするLinux x86-64 operating systems として、Fedora 24, RHEL 7.3, Ubuntu 16.10 を追 加しました。
Microsoft Windows Server 2016 をサポートしました。
macOS version 10.12 (Sierra)をサポートしました。但し、この Sierra 上では、まだ、PGDBG デ バッガをサポートしていません。
PGI 2017 は、64-bit OS 用のコンパイラの提供となりました。32-bit 用のコンパイラの開発は 終息しました。
PGI 2017 の macOS 用のコンパイラには、PGI アクセラレータ機能(OpenACC, CUDA Fortran, CUDA-x86 running on CPUs)が含まれず、その機能の提供は終了しました。但し、OpenACC targeting multi-core CPUs の機能は、macOS を含み全てのコンパイラでサポートします。 PGI アクセラレータ機能で使用する CUDA toolkit として、7.0 toolkit のサポートを終了しました。 macOS 10.7 (Lion) and 10.8 (Mountain Lion)のサポートを終了しました。
■ PGI 2017 で廃止した機能、項目
PGI 2017 は、64-bit OS 用のコンパイラの提供となりました。32-bit 用のコンパイラの開発は 終息しました。
PGI 2017 の macOS 用のコンパイラには、PGI アクセラレータ機能(OpenACC, CUDA Fortran, CUDA-x86 running on CPUs)が含まれず、その機能の提供は終了しました。但し、OpenACC targeting multi-core CPUs の機能は、macOS を含み全てのコンパイラでサポートします。 PGI アクセラレータ機能で使用する CUDA toolkit として、7.0 toolkit のサポートを終了しました。 macOS 10.7 (Lion) and 10.8 (Mountain Lion)のサポートを終了しました。
2.2 PGI Accelerator OpenACC Compilers の新機能
CUDA Unified MemoryPGI 17.7 リリースでは、allocatable として割り付けられたデータ用の CUDA Unified Memory の使用がベー タ版からプロダクション版に移行しました。 この機能は、 OpenACC および CUDA Unified Memory
PGInsiderの記事で詳しく説明されており、Linux / x86-64 および Linux / OpenPOWER コンパイラで利用
できます。 Linux / x86-64 では、デフォルトの PGI コードジェネレータとベータ LLVM ベースのコードジ ェネレータの両方を使用してサポートされています。 この機能を有効にするには、オプション-ta=
tesla:managed をコンパイラおよびリンカのコマンドラインに追加します。
-ta= tesla:managed の場合、プログラム単位内のすべての C / C++、Fortran の明示的な割り当て文は、CUDA 統合メモリにデータを配置する同等の「管理された」データ割り当て呼び出しに置き換えられます。 管理 対象データはCPU / GPU の単一アドレスを共有し、CPU と GPU メモリ間のデータ移動は CUDA ドライバ によって暗黙的に処理されます。 したがって、OpenACC のデータ句とディレクティブは、「管理された」 データには必要ありません。 それらは本質的に無視され、実際には省略することができます。
プログラムが管理されたメモリを割り当てると、デバイスのメモリだけでなくホストの固定メモリも割り 当てられます。したがって、割り当てと解放の操作がやや高価になり、データの転送がやや高速になりま す。 メモリプールアロケータは、アロケートおよびフリーオペレーションのオーバーヘッドを軽減するた めに使用されます。 プールアロケータは -ta= tesla:managed または-ta= tesla:pinned に対してデフォル トで有効になっています。 PGI 17.7 リリースでは、 -Mcuda が存在するとプールアロケータが無効になり ます。 今後のリリースでその制限を解除する作業を進めています。
管理データのデータ移動は、NVIDIA CUDA GPU ドライバによって制御されます。 CPU または GPU 上で データにアクセスするたびに、最後にアクセスされたときに同じデバイス上にデータが転送される可能性 があります。 場合によっては、ページのスラッシングが発生し、パフォーマンスに影響を与えることがあ ります。 Parallel Forallでは、CUDA Unified Memory の概要を紹介しています。
この機能には次の制限があります。 管理対象メモリの使用は、動的に割り当てられたデータにのみ適用されます。静的データ(C 静的お よび外部変数、Fortran モジュール、共通ブロックおよび保存変数)および関数ローカルデータは、 OpenACC ランタイムによって処理されるため、従来通り、ユーザによるデータ移動管理が必要です。 動的に割り当てられた Fortran ローカル変数と Fortran 割り当て可能配列は暗黙的に管理されます が、Fortran 配列ポインタは管理されません。 ローカル、グローバル、または静的データを指すメンバを持つ割り当て可能な集合体を指定すると、 -ta= tesla:managed でコンパイルし、計算カーネルからそのポインタを介してメモリにアクセスしよ うとすると、実行時にエラーが発生します。 C ++仮想関数はサポートされていません。 ファイルに OpenACC コードがない場合でも、変数が割り当てられたファイルをコンパイルするには、 -ta= tesla:managed コンパイラ・オプションを使用する必要があります。
この機能には、NVIDIA Kepler GPU で使用するときに次の追加制限があります。
Kepler GPU 上のデータの動きは、高速の固定非同期データ転送によって実現されます。 しかし、プ ログラムの観点からは、転送は同期的です。
PGI ランタイムは、Keplar GPU を搭載したシステムで-ta= tesla:managed が使用されている場合、カ ーネルの同期実行を強制します。 このような状況は、余分な同期と CPU と GPU のオーバーラップの 減少により、パフォーマンスが低下する可能性があります。
管理されるメモリの総量は、Kepler GPU で利用可能なデバイスメモリの量に制限されています。 この機能は、NVIDIA Fermi GPU ではサポートされていません。
CUDA Unified Memory Pool Allocator
を使用して非ユニファイドメモリを割り当てるよりもオーバーヘッドが高いルーチンです。 cudaMallocManaged() の呼び出し回数が増えるほど、パフォーマンスへの影響が大きくなります。 cudaMallocManaged() 呼び出しのオーバーヘッドを軽減するために、-ta= tesla:managed および -ta= tesla:pinned は CUDA 統一メモリプールアロケータを使用して、cudaMallocManaged() への呼び出し回数 を最小限に抑えます。 プールアロケータは、デフォルトで有効になっています。 次の環境変数を使用し て無効にするか、動作を変更できます。 プールアロケータ環境変数 PGI_ACC_POOL_ALLOC プールアロケータを無効にします。 プールアロケータはデフォルト で有効になっています。 無効にするには、PGI_ACC_POOL_ALLOC を0 に設定します。 PGI_ACC_POOL_SIZE プールのサイズを設定します。 デフォルトのサイズは 1GB ですが、 他のサイズ(2GB、100MB、500KB など)を使用できます。 実際の プール・サイズは、フィボナッチ・シリーズのサイズが、提供され たサイズまたはデフォルトサイズと比較して、最も近い、より小さ い数になるように設定されます。 必要であれば、プールアロケータ はプールを追加しますが、PGI_ACC_POOL_THRESHOLD 値までしか 追加しません。 PGI_ACC_POOL_ALLOC_MAXSIZE 割り当ての最大サイズを設定します。 割り当てのデフォルトの最大 サイズは64B ですが、16B 以上であれば別のサイズ(つまり 100KB、 10MB、250MB など)を使用できます。 PGI_ACC_POOL_ALLOC_MINSIZE 割り当てブロックの最小サイズを設定します。 デフォルトサイズは 16B ですが、他のサイズを使用することもできます。 サイズは 16B 以上でなければなりません。 PGI_ACC_POOL_THRESHOLD プールアロケータが占めることができるデバイスメモリの合計の割 合を設定します。 デフォルトは 50%に設定されていますが、他のパ ーセンテージを使用することもできます。 Multicore Support
PGI アクセラレータ OpenACC コンパイラは、ターゲットを設定するためにオプション-ta = multicore を サポートしています。これは、OpenACC プログラムをマルチコア CPU 上で並列実行動作させる機能です。 これによって、並列実行のためのOpenACC 領域をホスト X86 プロセッサのコア全体にわたって並列実行 することができます。ホストのマルチコアは、「共有メモリアクセラレータ」として認識されます。従って、 copy、copyin、copyout、create 等の data clauses は無視され、データの移動は生じません。
デフォルトでは、OpenACC プログラムをマルチコア CPU あるいは マルチソケット CPU サーバの全 てのコアを利用した並列実行ができるようにコードが生成されます。もし、Compute 領域の中で num_gang clause の値が指定されている場合、num_gang の値のもっとも小さな値と有効なコア数が使用 されます。ランタイムにおいては、コア数はACC_NUM_CORES 環境変数に値をセットすることによって、 制限することができる。もし、OpenACC Compute 構文が OpenMP 構文内に現れるような場合、OpenACC Compute 領域はシーケンシャルコードとして生成されます。OpenACC Compute 構文が動的に OpenMP
領域内、あるいは、別のOpenACC Compute 領域に現れるような場合、プログラムは、存在するコア以上 の多くのスレッドを生成するかもしれません。その結果、性能が劣化する場合があります。
ACC_BIND 環境変数は-ta=multicore を指定した時にデフォルトでセットされます。ACC_BIND は、 OpenMP における MP_BIND と同じような機能を有します。
-ta=multicore オプションは、-ta=host オプションとは異なります。-ta=host は、OpenACC Compute 領 域に対して「シーケンシャルコード」を生成するものです。本リリースにおいては、-ta=multicore は -ta=tesla あるいは –ta=host と共に使用することはできません。
Default Compute Capabilituy
NVIDIA tesla ターゲットに対する OpenACC /CUDA Fortran コンパイル時のデフォルトの compute capability リストは、cc30、cc35、cc50 となります。これらの全てのコードが生成されます。もし、CUDA 8.0 が cuda8.0 サブオプションを使って指定された場合、cc60 も compute capability リストに追加され当 該コードも生成されます。デバイスコードの生成は時間が掛かる処理ですので注意が必要です。このデフ ォルト値をコマンドラインのオプションで指定することにより変更することが可能です。
これを変更するには、-ta=tesla: オプションに続いて、カンマで区切り compute capability を指定する ことにより可能です(CUDA Fortran の場合は、-Mcuda=の後にリストする)。
また、rcfile にてデフォルトの値を変更することもできます。PGI のインストレーションディレクトリの bin 配下の siterc ファイルの中に DEFCOMPUTECAP 値を以下のようにブランクをセパレータとして設定す ることで行います。
set DEFCOMPUTECAP=30 35 50
あるいは、siterc ファイルの変更がパーミッションの関係でできない場合は、自身のホームディレクト リの中に.mypgirc ファイル(Windows の場合は mypgi_rc ファイル)に DEFCOMPUTECAP 値をセットする ことでも可能です。
New OpenACC 2.5 でサポートしていない機能
PGI 2017 では、cache 領域内で cache clause 変数が別の変数を参照するための制約を設けた以外の OpenACC 2.5 機能を全て提供します。
New OpenACC 2.0 でサポートしていない機能
以下のOpenACC 2.0 機能は、現在、実装されていません。
The declare link directive for global data
Nested parallelism(p
arallel and kernels constructs within a parallel or kernels region)Support for Profiler / Trace Tool Interface
PGI コンパイラは、OpenACC Profiler/Trace Tools Interface の OpenACC 2.5 バージョンをサポートしてい ます。これは、OpenACC プログラムの性能情報を集めるために、PGI profiler によって使用されるインタ フェースです。
2.3 C++コンパイラ
■ C++ and OpenACCdata 構文と Compute リージョンに現れる以下に示すいくつかの制約があります。
Variable-length array(VLA:可変長配列)は、OpenACC データ節内ではサポートしません。VLA は、C++ Standard ではありません。 コンストラクタ、デストラクタを必要するクラス型の変数がdata clause 内に現れた場合、適切 に動作しません。 計算リージョン内では、「例外」は処理しません。 計算リージョン内の任意の関数コールはインライン展開しておかなければなりません。この中に は、I/O 処理や、クラス型の処理、ユーザ定義の処理、STL 関数、lambda 処理などの暗黙的に 行われるインライン処理も含みます。 ■ C++互換性 PGI 2017 リリースにおいて、C++の PGI 2016 以前のバージョンとのオブジェクトの互換性がありませ ん。以前のリリースで作成された全てのC++ソースファイルとライブラリは、PGI 2017 以降のオブジェ クト・ファイルとリンクする際、再コンパイルが必要です。 --- PGI 2017 C++オブジェクトは、以前のバージョンのものと互換性がありません。 --- PGI 17.1 以降、C++インタフェースを提供するオプション・ソフトウェア(全ての PGI 製品に含まれて いるMPI パッケージ)を使用する場合は、pgc++コンパイラを使って、コンパイル&リンクを行う必要が あります。影響するパッケージは、以下の通りです。 ESMF MPICH MVAPICH NetCDF Open MPI Parallel NetCDF ScaLAPACK
2.4 ランタイム・ライブラリ・ルーチンの新機能と変更点
PGI Accelerator コンパイラ用のランタイム・ライブラリ・ルーチンをサポートします。詳細は、PGI Compiler User’s Guide の” Using an Accelerator”章 をご参照下さい。
2.5 ライブラリ・インタフェース
PGI Fortran は、Fortran Module を使用して、C プログラムのインタフェースを export するライブラリへ のアクセスが可能です。これらのライブラリと関数の詳細は、PGI Compiler User’s Guide の 8 章をご参照下 さい。
2.6 Environment Modules
Linux 上で、Environment Modules パッケージ (例 the module load command)を使用する場合、PGI 2017 は、適切なmodule file を設定するためのスクリプトを提供しています。
2.7 Beta 版 LLVM コードジェネレータ
PGI 17.7 リリースには、LLVM コードジェネレータと OpenMP ランタイムを備えた PGI Linux / x86-64 コ ンパイラの最初のBeta 版が含まれています。 ベータ版には、PGI デバッガとプロファイラだけでなく、デ フォルトの PGI コンパイラに含まれるすべての言語とプログラミングモデルのサポートが含まれています。 PGI オプティマイザ、高速数学ライブラリ、Fortran ランタイムが含まれています。 PGI Beta コンパイラと ツールは、個別のダウンロードとインストールパッケージとして利用できます。 デフォルトの PGI x86-64 コンパイラと並行してインストールすることができます。
LLVM は、コンパイラとツールチェーン技術の集まりです。 LLVM プロジェクトは、多くの一般的な CPU 用のコードジェネレータと OpenMP ランタイムを提供します。 LLVM の詳細については、Web サイト www.llvm.org を参照してください。
Beta 版 LLVM コードジェネレータを使用した PGI Linux / x86-64 コンパイラは、ベータ版として提供され ており、 support@ pgroup.com および Web( www.pgicompilers.com)でサポートされています。 ご意見 をお待ちしております。
PGI Beta 版コンパイラを使用するには、bin ディレクトリを PATH に入れます。 PGI ベータコンパイラが デフォルトのPGI コンパイラとツールと並んでインストールされている場合は、デフォルトの PGI コンパイ ラをPATH に置き、コマンドラインオプション-Mllvm を使用してベータ版を呼び出すことができます。
コンパイルされたオブジェクト・ファイルと、デフォルトのPGI コンパイラと PGI ベータコンパイラを混 在させないように注意してください。 生成されたコードは互換性がありますが、OpenMP ランタイムライブ ラリは互換性がありません。
Beta LLVM コードジェネレータを使用した PGI Linux / x86-64 コンパイラで利用可能な機能:
最適化されたOpenMP アトミック
OpenMP 4.5 の機能(GPU オフロードを除く)。
一部のアプリケーションのパフォーマンスが、デフォルトのPGI x86-64 コードジェネレータと比較 して改善されました。
PGI beta 版の制限:
Linux でのみ利用可能です。 macOS や Windows では利用できません。
Fortran のデバッグは、ブレークポイント、コールスタック、および基本タイプに対してのみ使用で きます。
PGI Unified Binary は利用できません。
-Mipa オプションを使用したプロシージャ間最適化は使用できません。
CCFF 情報は利用できません。
一部のソースコードのディレクティブ( DEC $など)は効果がありません。
すべてではありませんが、C / C ++ + MMX / SSE / AVX 組み込み関数があります。
CUDA Fortran エミュレーションモード-Mcuda = emu は使用できません。
3. 配布と配置
3.1 アプリケーションの配置と再配布
PGI コンパイラで構築されたプログラムは、ランタイム・ライブラリ・ファイルを必要とする場合があ ります。PGI コンパイラがインストールされていないシステム上でこのようなプログラムを実行するよう な場合は、プログラムと共にランタイム・ライブラリ・ファイルも配布する必要があります。このために、 Linux ならびに Windows の OS プラットフォーム用の PGI 再配布用ファイルを提供しています。Windows 版では、Microsoft®の再配布ファイルも提供しています。
3.1. 1 PGI 再配布用ランタイムライブラリ
PGI 2017 リリースでは、ランタイムライブラリを含むディレクトリは以下のとおりです。15.x は、イ ンストールしたリビジョン番号を示します。
$PGI/linux86-64/17.x/REDIST
$PGI/win64/17.x/REDIST
これらのディレクトリには、PGI End-user License Agreement(EULA) の条項に基づいた PGI 2017 ライ センス契約によって再配布可能なPGI Linux ランタイムライブラリの共有オブジェクト・ファイル、ある いは、Windows ダイナミック・リンク・ライブラリ(DLL)が含まれます。PGI End-user License Agreement (EULA) の正式なコピーは、17.x ディレクトリ配下、doc 内に含まれております。
3.1.2 Linux 再配布用ランタイムライブラリ
Linux REDIST ディレクトリに中には、サポートする全ての(CPU)ターゲット用の PGI ランタイム・ラブ ラリの共有オブジェクト・ファイルが含まれています。これによって、PGI がサポートしている、ほとん どのLinux システム上で実行することが可能な実行モジュールと PGI ランタイムライブラリのパッケージ を作成することが可能となります。但し、このために必要な事項は、以下のとおりです。
実行モジュールを実行するエンドユーザは、ランタイムライブラリの場所(パス)の設定等、そのた めの適切な環境を構築しておくこと
Linux においては、PGI 共有オブジェクトの検索場所を指定するために LD_LIBRARY_PATH 環境変数 をセットすること。
3.1.3 Microsoft® 再配布用ランタイムライブラリ
Windows 上の PGI 製品は、Microsoft Open Tools を含みます。Microsoft Open Tools のディレクトリに は、”redist”と言うサブ・ディレクトリが存在します。PGI 2017 ライセンシーは、PGI End-user License Agreement を準用し、このディレクトリ内のファイルを再配布することができます。
Microsoft は、これらのランタイム用ファイルを含む vcredist_x86.exe と vcredist_x64.exe と言うインス トレーション・パッケージを提供しています。また、redist ディレクトリ内にも同じものが用意されてい ます。
4. 既知の制限事項
この章は、既知の制約事項や、ドキュメンテーションのエラー、修正事項等を含みます。4.1 プラットフォーム特有の制限事項
ここでは、各プラットフォーム別のコンパイラ制限事項について説明します。4.1.1 Linux
-mcmodel=medium オプションを使用してコンパイルしたオブジェクトを組み込むプログラムは、静 的に(Static に)リンクすることはできません。これは、linux86-64 環境における制約事項であり、 PGI コンパイラによる制約事項ではありません。4.1.2 Apple OS X
OS X プラットフォーム上では、 PGI 2017 コンパイラは、ユーザバイナリの静的リンク(Static linking) をサポートしません。今後の Apple 社のアップデートとの互換性のために、コンパイラは、ユーザバイナリのダイナミック・リンク方式(Dynamic linking)だけをサポートします。
4.1.3 Microsoft Windows
Cygwin の emacs エディターを適切に機能させるために、CYGWIN 環境変数に対して「tty」と言う値 をセットする必要があります。これは、emacs を起動するシェルを呼び出す前に、セットしておく 必要があります。しかしながら、この設定は、PGDBG をコマンドラインのインタフェースである – text オプションで起動したときに互換性がないため、アボートします。従って、この設定の場合は、 pgdbg –text のコマンドを使用できません。
Windows において、cygwin に含まれる vi のバージョンは、SHELL 変数に予期しないものが指定さ れている場合、問題が起きる可能性があります。このケースの場合、vi が起動される時、次のような メッセージを出力します。この問題を修復するには、SHELL 環境変数に対して cygwin の bin ディレ クトリの中のシェルを参照するように指定してください。(例 /bin/bash)
E79: Cannot expand wildcards Hit ENTER or type command to continue
Windows 上で、デバッギングのためにビルドされたランタイムライブラリ(例 msvcrtd と libcmtd) は、PGI Workstation には含まれていません。デバッグ用途のために、-g オプションを付けてコンパ イルするとき、PGI ランタイムライブラリと Microsoft ランタイムライブラリの両方の標準的な non-debug バージョンが、いつも使用されます。但し、この制約はアプリケーションコードのデバ ッギングに影響しません。
4.2 PGDBG に関する問題
PGDBG – PGI Unified Binaries(一つ以上の-tp ターゲットを指定して構築されたモジュール)のデバ ッギングは、フルにサポートされません。いくつかのサブプログラムの名前がunified binaries を生 成する過程で変更されています。PGDBG は、アプリケーションのソースコード内で使用されている プログラム名とこれら変更された名前との間の変換を行いません。デバッグにおいては、Unified Binaries 生成オプションを付けずに、native なプロセッサターゲットで実行モジュールを生成してく だ さ い 。 あ る い は 、 Unified Binaries の デ バ ッ グ を 行 う 方 法 に 関 し て は 、 http://www.pgroup.com/support/tools.htm に詳細な情報がありますので、ご参照下さい。 PGDBG デバッガは OS X version 10.12 (Sierra)上でまだサポートされておりません。 OS X 10.11(El Capitan)上でデバッグする際にいくつかの問題があります。デバッガはブレークポイ ントに到達した時に警告メッセージを出します。これらのメッセージはプログラムをデバッグするた めのデバッグ機能には影響しません。 Windows プラットフォーム上の PGDBG において、一つのブロックである「システムコール」を超え てシングル・ステップ実行したとき、Windows は stepi/nexti の動作をタイムアウトします。これを 改善する方法に関しては、オンライン www.pgroup.com/support/tools.htm の FAQ をご参照くださ い。
4.3 PGPROF に関する問題
PGI 2016 リリースにおいて全く新しい PGI profiling tool PGPROF を導入しました。
4.4 OpenACC に関する制限事項、問題
ここでは、OpenACC ディレクティブに関する制限事項を記します。PGI はこれらの制約を今後のリ リースにて改善する予定です。
Fortran 形状引継ぎ引数は、まだサポートされていません。 以下は、Cluase(節)の制約事項です。
device_type clause 後に指定する任意の clause はサポートされていません。
4.5 修正事項
多くの問題が、PGI 2017 で修正されました。TPR(Technical Problem Report) やその詳細については、
www.pgroup.com/support/release_tprs.htmをご覧下さい。解決した各問題のサマリーを記しております。
以 上 ※なお、文中で使用されている商品名、名称は、各社の商標あるいは登録商標です