PRODUCTS GPU関連製品GPGPU開発支援ツール

NVIDIA GPU用のコード生成機能を有する PGI マルチコア最適化並列コンパイラ

PGI製品構成

マルチコア対応並列コンパイラ

 PGIコンパイラ は、HPC とコンパイラ技術で長い経験を有する The Portland Group Inc (PGI) 社の科学技術並びにエンジニアリング分野におけるフラグシップ・コンパイラです。また、多くの商用アプリケーション、Gaussian、STAR-CD 等の科学技術計算用の ISV ソフトウェアのベース・コンパイラとして活用され、多くの実績を残しております。
 インテル®ならびに AMD™ のプロセッサ用に、各マイクロアーキテクチャに応じた最適化コードを生成できます。また、32ビットあるいは64ビットの OS のもとで、マルチコア・プロセッサ用の並列化が可能なハイ・パフォーマンス自動並列化コンパイラです。

GPU対応コンパイラ

 上記、x86、x64用の PGIコンパイラ・システムの上に、NVIDIA 社の GPU 用にコード生成が可能な機能を追加した PGI Accelerator コンパイラ製品は、CUDA開発環境を実装したシステム上で、GPU を活用するためのコンパイラとプログラム開発環境を提供します。


PGI Accelerator Fortran/C/C++ コンパイラ製品 (x64+GPU) の主な機能

  1. インテル® 並びに AMD のマルチコア・プロセッサ(x86、x64)用の並列・最適化コンパイラ機能
  2. ディレクティブ挿入による x64+GPU 用実行バイナリの自動生成機能(Fortran と C99 のみ)
    PGI CUDA Fortran 機能
  3. CUDA C/C++ プログラムを GPU を有しないマルチコア x64 プロセッサ上で動作させる機能

PGI Accelerator Compiler機能


各機能を使用するには、コンパイラ・コマンドのオプションで機能を切り替えるだけ!

PGIコンパイラの各翻訳機能は、コマンドのオプションで指定することによって切り替えることができます。x64+GPU 用実行モジュールを生成するために、複雑なコマンド操作は必要ありません。

PGI compilerコマンド・オプション


PGI Accelerator Fortran and C99(ディレクティブ指示)の例

PGIアクセラレータ・プログラミングモデルは、従来のプログラムの中の CUDA 並列化対象となるループをディレクティブ(プラグマ)で指示して、x64+GPU用のコードを自動的に生成するためのプログラミングモデルです。例えば、以下の Fortran 例のように、CUDA並列化対象となるループ領域を指示すると、コンパイラは、ホスト側とGPU側の実行に必要なコードを生成します。なお、この機能は PGI C++ コンパイラではサポートせず、PGI Accelerator 製品の中の Fortran 並びに C99 言語コンパイラでその機能を提供します。

PGI AcceleratorCompiler

以下のように、-Minfo=accel オプション指定で、CUDA並列化対象ループのコンパイラ翻訳情報により、CUDA並列化の実装詳細が理解できます。

PGI AcceleratorCompiler


PGI CUDA Fortranのコーディング例

CUDA Fortran は、NVIDIA CUDA 用のネイティブなコード生成を行うために、Fortran言語を拡張し、Fortran 言語にて CUDA プログラミングを可能とするものです。NVIDIA CUDA C コンパイラと同じような言語拡張構文(シェブロン構文等)を使用することができます。Fortran言語は、C系の言語とは異なり、配列の型、形やサブルーチン間の変数の引き渡し方法が明示的な形態となっているため、CUDA C 言語よりも簡単な形でコーディングできます。この機能は、Fortran 言語をバンドルした PGI Accelerator 製品にて使用できます。

PGI CUDA FORTRAN


PGI CUDA C/C++ for Multi-core x86 コンパイル機能の概要

NVIDIA CUDA C プログラムを PGI C コンパイラでコンパイルして、この実行バイナリを x86 (x64) プロセッサ上で実行できる実行モジュールを生成します。こぼ実行モジュールは、x86 (x64) のシステム上に、NVIDIA GPU ボードがない場合は、x86(x64) CPU側のマルチコア並びに SSE 機構を使用して動作します。NVIDIA CUDA C プログラムのポータビリティ、汎用性を高めるためのコンパイル・ツールとなります。この機能は、C/C++言語をバンドルした PGI Accelerator 製品にて使用できます。

PGI CUDA-x86


PGIライセンス製品が提供する言語コンパイラとユーティリティ

PGI製品の言語コンパイラの種類、プログラム開発用ユーティリティは、以下の通りです。Windows® の Microsoft Visual Studio 統合環境上で動作する PGI Visual Fortran ソフトウェア以外は、全て「コンパイラ・コマンド」を操作して使用する製品です。PGI 製品は、いずれも 32ビット OS でも 64ビット OS でも使用できるライセンスとなっております。また、Linux、Windows、Mac OS X の各プラットフォーム用の製品をご用意しております。

言語、ツール 機能 コマンド名
F77 FORTRAN77 専用コンパイラ(32bit & 64bit) pgf77
F03 Fortran 77/90/95/2003 コンパイラ(32bit & 64bit) pgfortran
pgf95
pgf90
PGCC ANSI C99 and K&R C コンパイラ(32bit & 64bit) pgcc
PGC++ ANSI C++ コンパイラ(32bit & 64bit) pgcpp
DBG PGDBG MPI/OpenMP 並列デバッガ pgdbg
PROF PGPROF MPI/OpenMP 並列性能プロファイラ pgprof
PVF Microsoft® Visual Studio 2008/2010 統合環境プラグイン
Fortran言語を含むWorkstation/Server製品にPVFを同梱
(Windows版製品のみ)
--
GPGPU Accelerator GPUアクセラレータ用ディレクティブ対応コンパイラ
+ CUDA Fortran機能 (Fortran言語を含む製品に同梱)
+ CUDA C/C++ for x86 機能 (C言語を含む製品に同梱)
pgfortran
pgcc/pgcpp

PGIライセンス製品の機能比較

各PGIライセンス製品の提供言語コンパイラ、ユーティリティ、機能等は、以下の通りです。GPU 用のコンパイラ機能を含む製品(x64+GPU)は、(2)で示される PGI アクセラレータコンパイラ製品となります。なお、PGI Workstation 製品は、1台のみにインストール可能なノードロックライセンスで、PGI Server/CDK 製品は、同時使用ユーザ数で管理されるネットワーク・フローティングライセンス製品です。

PGI CUDA-x86


PGIコンパイラ

言語コンパイラ
付属ツール
PGFORTRAN OpenMP/自動並列化対応 Fortran 77/90/95/2003 コンパイラ
PGF77 OpenMP/自動並列化対応 Fortran 77 コンパイラ
PGHPF データパラレル対応 HPF コンパイラ (Linux 版のみ)
PGCC OpenMP/自動並列化対応 ANSI/K&R C99 コンパイラ
PGC++ OpenMP/自動並列化対応 C++コンパイラ
MPICH 1.2.7 ライブラリをバンドル (Linux 版のみ)
PGDBG MPI/OpenMP 対応シンボリック・デバッガ
PGPROF MPI/OpenMP 対応性能プロファイラ
Microsoft MPI (MS-MPI) 対応の並列シンボリック・デバッガ(Windows版のみ)
Microsoft MPI (MS-MPI) 対応の並列プロファイラ(Windows版のみ)
言語仕様 Fortran
Fortran ANSI x3. 1978 (1978)
ISO/IEC 1539-1 : 1991 (Fortran90)
ISO/IEC 1539-1 : 1997 (Fortran95)   対応JIS規格 JIS X 3001-1:1998
ISO/IEC 1539-1 : 2004 (Fortran 2003) 対応JIS規格 JIS X 3001-1:2009
C
ANSI X3.159-1989 (ANSI C)
ISO/IEC 9899 : 1990 (C89)
ISO/IEC 9899 : 1999 (C99)
C++
ISO/IEC 14882 : 1998 (ISO C++)
(ANSI C++ Standard に追随、並びに EDG 4.1 C++ front-end)
スレッド並列
OpenMP 3.0 準拠
GPU対応言語拡張
(以下の機能は、アクセラレータ対応ライセンスが必要)
PGI Accelerator Programming Model(指示行) 対応コンパイル機能
PGI CUDA Fortran 拡張機能
PGI CUDA C/C++ for Multi-core x86 コンパイラ機能
最適化 -mcmodel=medium による 2GB 以上の単一データ・オブジェクトをサポート(Linux版)
AMD64 並びに Intel64 の双方に最適化された単一の実行モジュール生成 (PGI Unified BinaryTM 機能)
AMD Opteron 並びに Intel64 向けの最適化(SSE/SSE2/SSE3/SSSE3, SSE4.2/AVX、SSE4a/ABM, prefetching, 拡張レジスタの使用、64bitアドレッシング)
Intel Pentium II/III/4/Xeon、AMD Athlon/AthlonXP 用の最適化(SSE/SSE2, prefetching)
NUMA アーキテクチャに対応する最適化
huge pageサポートを含むメモリ階層とメモリ割付の最適化
高度に最適化された数学内部組み込み関数
高度に最適化されたIntel(R) MMX, SSE1/SSE2/SSE3 組込み関数ライブラリ(C/C++ only)
ワンパス IPA 最適化(内部手続き間最適化)
ライブラリも IPA 最適化可能
プロファイル・フィードバック最適化(PFO最適化)
gcc, g77, gdb との互換性あり(Linux 版)
ライブラリ AMD Core Math Library(ACML) (BLAS, LAPACK, FFT, 乱数発生)
MPICH 1.2.7(Linux版)、OpenMPI(Mac OS X版))
Intel Math Kernel Libraries(MKL) 10.1以降のライブラリをリンク可能
並列機能 スレッドベースの DO ループ自動並列化機能 (F77/F2003)
スレッドベースの Forループ自動並列化機能 (C/C++)
フル・ネイティブな OpenMP 並列化指示行 (F77/F2003)
フル・ネイティブな OpenMP 並列化pragma行 (C/C++)
OpenMP 3.0 のフルサポート、256スレッドまで対応
マルチコア向けの自動並列化機能強化
SGI 互換 DOACROSS 指示行 (F77/F2003)
SMP/OpenMP アプリケーションに対する CPU-プロセスアフィニティ(結合)サポート
通信スケジュールの再利用化
コンカレント(同時)サブルーチン・コールサポート
PGI Debugger/Profiler は、ローカルシステム上で 8 MPI プロセスまで対応
GPU対応コンパイル機能 GPUアクセラレータ用ディレクティブ対応コンパイラ
PGI CUDA Fortran 機能 (Fortran言語を含む製品に同梱)
PGI CUDA C/C++ for Multi-core x86 機能 (C言語を含む製品に同梱)
制約 4倍精度(128ビット)の浮動小数点変数の指定はできません
対応OS Linux 32/64bit
Red Hat Linux 9 以上/
SUSE Linux Enterprise Server 9.0 以上/
SUSE 9.0 以上/Red Hat Enterprise Linux 3 以上/
Fedora Core 4 以上/Ubuntsu 8/
一般的なカーネルリビジョン2.4 以上、glibc 2.3.2 以上の Linux
MacOS 32/64bit
MacOS X 10.5以上、Xcode 2.5 以上(Intel CPUのみ)
32ビットWindows
Windows XP/Windows Vista/Windows 7/
Windows Server 2003/Windows Server 2008/
64ビットWindows
Windowa XP Professional Edition x64 Edition/Windows Vista/
Windows 7/Windows Server 2008 (x64)/
Windows Server 2003 x64 Edition/