PGIトップ › PGIアクセラレータ コンパイラ

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

GPU対応 PGI アクセラレータ™ コンパイラ

ソフテック情報サイト

高性能コンピューティング(HPC)分野では、汎用アクセラレータとしてグラフィックス・プロセッシング・ユニット(GPGPU)を使用する傾向が高まっています。これまで、Fortranアプリケーションからの GPU の使用は極めて限定的でした。GPUアクセラレータを対象とする開発者は、x86-64 ホストと GPU 間のデータ移動を管理し、ホストから GPU に演算処理をオフロードするため一連の関数呼び出しを行い、詳細なレベルでの C プログラミングが必要でした。一方、PGI Accelerator™ Fortran および C コンパイラは、全体的なプログラム構造とデータを自動的に分析し、アプリケーションの中で GPU へオフロードしたいループ領域へのユーザの指示(ディレクティブ、プラグマ)に基づいて、マルチコア CPU と GPU のコード部分に分割します。さらに、最新 GPU の並列コア、ハードウェア・スレッディング機能、および SIMD ベクトル機能を自動的に使用し、当該ループ処理のマッピングの定義および生成を行い、ホスト側と GPU 側の実行形式モジュールを一つの PGI Unified Binary™ 形式で生成します。NVIDIA社の CUDA™ 環境上の GPU / GPGPU コンパイラ機能を備えた PGIアクセラレータ™ コンパイラは、Linux / Windows / MacOS X のほとんどのプラットフォーム上で使用することができます。もちろん、このコンパイラには従来のインテルCPU、AMD CPU用のコンパイル機能も含んでおります。

PGIアクセラレータ コンパイラは、NVIDIA社GPGPUに対応するコンパイラです。
new topics
2011年11月2日 リリース PGI 11.10 をリリースしました New!
2011年10月21日 TIPS PGI CUDA Fortran による CUBLAS 4.0 以降の使用方法 New!
2011年10月12日 TIPS CUDA Fortran による CUDA 4.0 Multi-GPU プログラミング (3) - Host Memory - New!
2011年10月11日 TIPS CUDA Fortran による CUDA 4.0 Multi-GPU プログラミング (2) - UVA - New!
2011年10月8日 リリース PGI 11.9 をリリースしました New!
2011年10月6日 TIPS CUDA Fortran による CUDA 4.0 Multi-GPU プログラミング (1) - GPUdirect - New!
2011年6月24日 TIPS CUDA™ 4.0 開発環境をインストールする (Windows版)
2011年6月24日 TIPS CUDA™ 4.0 開発環境をインストールする (Linux版)
2011年6月13日 TIPS PGI CUDA Fortran から CUDA CUFFT ライブラリを呼ぶ
2011年5月9日 TIPS PGI 2011のCUDA FortranでのModule文
2011年1月5日 TIPS CUDA™ 3.2 開発環境をインストールする (Linux版)
2011年1月5日 TIPS CUDA™ 3.2 開発環境をインストールする (Windows版)
2010年11月18日 TIPS Windows 版 PGI コンパイラの使用法特集(2) PGI Workstation 製品を使う
2010年11月12日 TIPS Windows 版 PGI コンパイラの使用法特集(1) PGI Visual Fortran 製品を使う
2010年8月16日 TIPS CUDA™ 3.1 開発環境をインストールする (Linux版)
2010年8月16日 TIPS CUDA™ 3.1 開発環境をインストールする (Windows版)
2010年7月23日 TIPS PGIアクセラレータによるヤコビ反復法のGPU性能高速化(倍精度)
2010年7月10日 TIPS PGIアクセラレータによる姫野ベンチマークの最適化手順(その2) 55GFLOPS!
2010年7月7日 TIPS PGIアクセラレータによる姫野ベンチマークの最適化手順(その1)
2010年6月30日 TIPS PGI Fortran と CUDA CUBLASを使用した行列積の計算とGPU性能
2010年6月26日 TIPS PGI CUDA Fortran を使用した行列積の計算とGPU性能
2010年6月26日 TIPS PGIアクセラレータを使用した行列積の計算とGPU性能
2010年6月16日 TIPS NVIDIA GPU の構造と CUDA スレッディングモデル
2010年6月1日 News PGIコンパイラがCray社のスーパー・コンピュータ「CXライン」で利用可能になったことを発表
2010年5月26日 News 新しいFermiアーキテクチャを採用したNVIDIA社のGPU向けにPGI Acceleratorコンパイラを強化
2010年4月27日 TIPS CUDA™ 3.0 開発環境をインストールする (Linux版)
2010年4月27日 TIPS CUDA™ 3.0 開発環境をインストールする (Windows版)
2010年3月19日 FAQ PGI 10.3 Linux版のアクセラレータとCUDA Fortran のコンパイル時の問題について
2010年3月18日 TIPS PGI コンパイラの自動並列化による性能について
2010年3月12日 TIPS プログラムのプロファイルを取得する(時間の掛かる部分を特定する)
2010年3月1日 TIPS NVIDIA GPUの実効メモリ帯域(STREAMベンチマーク)
2010年2月25日 TIPS PGI Workstation 製品の Windows 版の使用(Bashシェル環境 Makefileの利用)
2010年2月16日 TIPS マルチコアCPU上の並列化手法、その並列性能と問題点
2010年1月30日 TIPS PGI 2010のCUDA FortranでのModule文使用時の注意
2010年1月30日 TIPS 複数の GPU を計算に使えますか?
2010年1月23日 TIPS PGI CUDA Fortran のコンパイル・オプション
2010年1月22日 TIPS ソフテック PGI テクニカル情報・コラムのページを新設
2010年1月13日 TIPS PGIアクセラレータ・コンパイル用のオプション
2009年12月11日 TIPS PGI 2010 GPUアクセラレータ機能概要について公開
2009年9月1日 TIPS PGIアクセラレータのディレクティブで姫野ベンチマーク 20GFLOPS (1GPU)を記録

PGIアクセラレータ™ コンパイラ製品とは

PGIとGPU computing

PGIアクセラレータ™ コンパイラは、NVIDIA社の GPU / GPGPU とそのCUDA開発環境を実装したシステム上で、GPU を活用するためのコンパイラを含めたプログラム開発環境を提供します。この PGIアクセラレータ™ コンパイラは、NVIDIA 社の GPU を備えた全てのインテル(R)プロセッサ並びに AMD のプロセッサベースのシステム上で動作し Linux(32bit/64bit)、MacOS(32bit/64bit)、Windows(32bit/64bit) の各プラットフォームに対応しております。

PGIアクセラレータ™ コンパイラ製品は、インテル(R)プロセッサ並びに AMD のプロセッサマルチコアに対応した、従来のコンパイラ製品の上位の製品系列に位置づけられ、いわゆる従来のホスト側の Fortran/C/C++ コンパイラ環境がベースとなります。PGIアクセラレータ™ コンパイラ製品は、従来のマルチコア用の並列化コンパイラ機能を含みますので、GPUアクセラレータ処理を行わない環境では、従来通りの x86、x64 プロセッサ用のコンパイラとしてお使いいただけます。

PGIアクセラレータ™ コンパイラ製品に含まれる主な機能は、以下の通りです。

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

PGIのパッケージ

GPU / GPGPU 用の実行バイナリを生成するための二つのプログラミングモデル

PGIアクセラレータ™ コンパイラを使用して、GPU / GPGPU 対応の並列プログラミングを行う方法は、上述したように「二つの方法」が用意されております。具体的なコードを示し、簡単に概略を説明します。

(1) PGI Accelerator Programming Modelの例(コンパイラ指示行による)

一つは、スレッド並列用の標準規約 OpenMP のようなコンパイラ指示行により、その並列領域を指定してコンパイラに並列コードを生成させる方法です。これは、PGI 社が提唱、公開した規約である「PGI Fortran & C Accelerator Programming Model」によるコンパイラの指示行をプログラムに挿入するだけで、ユーザは高級言語レベルで host + accelerator 用のコードを作成できます。そのプログラムの一例を以下に示します。対応する言語は、Fortran と C99 です。なお、C++言語に対しては対応しておりません。

OpenACC

2011年11月に、PGI社は、NVIDIA社、Cray社、CAPS社と共に、OpenACC API 仕様書を定義し公開しました。OpenACC 標準規格は、最新のオープンな並列プログラミング規格として科学技術系の多数のプログラマを対象とした新しい規格です。これは、OpenMP のようなディレクティブ・ベース(ソース上に指示行を挿入する形態)のプログラミング手法を採用しております。OpenACC 仕様のほとんどは、既に、実装レベルで実績のある PGI社の PGI Accelerator programming Model がベースとなっております。

(プログラムの一例)

(PGIアクセラレータ™ プログラミングモデル)

PGI Accelerator model

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

PGI Accelerator Information

(2) PGI CUDA Fortran プログラミングの例(明示的なCUDA APIの利用)

CUDA™ は NVIDIA 社の GPU のアーキテクチャですが、NVIDIA 社からの CUDA 開発環境は、CUDA C として知られている拡張 C コンパイラとツール群のみが提供されております。CUDA C は、高級言語上から GPU のために CUDA API を使用して明示的にプログラミングすることができるものです。PGI社とNVIDIA社は共同で CUDA Fortran の開発を行い、CUDA C と同等な機能を PGI Fortran 95/Fortran 2003 コンパイラに実装しました。すなわち、Fortran 上の CUDA 関数呼び出しと言語拡張を行うことにより、GPU への汎用数値演算処理カーネルをマッピングすることや、x64 プロセッサと GPU 間のデータの移動と配置を明示的に制御できます。PGI CUDA Fortran コンパイラは、ネイティブ Fortran 環境で CUDA C と同等レベルの制御と最適化を実現し、PGI CUDA Fortran とCUDA C の相互運用を可能にします。

(プログラムの一例)

(CUDA Fortran プログラミングガイド)

PGI CUDA Fortran

PGI CUDA C for Multi-core x86 コンパイラ (CUDA-x86)

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

(PGI 社 PGI CUDA-x86 説明ページ)

PGI CUDA C for x86

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

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

PGI コマンド

アプリケーション・ポーティングを段階的に行うプログラミングモデル

現在、お持ちのアプリケーションを GPU コンピューティングを行えるようにポーティングする際、段階的に性能を向上させてゆくプログラミング方法は必ず必要です。過去には、こうしたアクセラレータ・ボードが開発・リリースされ、そして一瞬で消えてゆく運命を辿ったものが数多くありますが、これは全てソフトウェア開発環境の未成熟性に問題がありました。その中の大きな問題は、プログラミングが難し過ぎたと言う点、すなわち、プログラミングの敷居が高いと言う点でした。また、過去のプログラミング・スタイルの多くは、アクセラレータ用に用意された機能 API、機能関数等を使用したファンクション・コールにより、自身のプログラムを大幅に書き換える必要がありました。しかしこれは、アプリケーション資産の継続性やポータビリティの観点で、多くのユーザの支持を得ることができませんでした。また、この種の API にしても、よりハードウェアに近いレベル(低レベル)で制御しなければならないハードウェア API 的な性格なのか、あるいは、プログラマから見た場合、ハードウェアの抽象化の度合いが高くアプリケーションが書き易い API が提供されているかによっても、ユーザ側の取っ付きやすさは変わります。最近の話題の OpenCL は、CPU-GPU だけでなく混在環境での C プログラミングモデルの標準化ですが、この仕様はハードウェアに近いローレベルな API であり、ITプロフェッショナル以外のユーザが、これを直接プログラミングするのは標準化されたと言えども至難の業です。一方、NVIDIA社の CUDA C 言語や PGI CUDA Fortran は、高いレベルの C / Fortran 言語でプログラムを記述でき、さらにハードウェアを抽象化した API を使用するため、より身近な言語体系で GPU上の SIMD-並列処理の動作を記述できると言う利点があります。とは言え、これでも一般的な科学技術計算、HPC のユーザがプログラミングすることは、やはり難しいと言えましょう。今までの GPU / GPGPU 開発環境は、こうした状況にありました。

PGIアクセラレータ™ コンパイラは、ユーザに対してさらに身近なプログラミング言語体系を提供します。これは、アプリケーションのポーティングのしやすさにも繋がり、科学者自体が GPGPU を直接使用する機会を高めます。PGIアクセラレータ™を使用すると、以下の図のような「段階的なプログラム移行と最適化」が可能となります。

  1. 最初に、PGIアクセラレータのディレクティブ/プラグマを挿入し、GPUへのオフロード化を図る。既存の makefile 等の開発環境はそのまま使用可能。その後、性能のチューニングのために、段階的にディレクティブの「句」の調整を行う。これで、ポーティングを終了することも可能。
  2. さらに、プログラムのホットスポット部分だけを CUDA Fortran で、明示的に CUDA API を使用してコーディング、チューニングを行うことも可能。
  3. 生成した実行バイナリは、PGI Unified Binary 技術により、任意の x64 (+ GPU) システム上で動作する。バイナリのポータビリティも確保される。

PGIによるGPU計算のためのマイグレーション

PGIのサポートは、ソフテック

PGIアクセラレータ™ に関する技術情報、FAQ

PGI Accelerator™ FAQ

PGI Accelerator™ 製品の FAQ ページ ▶

PGI Accelerator™ TIPS

▶ ソフテック・テクニカル情報コラム  by Kato, SofTek Systems Inc.

「ソフテック PGI テクニカル情報・コラム」特集ページへ移動しました。

▶ PGI Accelerator / PGI CUDA Fortran トピックス・ファイル

Accelerator Files

PGIアクセラレータ™ コンパイラ製品のラインナップ

 PGIアクセラレータ™ コンパイラ (x64+GPU) 製品のラインナップを以下に示します。Linux、Windows、Mac OS X の各プラットフォーム版をご用意しております。なお、PGIアクセラレータ™ コンパイラ製品は、既存の マルチコア 64ビット x64 プロセッサあるいは 32ビット x86 プロセッサ用の従来のコンパイラ (x64) 機能とその開発ユーティリテを含みます。なお、従来のPGIアクセラレータ™ 機能無しのコンパイラ (x64) 製品もございますので、ご購入の際はどちらかを選択していただく必要があります。
(注意)PGI アクセラレータ™ 製品は、現在お使いのPGIコンパイラ製品とは異なる製品系列ですので、商用並びに教育機関用を問わず、現行の製品ライセンスのままではご使用いただけません。必ず、製品のアップグレード(買い換え措置)が必要です。現在、現行製品のサブスクリプションが有効なお客様は、「アップグレード特典」によるアクセラレータ付きの製品への移行が可能です。これ以外の場合は、別途、新製品をお買い求め頂く必要がございます。

製品ライセンスページへ

x64+GPU

PGIアクセラレータライセンス製品体系

PGI Accelerator
Fortran/C/C++ Workstation

PGIアクセラレータコンパイラ機能を含む、3言語パック。
ノードロック、シングルユーザ用。
この他に、Fortran専用製品とC/C++専用製品もあります。

PGI Accelerator Fortran/C/C++ Server

PGIアクセラレータコンパイラ機能を含む、3言語パック
ネットワーク・フローティング用。
この他に、Fortran専用製品とC/C++専用製品もあります。

PGI Accelerator CDK®

PGIアクセラレータコンパイラ機能を含む、クラスタ用キット
2, 5, 10, 25, 50 同時使用ユーザ数
フローティング・ライセンス
クラスタ・ワイドの MPI 用開発ツールを含みます。

PGI Accelerator Visual Fortran®

PGIアクセラレータコンパイラ機能を含むVisual Fortran。Microsoft Visual Studio 統合開発環境用プラグイン。
Windows版 PGI Accelerator Fortran Workstation/
Server製品の中にバンドルさてております。