PGI blue

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

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

Current Version

Product Name Version
PGI Professional Edition for Linux x86 19.1
PGI Professional Edition for Linux OpenPOWER 19.1
PGI Professional Edition for Windows (PGI 19.1 is not yet available) 18.10
PGI Visual Fortran for Windows (PGI 19.1 is not yet available) 18.10
PGI CDK for Linux (ご契約ユーザ様専用ページにて) 19.1
PGI Community Edition for Linux x86, Win64, OpenPOWER and macOS (2018/11/13版) 18.10

PGI製品のお求めは、米国 PGI と 25 年以上に及ぶ強力なパートナーであるソフテックへ

PGI 2019 (PGI 19.x) リリース

各リビジョンのサマリー

◎PGI 19.1 (released Jaunary 31, 2019)

  • CUDA Fortran は、NVIDIA GPU Tensor Coreをサポート
  • LLVM 7.0 バックエンドを Linux x86-64 上のデフォルトに変更
  • C++17 language standardをフルサポート
  • PCAST C and Fortran ディレクティブの提供
  • C/C++コンパイラにおいて、OpenACC 計算領域で printf() をサポート
  • Turing architecture GPUs をサポート
  • 多数のAVX2 intrinsic functionsの性能を向上
  • ベクトル化の強化
  • Fortran の ERROR STOP構文をサポート
  • GCC 8.1 との相互互換性
  • macOS Mojaveを含む最新のOS distribution をサポート
  • x86-64 platforms上のライセンス管理ユーティリティの更新
  • ユーザーが要求した28の enhancements and fixes

PGI 2019 リリースノート

重要: PGI 2019リリースには、最新の FlexNet Publisher バージョン 11.16.2 ライセンス管理ソフトウェアが含まれています 。 この新しいライセンス管理デーモンは、以前のバージョンの PGI コンパイラを動作させることができる下位互換性があります。 しかし、以前の PGI リリースにバンドルされた FlexNet 管理デーモンをそのまま使用した場合、 新 PGI 19.x は動作しません。必ず、PGI 19.1 以降のリリースにバンドルされた FlexNet ライセンスデーモンに入れ替えて利用してください。特に、ネットワーク・フローティング形式で利用する環境のライセンスマネージャは、過去のバージョンで利用していた lmgrd デーモンをそのまま使用してしまいがちですので、ご注意ください。

1. PGI 2019の新機能

2019年にリリースされた PGI 製品の新機能、変更された機能、廃止予定の機能、削除された機能をすべて網羅しています。

1.1 19.1の新機能

すべてのコンパイラ

  • LLVM バックエンドはバージョン 6.0 から 7.0 にアップグレードされ、当該リリースから Linux x86-64プラットフォーム用のデフォルトのコードジェネレータとなります。 これは重要な変更であり、 LLVMコードジェネレータのセクションで詳しく説明しています。
  • PGI 2019リリースには、最新の FlexNet Publisher バージョン 11.16.2 ライセンス管理ソフトウェアが含まれています 。 この新しいデーモンは、以前のバージョンのPGIコンパイラを動作させることができる下位互換性がありますが、PGI 19.1 以降のリリースおよび将来のリリースのPGIコンパイラは、以前の FlexNet デーモンと互換性がなく、少なくともバージョン 11.16.2 が必要です。
  • PCAST(PGIコンパイラ支援ソフトウェアテスト)は既存のライブラリ API 呼び出しと同等の C および Fortran ディレクティブをサポートしました。
  • 以下のバージョンのLinux/x86-64のサポートを追加しました。
    • CentOS 7.6
    • Fedora 29
    • RHEL 7.6
    • Ubuntu 18.10
  • Windows Server 2019とmacOS Mojaveのサポートを追加しました。

C/C++コンパイラ

  • Linux/x86-64プラットフォーム用の pgc++ コンパイラにおける SIMD組み込み関数のサポートを更新しました。SSE、SSE2、SSE3、SSSE3、SSE4.1、およびSSE4.2の組込み関数に対しては包括的にサポートされています。 AVX、AVX2、AVX-512 の組み込み関数の多くも実装されました。将来のリリースでは、AVX 組み込み関数に対する包括的なサポートを追加する予定です。
  • pgc++コンパイラは現在、C++17言語標準をフルサポートしました。

Fortran

  • ERROR STOPステートメントのサポートを追加しました。
  • CONTIGUOUS 動作を強制するためのランタイムチェックを追加しました。 これらのチェックは、CPU上で実行されているコードでのみ発生します。 特に、GPU上で実行されているコードでは発生しません。
  • Fortranのreshapeパフォーマンス、および C++ オブジェクトの派生型 C バインディングの処理が改善されました。

CUDA Fortranプログラムにおける NVIDIA GPU Tensor Cores の使用に対する初期サポートを追加しました。

C およびC++ コンパイラは、OpenACC 計算領域で printf() 文を使用してフォーマットされた出力をサポートするようになりました。 flag、width、precision、size、および type の最も一般的なフォーマット指定子がサポートされています。 OpenACC領域で printf() を使用すると、マルチコア CPU と GPU の両方で OpenACCアプリケーションを開発およびチューニングする際の基本的なデバッグおよびプログラマによるトレースに役立ちます。

Compute Capability 7.5 の Turing アーキテクチャーのサポートを追加しました。

システムに GPU または CUDA ドライバが見つからない場合、CUDA 9.2 がデフォルトのターゲットバージョンになりました。

従来の(OpenACC以前の)PGI Accelerator directives のサポートを削除しました。 この directives でコードをコンパイルしようとすると、警告ではなくエラーが発生するようになりました。

-Mcuda と -ta=tesla のサブオプション [no]llvm は、[no]nvvmに改名されました 。

-Mallocatable=03(18.7 以降のデフォルトの割り当て動作)でコンパイルしたときのサブカーネルに関連するバグ修正を含む、さまざまなコンパイラの改善、およびスカラ置換の最適化の改善を行いました。

以前にシリアル実行に使用されていたスレッドセーフではないバージョンを削除して、アクセラレータランタイムライブラリを統合統一しました。

パフォーマンス

AVX2以降のプロセッサ用のいくつかの組み込み関数、 sin、cos、log、log10、cexp、acos、ains、atan、tanhのパフォーマンスを向上しました。

メモリイディオム関数( mset、mcopy、mzero)のパフォーマンスが向上しました 。

すべてのCPUターゲットで SIMD コード生成のより多くの機会を認識するようにベクトル化機能が強化されました。

既知の問題と制限

MPIラッパー(mpicc、mpifortなど)に -M[no]llvmを渡すことはサポートされていません。 コンパイルすると、未解決のシンボルエラーやセグメンテーションエラーが発生します。

PGI 2019 以前のリリースをターゲットとするために、PGI 2019コンパイラで -V{version}(バージョン番号を指定してコンパイルする機能)はサポートしませんのでご注意ください。 これは、PGI 2019 コンパイラの デフォルトコードジェネレータとして LLVMコンパイラ を使用するように変更されたことによる既知の制限です。

OpenMPI 3.1.3 でビルドされた MPI ランクを1つだけ使用するプログラムは、直接起動するとハングします。mpirun(mpiexec)ラッパーを通して mpirun -np 1 ./executable でプログラムを実行するか、または 環境変数 OMPI_MCA_ess_singleton_isolated=1 を設定する必要があります。 これは、OpenMPIの 3.1.3 バージョンにおける既知の意図的な動作の変更です。

OpenACC と OpenMP の両方を使用する、クリティカル・セクションを使用する、OpenMP lock API の呼び出す、または I/O を実行する Fortran アプリケーションの OpenMP プロファイリングは、サポートしていません。 これらのアプリケーションのOpenACCプロファイリングは、 pgprofの ' --openmp-profiling off 'オプションで OpenMP プロファイリングを無効にすることで可能です。

廃止予定および廃止

CUDA 9.1 は、PGIコンパイラのインストールパッケージの一部として含まれなくなりました。

PGIコンパイラのインストールパッケージには、MPICH または MVAPICH のコンパイル済みバージョンは含まれていません。(以前は、PGI Professional Network floating ライセンスで、追加MPIライブラリとして提供していました)

pgf77 ドライバ は非推奨です。 F77 Fortran をコンパイルするには pgfortran を使用してください。

1.2. LLVMコードジェネレータ

Linux/x86-64 プラットフォーム用の PGI 2019 コンパイラは、デフォルトで LLVM ベースのコードジェネレータと OpenMP ランタイムライブラリを使用するようになりました。 一般的に、新しいコンパイラは、PGI 2018 以前のリリース(PGI独自のコードジェネレータと OpenMP ランタイムを使用)よりも優れたパフォーマンスを発揮します。 ただし、LLVM を使用する PGI 2019 コンパイラは、PGI 2018 およびそれ以前のリリースとリンク互換性がないため、以下に概説するように特定の制限があります。なお、PGI 独自のコードジェネレータと OpenMP の実装は、コンパイル時とリンク時のオプションを介して、または適切なパス設定を使用して、PGI 2019 コンパイラと一緒に使用することができます。

PGI 2019をインストールした後、次のサブディレクトリが、ベースインストールディレクトリに存在する形になります。

  • linux86-64/
  • linux86-64-llvm/
  • linux86-64-nollvm/

linux86-64-llvm/ には、デフォルトの LLVM ベースのコンパイラが含まれています。 linux86-64/19.x および linux86-64/2019 サブディレクトリは、 linux86-64-llvm/ の同等のものへのシンボリックリンクとなっています。 パス設定でこれらのディレクトリのどちらかが設定される場合は、PGIコンパイラのいずれかを呼び出すと、デフォルトで LLVM バックエンドコードジェネレータが使用されます。

linux86-64-nollvm/には、PGI独自のコードジェネレータと OpenMP ランタイムを使用するバージョンのコンパイラが含まれています。 どのコードジェネレータを使用するかを制御できます。特に、デフォルトをオーバーライドして、必要に応じて PGI 独自のコードジェネレータの使用に戻すことができます。 ただし、一般に、2つの異なるコードジェネレータでコンパイルされたオブジェクトファイルまたはライブラリを同じ実行可能ファイルに混在させることはできません。

LLVM ベースのコンパイラの場所が優先されるデフォルトの PGI 環境パス設定を使用している場合は、-Mnollvm オプションを使用してPGIコンパイラドライバのいずれかを呼び出すと、linux86-64-nollvm/19.x/bin にある独自のコードジェネレータを使用した PGI 2019 コンパイラのバージョンが選択されます。但し、 このオプションは、プログラム内のすべてのファイルとライブラリに対して、またコンパイル時とリンク時の両方のオプションとして使用する必要があります。

実装上は、必要に応じてlinux86-64-nollvm/19.1/binディレクトリを直接指すことができるように環境とパスが設計されています。この場合、PGIコンパイラドライバのすべての呼び出しでPGI独自のコードジェネレータが使用されます。その場合、 -Mllvm オプションを使用すると、LLVM ベースのコンパイラーの使用に切り替わります。これもコンパイルとリンクの両方に使用する必要があります。

一般には、linux86-64/19.1/bin を指すように環境とパスの設定を初期化し、 -M[no]llvm スイッチを使用して目的のバックエンドを切り替えることをお勧めします。 PGI 独自のコードジェネレータは、将来の PGI コンパイラのリリースで廃止予定です。

環境モジュール

ご使用の環境が PGI の環境モジュールファイル(Module)を使用するように設定されている場合は、次のコマンドを使用して、特定のリリースのデフォルトコードジェネレータを PGI コンパイラにロードします。

module load pgi/<リリース番号> 

PGI 19.1以降のすべてのリリースにおけるデフォルトのコードジェネレータはLLVMベースのコードジェネレータです。

module load pgi/19.1  

LLVMベースのコードジェネレータを選択します。 PGI 2018 およびそれ以前のすべてのリリースのデフォルトコードジェネレータはPGI独自のコードジェネレータで、LLVM はオプションで PGI 2018 で使用可能でした。

module load pgi/18.10 

PGI独自のコードジェネレータを選択します。

最初に pgi-llvm または pgi-nollvm のモジュールロードを実行し、続いて目的のバージョンのモジュールロードを実行することで、バージョンとバックエンドについて明確にすることができます。 例えば:

module load pgi-llvm
module load pgi/18.10

LLVMベースのコードジェネレータとOpenMPランタイムおよびPGI 18.10リリースを使用するように18.10のデフォルトを上書きして環境を初期化します。 同様に:

module load pgi-nollvm
module load pgi/19.1

PGI独自のコードジェネレータとOpenMPランタイムおよびPGI 19.1リリースを使用するように19.1のデフォルトを上書きして環境を初期化します。 その後、これらのコマンドでデフォルトのLLVMベースのコードジェネレータを使用するように切り替えることができます。

module purge
module load pgi/19.1

また、上記はモジュールアンロードおよびモジュールロードコマンドの適切な順序です。

制限事項

LLVMベースのコードジェネレータには、以下のような既知の制限がいくつかあります。

  • Linux/x86-64プラットフォームでのみ利用可能
  • 1つのバイナリ実行可能ファイルで複数の種類のCPUをターゲットにできる PGI Unified Binary 機能はサポートされていません。 -tp コンパイラオプションに複数のターゲットを指定した場合、エラーメッセージが表示され、コンパイルは失敗します。
  • プロシージャー間分析および最適化は実行されません。 -Mipa コンパイラー・オプションは、コンパイラー・ドライバーによってエラーなしで処理されますが、事実上無視されます。
  • DEC $などの一部のソースコード指令は効果がない場合があります。

2. リリースの概要

この章では、Linux、Apple macOS、およびMicrosoft Windowsオペレーティングシステムの各バージョンを実行している、64ビットx86 互換プロセッサベースのワークステーション、サーバー、およびクラスター用の PGI Accelerator コンパイラおよび開発ツールのリリース2019の概要を説明します。 

2.1. Licensing

すべてのPGI製品には、まったく同じPGIコンパイラおよびツールソフトウェアが含まれています。ライセンスキーによってどの機能が有効になっているかの違いとなります。

PGI 2019リリースには、最新の FlexNet Publisher バージョン 11.16.2 ライセンス管理ソフトウェアが含まれています 。 PGI 2018(18.x)以前のバージョンを使用するユーザーは、19.1 以降のサポートすのためにライセンスデーモンを更新する必要があります。 新しいライセンスデーモンは、古い PGIリリースと下位互換性があります。 詳しくは、FlexNet Update FAQ を参照してください 。

重要: PGI 2018(18.x)以前のユーザーは、ライセンスデーモンを更新して19.1以降をサポートする必要があります。 新しいライセンスデーモンは古いPGIリリースと下位互換性があります。 しかし、以前の PGI リリースにバンドルされた FlexNet デーモンをそのまま使用する場合、 新PGI 19.x は動作しません。必ず、PGI 19.1 以降のリリースにバンドルされた FlexNet ライセンスデーモンを更新(入れ替え)してください。 詳細については、 FlexNetアップデートFAQ を参照してください 。

2.1.1. ライセンス用語

PGIコンパイラとツールはライセンス管理されています。 ライセンスについて説明する前に、共通の用語について説明します。

  • Licenseエンドユーザ使用許諾契約書(EULA)で定義されているPGIコンパイラおよびツールを使用する権利で、これはNVIDIAとPGIのエンドユーザ間の法的な合意文章となります。 PGI Professional(有料、永続)ライセンスは、製品識別番号(PIN - 下記参照)で識別されます。 EULAのコピーは、 PGIのWebサイトおよび各PGIソフトウェアのインストールの $PGI/{platform}/{rel_number}/doc ディレクトリにあります。
  • License keysPGIソフトウェアの使用を可能にする ASCII テキスト文字列で、ライセンス条項を強制するものです。 PGI Professional の場合、ライセンスキーは PGI Web サイト上の各 PGI エンドユーザによって一意のホスト ID を使用して生成され、通常は PGI ソフトウェアのライセンスを取得したシステムからアクセス可能な license.dat ファイルに保存されます。
  • PIN製品識別番号 PGIプロフェッショナルライセンスに関連する固有の 6 桁の番号です。 PIN は、VENDOR_STRING= の後のライセンスキーファイルでも確認できます。
  • PIN CODE ライセンスに関連付けられた固有の16桁の数字で、他の人がそのライセンスをPGIユーザーアカウントに管理目的で「結び付ける」ことを可能にします。 PGIプロフェッショナルライセンシーは、PIN タイコードを使用して、ライセンス管理機能を他の人と共有することができます。

2.1.2. バンドルされたライセンスキー

PGI インストールディレクトリに license.dat ファイルが存在しない場合は、license.dat という名前の一時ライセンスキーファイルがインストールされます。

別のライセンスサーバー(たとえば、LM_LICENSE_FILE=port@server.domain.com )を使用する場合は、インストールディレクトリ上の license.dat を削除または名前を変更することをお勧めします。

2.1.3. ノードロックライセンスとネットワークフローティングライセンス

  • ノードロックされたシングルユーザーライセンスでは、一度に1人のユーザーが、PGI compilers and tools ならびに PGIライセンスサーバーの両方がインストールされているシステムでのみコンパイルできます。
  • ネットワークフローティングライセンスにより、1人または複数のユーザーが、ライセンスサーバー、つまりPGIネットワークフローティングライセンスキーがインストールされているシステムにネットワーク接続されている互換性のあるクライアントシステムで、PGI compilers and tools を同時に使用することができます。 ライセンスサーバーに接続された複数のクライアントシステム上にPGIコンパイラとツールをインストールすることができます。 クライアントシステムは、ライセンスサーバーに対してライセンスされている最大シート(ユーザ数)まで同時にライセンスを使用することができます。

2.2. リリースコンポーネント

リリース2019には、次のコンポーネントが含まれています。

  • PGFORTRAN™ native OpenMP and OpenACC Fortran 2003 compiler
  • PGCC®; native OpenMP and OpenACC ANSI C11 and K&R C compiler
  • PGC++® native OpenMP and OpenACC ANSI C++17 compiler
  • PGI Profiler® OpenACC, CUDA, OpenMP, and multi-thread graphical profiler
  • PGI Debugger® MPI, OpenMP, and multi-thread graphical debugger
  • Open MPI version 3.1.3 for 64-bit Linux including support for NVIDIA GPUDirect. 64ビットの linux86-64 MPI メッセージはそれぞれ 2 GBのサイズに制限されています。 NVIDIA GPUDirect は InfiniBand のサポートに依存しているため、Open MPIはInfiniBand ハードウェアがシステム上で使用可能な場合に使用するように構成されています。 InfiniBand のサポートには、OFED 3.18 以降が必要です。PGIノードロックライセンスは、最大16のローカルMPIプロセスのデバッグをサポートします。 PGIネットワークフローティングライセンスは、最大256のローカルまたはリモートのMPIプロセスをデバッグする機能を提供します。
  • Open MPIで使用する分散メモリシステム用の ScaLAPACK 2.0.2 線形代数演算ライブラリ(Intel 64またはAMD64 CPUベースの 64ビットLinux、macOS用)
  • Microsoft HPC Pack 2012 64ビット開発環境用MS-MPI再頒布可能パッケージ(バージョン4.1)(Windowsのみ)
  • カスタマイズされたOpenBLASプロジェクトソースに基づくBLASとLAPACKライブラリ
  • 64ビットWindowsプラットフォーム用のUNIXライクなシェル環境。
  • FlexNetライセンスユーティリティ
  • マニュアルページ形式とオンライン 、pgicompilers.com/docsの HTMLとPDF形式のマニュアル

2.3. 用語と定義

このドキュメントには、多くの用語と定義が含まれています。 これらの注記に慣れていない用語がある場合は、 PGIオンライン用語集を参照してください。

この2つの用語は、ドキュメント全体でプロセッサのグループを反映するために使用されています。

Intel 64
AMD64プロセッサとバイナリ互換に設計された拡張メモリ64ビットテクノロジ拡張機能を備えた64ビットIntelアーキテクチャプロセッサ。 これには、Intel Coreプロセッサ、Intel Xeon Nehalem、Sandy Bridge、Ivy Bridge、Haswell、Broadwell、Skylakeプロセッサ、Intel Xeon Phi Knights Landingを含む64ビットIntel x86-64 CPUが含まれます。
AMD64
Opteron および EPYC プロセッサを含む64ビットAMD™ x86-64 CPUが含まれます。

2.4. サポートプラットフォーム

x86-64プロセッサベースのシステム用のPGIコンパイラとツールでサポートされるプラットフォームは3つあります。

  • 64-bit Linux - 64ビットx86互換プロセッサで動作する64ビットLinuxオペレーティングシステムでサポートされています。
  • 64-bit macOS - 64ビットIntelベースのMacintoshコンピュータ上で動作する64ビットApple macOSオペレーティングシステムでサポートされています。
  • 64-bit Windows - 64ビットx86互換プロセッサで動作する64ビットMicrosoft Windowsオペレーティングシステムでサポートされます。

2.5. サポートされているオペレーティングシステムのアップデート

This section describes updates and changes to PGI 2019 that are specific to Linux, macOS, and Windows.

2.5.1. Linux

  • CentOS 6.4 ~ 7.6
  • Fedora 14 ~ 29
  • openSUSE Leap 42.2 ~ 15.0
  • RHEL 6.4 ~ 7.6
  • SLES 12 SP2 ~ SLES 15
  • Ubuntu 14.04, 16.04, 17.04, 17.10

2.5.2. Apple macOS

macOS用のPGI 2019は、Linux環境向けのバージョンのほとんどの機能をサポートしています。 これらのリリースノートやユーザーマニュアルに記載されている場合を除いて、macOS上のPGIコンパイラとツールはLinux対応のものと同じように機能します。

  • コンパイラ、デバッガ、およびプロファイラは、macOSバージョン10.10.5(Yosemite)から10.14( Mojave)までサポートされています。

2.5.3. Microsoft Windows

Windows用のPGI製品は、Linux環境用のPGI製品のほとんどの機能をサポートしています。 PGI製品では、コンパイラをインストールする前に、Windows 10ソフトウェア開発キット(SDK)を含む Visual Studio 2017 をインストールする必要があります。
注意: PGI 18.7 は、バンドルされた Microsoft ツールチェーンコンポーネントを含む、Windows 用の最終リリースです。 それ以降のリリースでは、Microsoftツールチェーンコンポーネントをシステムにプレインストールする必要があります。

注意: PGI 2019では、Windows 7, 8.1でも Windows 10 SDK が必要です。

これらのWindowsオペレーティングシステムは、PGI 2019でサポートされています。

  • Windows Server 2008 R2
  • Windows 7
  • Windows 8.1
  • Windows 10
  • Windows Server 2012
  • Windows Server 2016
  • Windows Server 2019

2.6. CUDA Toolkit Versions

PGIコンパイラは、NVIDIA GPUで実行するプログラムを構築する際に、NVIDIAのCUDAツールキットを使用します。 すべてのPGIインストールパッケージは、必要なCUDA Toolkitコンポーネントを2019/cudaというPGIインストールディレクトリに置かれます。

NVIDIA CUDAドライバは、そのシステムでGPU用にコンパイルされたプログラムを実行する前に、GPUを搭載したシステムにインストールする必要があります。 PGI製品にはCUDAドライバが含まれていません。 NVIDIAから適切なCUDAドライバをダウンロードしてインストールする必要があります。 CUDAドライバのバージョンは、少なくともコードをコンパイルしたCUDA Toolkitのバージョンと同じかあるいは新しいものでなければなりません。

PGIツール pgaccelinfo は、最初の出力行としてドライバのバージョンを表示します。 ご使用のシステムにどのバージョンのCUDAドライバがインストールされているかわからない場合に使用してください。

PGI 19.1 には、次のバージョンのCUDAツールキットが含まれています。

  • CUDA 9.2
  • CUDA 10.0

コンパイラに、使用するバージョンのCUDAツールキットを選択させるか、特定のバージョンを使用するように指示することができます。 このセクションの残りの部分では、すべてのオプションについて説明します。
CUDAツールキットのバージョンを指定しない場合、コンパイラは、コンパイルするシステムにインストールされている CUDA ドライバのバージョンを使用して、使用するCUDAツールキットを決定します。 この自動検出機能は、PGI 18.7 の新機能です。 自動検出は、同じシステムでアプリケーションをコンパイルして実行する場合に特に便利です。 これはどのように動作するのですか? 他の情報がない場合、コンパイラは、システムにインストールされている CUDA ドライバのバージョンと一致する PGI 2019/cuda ディレクトリ内の CUDA Toolkit バージョンを探します。 一致するものが見つからない場合、コンパイラは CUDA ドライバのバージョンより新しいものではない最新のCUDAツールキットのバージョンを検索します。 CUDAドライバがインストールされていない場合、PGI 19.1コンパイラはデフォルトの CUDA 9.2 に戻ります。 いくつかの例を見てみましょう。
インストールした唯一のPGIコンパイラがPGI 19.1ならば、

  • CUDA Driver が 10.0の場合、コンパイラは CUDA Toolkit 10.0 を使用します。
  • CUDA Driver が 9.2の場合、コンパイラは CUDA Toolkit 9.2 を使用します。
  • CUDA Driver が 9.1の場合、コンパイラは CUDA Toolkit 9.1 が見つからなかったというエラーを出します。 CUDA Toolkit 9.1 はPGI 19.1 にバンドルされていません。
  • コンパイルシステムにCUDAドライバがインストールされていない場合、コンパイラはCUDA Toolkitバージョン9.2を使用します。
  • CUDA Driver が CUDA 10.0より新しい場合、コンパイラは引き続き CUDAツールキット10.0 を使用します。 コンパイラは、CUDAドライバより新しいものではないと判明した、その最新のCUDAツールキットを選択します。

次のいずれかの方法を使用して、CUDA Toolkit バージョンのコンパイラのデフォルト選択を変更することができます。

  • コンパイラオプションを使用します。 cudaX.Y サブオプションを -Mcuda または -ta=tesla に設定します。XY は CUDA バージョンを表します。 たとえば、Cファイルを CUDA 9.2 Toolkitでコンパイルするには、次のようにします。
    pgcc -ta=tesla:cuda9.2
    コンパイラオプションを使用すると、コンパイラを1回呼び出すたびにCUDAツールキットのバージョンが変更されます。
  • rfile 変数を使用します。 DEFCUDAVERSION を定義する行を、インストールした際の PGI の bin/ディレクトリの siterc ファイル、またはホームディレクトリの .mypgirc という名前のファイルに追加します。 たとえば、CUDA 9.2 Toolkit をデフォルトとして指定するには、次のいずれかの行に次の行を追加します。
    set DEFCUDAVERSION=9.2;
    rcfile変数を使用すると、rcfile を読み取るコンパイラのすべての呼び出しに対して CUDA Toolkit のバージョンが変更されます。

CUDA Toolkit バージョンを指定すると、現在のPGIコンパイラにバンドルされているデフォルトとは異なる CUDA Toolkit インストールを使用するようにコンパイラに指示することもできます。 ほとんどのユーザーは、PGIで提供されているもの以外のCUDA Toolkitインストールを使用する必要はありませんが、この機能が必要な状況が発生します。 プレリリース CUDA ソフトウェアを使用している開発者は、PGI リリースに含まれていない CUDA ツールキットのバージョンでテストする必要があることがあります。 逆に、PGI リリースでインストールされた最も古いCUDAツールキットよりも古い CUDA ツールキットでコンパイルする必要がある開発者もいます。 これらのユーザのために、PGIコンパイラは、PGIインストールディレクトリの外にインストールされたCUDAツールキットのコンポーネントと相互運用できます。

PGIは、同時にインストールされたバージョンのCUDAツールキットを使用して広範にテストし、その使用を完全にサポートします。 PGIインストールに含まれていない CUDA Toolkit コンポーネントの使用は、機能性の違いが存在する可能性があることを理解して行われます。
PGIコンパイラでインストールされたバージョン以外の CUDAツールキットでコンパイルする機能は、すべてのプラットフォームでサポートされています。 Windows プラットフォームでは、この機能は CUDA Toolkit バージョン9.2 以降でサポートされています。

PGI 19.1を搭載したCUDA 8.0など、PGIリリースにインストールされていないCUDAツールキットを使用するには、3つのオプションがあります。

  • 基本デフォルトを上書きするには、rcfile 変数 DEFAULT_CUDA_HOME を使用します。
    set DEFAULT_CUDA_HOME=/opt/cuda-9.0;
  • 環境変数 CUDA_HOME を設定する
    export CUDA_HOME=/opt/cuda-9.0
  • コンパイラのコンパイル行の割り当て CUDA_HOME= を使用する
    pgfortran CUDA_HOME=/opt/cuda-9.0

PGIコンパイラは、使用する CUDAツールキットのバージョンを決定する際に、次の優先順位を使用します。

  1. 使用するCUDA Toolkit のバージョンをコンパイラーに指示しないと、コンパイラーは、システムにインストールされているCUDAドライバーのバージョンと一致する PGI インストール・ディレクトリ 2019/cuda から CUDA Toolkit を選択します。 PGIインストールディレクトリに直接一致が含まれていない場合は、そのディレクトリ内で CUDA ドライバのバージョンよりも新しいものではない最新のバージョンが使用されます。 システムにCUDAドライバがインストールされていない場合、コンパイラは内部デフォルトにフォールバックします。 PGI 19.1では、このデフォルトはCUDA 9.2です。
  2. rcfile 変数 DEFAULT_CUDA_HOME は、デフォルトのデフォルトを上書きします。
  3. 環境変数 CUDA_HOME は上記のすべてのデフォルトを上書きします。
  4. 環境変数 PGI_CUDA_HOME は上記のすべてを上書きします。 上級ユーザーが定義済みのCUDA_HOMEを上書きする必要がある場合に備えて利用できます。
  5. -Mcudaと-ta=tesla のユーザ指定の cudaX.Y サブオプションは、上記のデフォルトをすべて上書きし、PGIインストールディレクトリ 2019/cuda にある CUDA ツールキットが使用されます。
  6. コンパイラのコンパイル行の割り当て CUDA_HOME= は、上記のすべてのデフォルト(cudaX.Yサブオプションを含む)を上書きします。

2.7. Compute Capability

コンパイラは、NVIDIA GPU compute capability 3.0〜7.5 用のコードを生成できます。 コンパイラは、コンパイル時のシステムで検出された GPU のコンピューティング機能と一致する compute capability をデフォルトリストとして作成します。GPU が検出されない場合、コンパイラは cc35、 cc50、 cc60、および cc70を選択します。
コマンドラインオプションまたは rcfile を使用して、1つまたは複数のコンピューティング機能を指定することによって、デフォルトを上書きすることができます。
コマンドラインオプションを使用してデフォルトを変更するには、OpenACC の場合は -ta=tesla: に、CUDA Fortran の場合は -Mcuda= にcompute capability のカンマ区切りリストを入力します。
rcfile を使用してデフォルトを変更するには、インストールの bin ディレクトリにある siterc ファイルの DEFCOMPUTECAP 値を空白で区切ったcompute capability のリストに設定します。

set DEFCOMPUTECAP=60 70;

また、siterc ファイルを変更する権限がない場合は、ホームディレクトリの別の .mypgircファイル(Windows では mypgi_rc)に DEFCOMPUTECAP 定義を追加できます。
デバイスコードの生成には時間がかかることがあるため、コンピューティング機能の数が増えるとコンパイル時間が長くなることがあります。

2.8. コンパイル済みのオープンソースパッケージ

多くのオープンソースソフトウェアパッケージは、Linux x86-64上のPGIコンパイラで使用するために移植されています。

次のPGIコンパイル済みオープンソースソフトウェアパッケージは、PGI Linux x86-64 ダウンロードパッケージに含まれています。

  • OpenBLAS 0.3.3 - OpenBLASプロジェクトのソースに基づくカスタマイズされたBLASおよびLAPACKライブラリ。
  • Open MPI 3.1.3 - open-source MPI implementation.
  • ScaLAPACK 2.0.2 - 並列分散メモリ・マシン用の高性能線形代数ルーチンのライブラリ。 aLAPACKはOpen MPI 3.1.3を使用しています。

以下のオープンソースソフトウェアパッケージの一覧は、PGIコンパイラを使用してLinux x86-64ターゲットで実行するためにプリコンパイルされており、PGIのWebサイトからダウンロードできます。

  • ESMF 7.0.2 for Open MPI 2.1.2 - 気候、数値気象予測、データ同化、その他地球科学ソフトウェアアプリケーションを構築するための地球システムモデリングフレームワーク。
  • ESMF 7.0.2 for MPICH 3.2.
  • ESMF 7.0.2 for MVAPICH2 2.2.
  • SMF 7.1.0r for Open MPI 3.1.3 - 建物の気候、数値予報、データ同化、およびその他の地球科学ソフトウェアアプリケーションのための地球システムモデリングフレームワーク。NetCDF 4.6.2 for C++11 - C言語で書かれた、配列指向の科学データの作成、アクセス、および共有をサポートする一連のソフトウェアライブラリと自己記述型の、マシンに依存しないデータフォーマット。このパッケージは以下のコンポーネントからなります。
    • NetCDF-C++ 4.3.0 - NetCDFライブラリへのC ++インタフェース。
    • NetCDF-Fortran 4.4.4 -FortranはNetCDFライブラリへのインタフェースです。 libraries.
    • HDF5 1.10.1 - データを保存および管理するためのデータモデル、ライブラリ、およびファイル形式。
    • Parallel NetCDF 1.11.0 - Open MPI用3.1.3。
    • SZIP 2.1.1 - 拡張Riceロスレス圧縮アルゴリズム。
    • ZLIB 1.2.11 - ファイル圧縮ライブラリ。
  • NetCDF 4.6.2 for C++98 - 上記の NetCDF for C++11 にリストされているすべてのコンポーネントが含まれています。

さらに、これらのソフトウェアパッケージは、Linux x86-64上のPGIにも移植されていますが、ライセンスの制限により、PGIからバイナリ形式で直接入手することはできません。 PGIのWebサイトの「Porting&Tuning Guides」セクションを参照に、生成してください。

  • FFTW 2.1.5 - 高速フーリエ変換ライブラリのバージョン2には、Open MPI 3.1.3 で構築されたMPIバインディングが含まれています。
  • FFTW 3.3.7 - 高速フーリエ変換ライブラリのバージョン3には、Open MPI 3.1.3 で構築されたMPIバインディングが含まれています。

これらのパッケージやその他のパッケージのビルドの詳細については、PGIのWebサイトの「Porting&Tuning Guides」を参照してください。

2.9. Getting Started

デフォルトでは、PGI 2019コンパイラは、コンパイルが実行されるプロセッサ(CPU)のタイプ、コンパイルホストに最適化されたコードを生成します。 PGIコンパイラとツールに精通していない場合、デフォルトで使用する良いオプションは集約オプション-fastです。

集約オプションには、 SSE機能をサポートするターゲットに対して一般的に最適なフラグセットが組み込まれています。 これらのオプションには、 ベクトルストリーミング SIMD命令の使用を可能にする最適化オプションが組み込まれています 。 それらは、SSE命令、キャッシュアラインメント、およびフラッシュでベクトル化を可能にします。

注: -fastオプションの内容はホスト依存です。

次の表は、典型的な-fastオプションを示しています。

Table 2. Typical -fast Options
-O2 コード最適化レベルを2に指定します
-Munroll=c:1 ループをアンロールし、各繰り返し中に元のループの複数のインスタンスを実行します。
-Mnoframe スタックフレームを設定するコードを生成しないことを示します。 このオプションを使用すると、スタックトレースが機能しません。
-Mlre ループによって運ばれる冗長性の除去を示します。
-Mpre 部分的な冗長性の除去を示します。

-fastには、通常、次の表に示すオプションも含まれます。

Table 3. Additional -fast Options
-Mvect=simd パックされたSSEおよびAVX命令を生成します。
-Mcache_align 長いオブジェクトをキャッシュラインの境界に整列させます。
-Mflushz ゼロにフラッシングモードを設定します。

注意: SSEおよびAVX命令をサポートするプロセッサで最高のパフォーマンスを得るには、たとえ FORTRAN77コードであっても、PGFORTRANコンパイラを使用してください。

3. 配布と展開

アプリケーションのビルド、デバッグ、チューニングが完了したら、さまざまなシステムで実行する必要のあるユーザーに配布することができます。 このセクションでは、PGIコンパイラとツールを使用して構築されたアプリケーションを効果的に配布する方法について説明します。

3.1. アプリケーションの展開と再配布可能ファイル

PGIコンパイラで構築されたプログラムは、ランタイムライブラリファイルに依存することがあります。 これらのライブラリファイルは、PGIコンパイラがインストールされていないシステムで実行できるように、プログラムと共に配布する必要があります。 LinuxおよびWindows用のPGI再配布可能ファイルがあります。 Windowsでは、PGIはMicrosoftの再頒布可能ファイルも提供します。

3.1.1. PGIの再配布可能ファイル

PGI 2019リリースには、次のディレクトリが含まれています。(PGI 19.1 の場合)

  • $PGI/linux86-64/19.1/REDIST
  • $PGI/win64/19.1/REDIST

これらのディレクトリには 、PGIエンドユーザー使用許諾契約書(EULA)の条項に基づいてPGI 2019ライセンシーによって再配布されることができるすべてのPGI Linuxランタイムライブラリ共有オブジェクトファイルまたはWindowsダイナミックリンクライブラリが含まれています。 参考のために、PGI EULAのテキスト形式のコピーが19.1の docディレクトリに含まれています。

3.1.2. Linuxの再配布可能ファイル

Linux REDISTディレクトリには 、サポートされているすべてのターゲットのPGIランタイムライブラリ共有オブジェクトが含まれています。 これにより、PGIコンパイラーのユーザーは、以下の要件に従って、ほぼすべてのPGIサポート対象システムで正常に実行される実行可能ファイルおよびPGIランタイム・ライブラリーのパッケージを作成できます。

  • 実行可能ファイルのエンドユーザーは、環境を適切に初期化してください。
  • ユーザーは関連するバージョンの PGI 共有オブジェクトを使用するように LD_LIBRARY_PATH を設定します。

4.トラブルシューティングのヒントと既知の制限事項

このセクションには、既知の制限、マニュアルのエラー、および修正に関する情報が含まれています。 可能な限り、回避策が提供されます。

現在のリリースの最新情報については、PGIのよくある質問(FAQ) の Webページを参照してください。

4.1. プラットフォーム固有の問題

4.1.1. Linux

Linuxでの既知の問題は次のとおりです。

  • -mcmodel= mediumを使用してコンパイルされたオブジェクトファイルを組み込んだプログラムは、静的にリンクすることはできません。 これは linux86-64 環境の制限であり、PGIコンパイラとツールの制限ではありません。
  • MPIラッパー(mpicc、mpifortなど)に -M[no]llvm を渡すことはサポートされていません。 コンパイルすると、未解決のシンボルエラーやセグメンテーションエラーが発生します。
  • PGI 2019以前のリリースをターゲットとするために PGI 2019 コンパイラで -V を使用することはサポートされていません。 これは、PGI 2019 コンパイラのデフォルトコードジェネレータとして LLVMコ ンパイラを使用するように変更されたことによる既知の制限です。

4.1.2. Apple macOS

Apple macOSに関する既知の問題は次のとおりです。

  • PGI 2019コンパイラは、バイナリの静的リンクをサポートしていません。 将来のアップルアップデートとの互換性のために、コンパイラはバイナリのダイナミックリンクのみをサポートしています。

4.1.3. Microsoft Windows

Windowsでの既知の問題は次のとおりです。

  • Cygwinのemacsエディタが正しく機能するためには、 emacsを実行するシェルを起動する前に環境変数 CYGWIN を値 "tty"に設定する必要があります。 ただし、この設定はPGBDGコマンドラインインターフェイス( -text )と互換性がないため、この設定を使用してシェルでpgdbg -textを使用することはできません。
  • Windowsでは、SHELL 変数が期待できないものに定義されている場合、Cygwinに含まれているviのバージョンに問題が生じる可能性があります。 この場合、vi が呼び出されると、次のメッセージが表示されます。

    E79: Cannot expand wildcards Hit ENTER or type command to continue

    この問題を回避するには、SHELLを Cygwin bin ディレクトリのシェルを参照するように設定します(例: /bin/bash)。

  • Windowsでは、デバッグ用に構築されたランタイムライブラリ( msvcrtdやlibcmtdなど)はPGI製品には含まれていません。 プログラムが -g でリンクされている場合 、デバッグのために、PGIランタイムライブラリと Microsoft ランタイムライブラリの標準以外のデバッグバージョンが常に使用されます。 この制限は、アプリケーションコードのデバッグには影響しません。

4.2. デバッグに関する問題

PGIデバッガの既知の問題は次のとおりです。

  • PGI Unified Binaries のデバッグ、つまり複数の -tpオプションで構築されたプログラムは、完全にはサポートされていません。 一部のサブプログラムの名前はコンパイル時に変更され、デバッガはこれらの名前をアプリケーションのソースコードで使用されている名前に変換しません。
  • Windowsプラットフォームでデバッグする場合、Windowsオペレーティングシステムは、ブロックされたシステムコールを1回ステップオーバーすると stepi/nexti 操作をタイムアウトします。

4.3. プロファイラ関連の問題

PGIプロファイラに関するいくつかの特定の問題:

  • プロファイラは 'dlsym'を直接呼び出すことができます。 このシステムコールがプロファイリングされるプログラムまたは他のライブラリによってインターセプトされると、プロファイラは起動時にハングする可能性があります。MPIの実装によっては、この問題が発生しました。--cpu-profiling off オプションを使用して、'dlsym' システムコールを傍受している機能やCPUプロファイリングを無効にする機能を無効にすることをお勧めします。
    • IBMのスペクトル MPI を使用するときに 'dlsym'インターセプトを無効にするには、 -gpu オプションを省略し、 -x PAMI_DISABLE_CUDA_HOOK=1 および -disbale_gpu_hooks オプションを追加します。

4.4. OpenACCの問題

このセクションには、OpenACC指令に対するPGIのサポートの既知の制限事項が含まれています。 PGIは、将来のリリースでこれらの機能をサポートする予定です。

ACC routineディレクティブの制限

Clause Support制限

  • device_type句の後にすべての句がサポートされるわけではありません。

通知

NVIDIAのすべての設計仕様、参考文献、ファイル、図、診断情報、リスト、およびその他の資料(「資料」は「現状のまま」で提供されています」。 NVIDIAは、本資料に関する明示的、黙示的、法的、またはその他の保証をするものではなく、明示的に非侵害性、商品性、および特定目的への適合性に関する一切の保証を否認します。

提供される情報は正確かつ信頼できるものと考えられています。 ただし、NVIDIA Corporationは、そのような情報の使用の結果、またはその使用に起因する可能性がある特許権の侵害または第三者のその他の権利について一切の責任を負いません。 NVIDIA Corporationの特許権の下で、それ以外の意味でのライセンスは付与されません。 本書に記載されている仕様は、予告なしに変更されることがあります。 この出版物は、以前に提供された他のすべての情報に取って代わるものであり、置き換えられます。 NVIDIA Corporation製品は、NVIDIA Corporationの書面による明示的な承認なしに、システムの重要なコンポーネントとして承認されていません。

商標

NVIDIA、NVIDIAロゴ、クラスタ開発キット、PGC++、PGCC、PGDBG、PGF77、PGF90、PGF95、PGFORTRAN、PGHPF、PGI、PGIアクセラレータ、PGI CDK、PGI Server、PGI Unified Binary、PGI Visual Fortran、PGI Worksation、PGPROF、 PGROUP、PVF、および The Portland Group は、米国およびその他の国における NVIDIA Corporationの 商標または登録商標です。 その他の会社名および製品名は、それらが関連付けられている各社の商標です。

著作権

(c) 2013 - 2019 NVIDIA Corporation。 全著作権所有

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