PGIトップ › PGIサポートセンター › PGIリリースノート

ソフテックは、PGI 製品の公認正規代理店です

PGI 2017 コンパイラ製品 リリースノート

support

 NVIDIA 社 PGI の PGIコンパイラ製品のバージョンPGI 2017 (PGI 17.x) をリリースしましたのでお知らせいたします。本リリースにおける製品の主な新機能、特徴に関してPDFファイルに記述しておりますので、詳細は、以下のPDFファイルをご覧下さい。なお、ソフトウェアは こちらのページにてダウンロード可能です。
 現在の最新バージョンは、PGI 2017(旧バージョン形式で言うと PGI 17.x) となります。年間サブスクリプション契約をご購入あるいはご継続中のお客様は、新リリースのソフトウェアをダウンロードの上、インストールをお願いいたします。「バージョンアップの方法」や最新の「日本語インストールの手引き」は、お客様専用のページへご案内いたしますので、そのページをお分かりにならない場合は、弊社 support@softek.co.jp までご連絡下さい。

Current Version

製品名 現バージョン
PGI Professional Edition for Linux x86 17.10
PGI Professional Edition for Linux OpenPOWER 17.10
PGI Professional Edition for Windows 17.10
PGI Visual Fortran for Windows 17.10
PGI CDK for Linux (ご契約ユーザ様専用ページにて) 17.10
PGI Community Edition for Linux x86, Win64, OpenPOWER and macOS (2017/11/2版) 17.10
PGI製品のお求めは、米国 PGI と 25 年以上に及ぶ強力なパートナーであるソフテックへ

▶ PGI 2017 (PGI 17.x) リリースノート(PDF)

PGI コンパイラ製品の最新バージョン(Release 2017) の日本語版リリースノートについては、PDFファイルをご覧下さい。
英語版のリリースノートは、こちらをご覧下さい

PDF

【PGI 2017 機能廃止項目】

  • 32ビット用のコンパイラソフトウェアの提供は 2017年以降は行なわず 64ビット専用コンパイラの提供のみとなりました。
  • Apple OS X 版の PGI Accelerator 機能(CUDA Fortran、OpenACC、CUDA-x86)は、2017年リリース版から提供していませんのでご注意ください。
  • CUDA 7.0 toolkit はサポートしません。

PGI 17.10 (2017年11月)

■ PGI Community Edition 2017 (最新無償バージョン)

■ PGIアクセラレータコンパイラ

  • CUDA Toolkit 9.0の公式リリースの統合完全サポート。 CUDA 9.0 のワープシャッフル命令の変更を含む PGI 17.9 の制限を解決しました。CUDA 7.5 がデフォルト使用されます。 代わりに CUDA 8.0 または CUDA 9.0 を使用するには、-ta = tesla または -Mcuda のコンパイル時およびリンク時のオプションに cuda8.0 または cuda9.0 のサブオプションを追加します。
  • CUDA Fortran の CUDA 9.0 協調グループの初期サポートを実装しました。 詳細については、「CUDA Fortranプログラミングガイド」を参照してください。

■ OpenMP 4.5

  • firstprivate と lastprivate 以外の OpenMP 4.5 taskloop 構造体とそのすべての clause のサポートを実装しました。 OpenMP 4.5プログラムは現在、マルチコア CPU またはサーバのすべてのコアで並列実行をサポートしています。 OpenMP 4.5 は Linux/x86 上で Beta LLVM コードジェネレータでサポートされています。

■ Linux 用 PGI-built Open MPI libraries を version 2.1.2 に更新

■ macOS High Sierra 10.13 と Xcode 9 をサポート

18個の機能強化あるいはバグフィックス

PGI 17.9 (2017年9月)

■ 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リリースで修正される予定です。

27個の機能強化あるいはバグフィックス

PGI 17.7 (2017年7月)

■ 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 を指定します 。
      (一例)
      pgcc -fast -Minfo -acc -ta=tesla,cc70,cuda9.0 CUDAROOT=/opt/local/cuda-9.0 openacc_test.c
      
    • さらに、サブオプション 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 変数をホストからデバイスまたはデバイスからホストに移動するときに、ポインタと割り当て可能な配列を含むデータ構造全体が、ホストとデバイス間、またはデバイスとホストのメモリ間でコピーされます。 deep copy を有効にするには、オプション -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コードジェネレータ 」を参照してください。Beta版のダウンロード場所は、こちらです
  • OpenMP 4.5 の構文と機能の初期サポートが追加されました。 PGI Fortran、C、および C++ コンパイラは、マルチコア CPU またはサーバのすべてのコアで並列実行のために、ほとんどのOpenMP 4.5 プログラムをコンパイルするようになりました。 target リージョンはマルチコアホストをターゲットとしてデフォルトでサポートされ、 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/local/cuda-9.0 にインストールされている場合は、プロファイラを起動するときに CUDAROOT=/opt/local/cuda-9.0 コンパイルオプションを追加します 。

  • 強化された Unified Memory プロファイリング:
    • Unified Memory イベント/ CPUページフォルトとメモリ割り当てのソース位置との間の関連付けを追加
    • ページスラッシング、スロットリング、およびリモートマップのための新しい統合メモリプロファイリングイベントが追加
    • セグメントと非セグメントのタイムラインの切り替えをサポート
    • 仮想アドレス、移行理由またはページフォールトアクセスタイプに基づいてイベントのフィルタリングを追加
  • 記録された各イベントを要約したOpenACCの詳細テーブルを追加しました。
  • 協調的なカーネル起動のプロファイリングのサポートが追加されました。
  • タイムラインにNVLinkイベントを追加しました。
  • NVLinkトポロジ・ダイアグラムにメモリスループットを追加しました。
  • マルチホップリモートプロファイリングで利用可能なオプションが増えました。
  • すべてのマルチコアシステムでOpenACCプロファイリングのサポートが追加されました。

■ ドキュメンテーション

  • すべてのPGIコンパイラとツールのHTML形式のドキュメントをhttp://www.pgroup.com/resources/docs.phpでオンラインで追加しました。 新しいフォーマットでは、インターネットに接続されたシステムやデバイスを使用してPGIのドキュメントを検索または参照することが容易になります。 すべての文書のPDF版も利用可能です。

■ Operating Systems

  • Fedora 25とopenSUSE 13.2のサポートが追加されました。

43個の機能強化あるいはバグフィックス

【CUDA Unified Memory について】

PGI 17.7リリースでは、allocatable として割り付けられたデータ用の CUDA Unified Memory の使用がベータ版からプロダクション版に移行しました。 この機能は、 OpenACC および CUDA Unified Memory PGInsider の記事で詳しく説明されており、Linux/x86-64 および Linux/OpenPOWER コンパイラで利用できます。 Linux/x86-64 では、デフォルトの PGI コードジェネレータと Beta版 LLVMベースのコードジェネレータの両方を使用してサポートされています。 この機能を有効にするには、オプション -ta=tesla:managed をコンパイラおよびリンカのコマンドラインに追加します。

-ta=tesla:managed の場合、プログラム単位内のすべての C/C++、Fortran の明示的な allocate 文は、CUDA Unified Memory 上にデータを配置する同等の「管理された」データ割り当て呼び出しに置き換えられます。 管理対象データは 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 runtime は、Keplar GPU を搭載したシステムで-ta= tesla:managed が使用されている場合、カーネルの同期実行を強制します。 このような状況は、余分な同期と CPU とGPU のオーバーラップの減少により、パフォーマンスが低下する可能性があります。
  • 管理されるメモリの総量は、Kepler GPU で利用可能なデバイスメモリの量に制限されています。

この機能は、NVIDIA Fermi GPU ではサポートされていません。

CUDA Unified Memory Pool Allocator

動的メモリ割り当ては、cudaMallocManaged)を使用して行われます。このルーチンは、cudaMalloc() を使用して非ユニファイドメモリを割り当てるよりもオーバーヘッドが高いルーチンです。 cudaMallocManaged() の呼び出し回数が増えるほど、パフォーマンスへの影響が大きくなります。

cudaMallocManaged() 呼び出しのオーバーヘッドを軽減するために、-ta= tesla:managed および -ta=tesla:pinned は CUDA Unified Memory プールアロケータを使用して、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%に設定されていますが、他のパーセンテージを使用することもできます。

【Beta版 LLVM コードジェネレータについて】

PGI 17.7リリースには、LLVM コードジェネレータと OpenMP runtime を備えた 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(http://www.pgicompilers.com/userforum/index.php)でサポートされています。 ご意見をお待ちしております。

PGI Beta版 コンパイラを使用するには、bin ディレクトリを PATH に入れます。 PGI Beta 版コンパイラがデフォルトの 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は使用できません

PGI 17.5 (2017年5月)

■ Operating Systems

  • Ubuntu 17.04 と RHEL 6.9 Linux distributionsをサポートしました。

■ CUDA Toolkit

  • Linux x86-64 上のオブジェクトファイルの順位に関する問題を解決する nvlink utility の更新を行なった

12個の機能強化あるいはバグフィックス

PGI 17.4 (2017年4月)

■ PGI Community Edition release for Windows 64bit

■ 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++ プログラムのデバッグ機能の向上

20個の機能強化あるいはバグフィックス

PGI 17.3 (2017年3月)

■ 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用を提供。

34個の機能強化あるいはバグフィックス

PGI 17.1 (2017年2月)

■ PGI Accelerator OpenACC Compilers for NVIDIA GPUs

  • 包括的に OpenACC 2.5 をサポート。新たな OpenACC 2.5 機能は以下の通り。
    • if_present clause を update directive に追加しました。これは、データが存在していないとき、ランタイムエラーから no operation に挙動を変えるためのものです。
    • 新しいオプショナルな finalize clause を exit data directive に追加しました。これは、動的な参照カウントをゼロにセットするために使用します。
    • 新しい init, shutdown, set directives を追加しました。
    • デフォルトの async queue 値を得る、あるいはセットするための新しい API routines を追加しました。
    • 新しい定義による routine bind clause をサポートしました。
    • _OPENACC の値を 201510に変更しました。
  • OpenACC 挙動の変更事項
    • exit data directive の振る舞い方を、動的に参照カウントを減らすような挙動に変更しました。
  • OpenACC cache directive 内のデータ管理方法を強化し性能向上を行いました。
  • CUDA 8.0 をサポートし、CUDA 7.5 がデフォルトとなりました。
  • NVIDIA Compute capability 2.0 (Fermi) デバイス用の executable はデフォルトで生成されません。明示的に -ta=tesla,cc20 で生成する必要があります。今後のリリースで、cc20サブオプションは廃止される予定です。

■ 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を包括的にサポートしました。但し、GCC version 5.1以上の環境が必要となります。 GCC 5.1 ~ 6.2 まで ABI 互換性を有します。
  • nvcc host compiler として使用する場合、C++11のサポートを追加しました。但し、この場合はパッチを実装したpost-CUDA-8.0-production versionの nvcc が必要です。sales@pgroup.comにお問い合わせください。
  • 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 Fortran Compiler for OpenPOWER CPUs

  • インテンシブな浮動小数点コードの性能が PGI 16.10 に比べて平均 5~10% 向上しました。
  • OpenPOWER CPU上で OpenMP 4.5 のプリリミナリ・サポート、但し、GPU offload 機能はまだサポートしていません。

■ 全ての PGI Compilers

  • 浮動小数点除算演算について、スカラ計算とベクトル計算処理の両方で同じ結果になるように保証するために演算方式を変更しました。この変更により、PGI 17.1とそれ以前のバージョンでの数値的な誤差が起こる場合があります。まれなケースですが、この変更により実行時間の増加が見られることがあります。
  • Intel Haswell and Broadwell x86 CPUsに対する最適化された数値数学組み込み関数を追加しました。
  • -Minlineオプションによるインライン機能を強化しました。以前のバージョンでインラインを実施できていたルーチンや関数の違いが見えるかもしれません。あるケースでは、インライン可能となる関数の増加に伴い、コンパイル時間が増加する場合もあります。また、-Minlineの細かな制御のためのサブオプションの幾つかは、以前のリリースとは異なるものもあります。
    • totalsize:nを追加しました。インラインする際の総サイズをnとします。n はファイルベースで考えた時の組み込むプログラムユニットのサイズを意味します。
    • サブオプションの変更として以前のsize:nをmaxsize:nに変更しました。これは、約n行未満の関数だけのインラインを許可するサブオプションとなります。以前のsize:nで指定した場合は、コンパイラで自動的にmaxsize:nに変換して処理します。
    • levels:nサブオプションを廃止しました。このオプションは、関数の階層レベルnを指定してインラインすることを指示するためのものでした。もし、これが指定されても、コンパイラは無視します。
  • -Mpreprocess オプションのエイリアスとして、-cppオプションを追加しました。

■ PGI ツール

  • PGDBGは、可変ロールオーバーライブラリをサポートしました。
  • macOS 10.12 Sierra 上の PGDBG は現在のところサポートしておりません。OS X 10.9(Mavericks) から 10.11 (El Capitan)上ではサポートしております。
  • バンドルするJREバージョンを 1.8.0_112に更新しました。
  • PGDBGデバッガは、libncurses.so.5ライブラリを必要とします。Fedora 24のような新しいLinux distributionは、デフォルトでこのライブラリを含んでおりません。したがって、デバッガを使用する際は、ncurses と互換性のあるライブラリをインストールする必要があります。

■ ライブラリ

■ 検証済み使用可能プラットフォームの追加、その他

■ 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)のサポートを終了しました。

32個の機能強化あるいはバグフィックス

▶ 過去のバージョンのリリースノート