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

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

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

ソフテック情報サイト

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

new topics
2017年9月 30日 TIPS cuSPARSE を使用した Bi-Conjugate Gradient Stabilized(BiCGStab)
2017年9月23日 TIPS cuSPARSE を使用した Conjugate Gradient(CG) 共役勾配法
2017年9月 4日 TIPS cuSolverDN: QR分解による直交化
2017年9月 4日 TIPS cuSolverDN: QR Factorization Dense Linear Solver (QR分解による密行列線形ソルバー)
2017年9月 4日 TIPS cuSolverDN: Symmetric Dense Eigenvalue Solver (対称行列の固有値ソルバー)
2017年8月30日 TIPS cuSPARSE example from OpenACC Host code
2017年8月30日 TIPS cuRAND example with OpenACC Fortran (乱数発生)
2017年8月30日 TIPS cuFFT example with OpenACC Fortran
2017年8月28日 TIPS OpenACC における C++クラスデータ管理
2017年8月28日 TIPS OpenACC における C 構造体データ管理
2017年8月28日 TIPS OpenACC 非構造化データの領域のデータ管理(Fortran,C,C++)
2017年8月26日 TIPS CUDA Unified Memory with OpenACC に関して
2017年8月26日 TIPS OpenACC Fortran 派生型データのマネージメント
2017年8月26日 TIPS cuSolverSP: 並列ダイレクト・スパース・ソルバー(CSR QR分解)の使い方
2017年8月22日 TIPS cuSolverDN: dense LAPACK Function (エルミートの正定値行列のコレスキー分解)の使い方
2017年8月21日 New release PGI 17.7 の新機能について
2016年10月18日 TIPS CUDA™ 8.0 開発環境をインストールする (Linux版)
2016年10月14日 TIPS CUDA™ 8.0 開発環境をインストールする (Windows版)
2015年10月20日 TIPS CUDA™ 7.5 開発環境をインストールする (Linux版)
2015年10月9日 TIPS CUDA™ 7.5 開発環境をインストールする (Windows版)
2015年4月24日 TIPS CUDA™ 7.0 開発環境をインストールする (Windows版)
2015年4月23日 TIPS CUDA™ 7.0 開発環境をインストールする (Linux版)
2014年9月9日 TIPS CUDA™ 6.5 開発環境をインストールする (Linux版)
2014年9月9日 TIPS CUDA™ 6.5 開発環境をインストールする (Windows版)
2014年 2月 7日 リリース PGI 2014 をリリースしました
2014年 1月18日 ガイド OpenACC プログラミングガイド(日本語)をリリースしました New!
2013年8月1日 技術資料 ▶ 弊社加藤による OpenACC ディレクティブに関する講演資料
  新OpenACC 2.0の機能とPGIアクセラレータコンパイラ
2013年7月18日 ニュース PGI Acceleratorコンパイラ、AMD社のAPUおよびGPUに対応
2012年12月25日 ニュース 新しいNVIDIA Tesla K20シリーズのGPUアクセラレータに対応する PGI Acceleratorコンパイラを発表
2012年12月25日 ニュース Intel社のXeon Phiに対応するOpenACCを提供
2012年12月6日 ニュース AMD社とAPU用コンパイラで連携
2012年5月30日 技術資料 ▶ 弊社加藤による OpenACC ディレクティブに関する講演資料
  なぜ、ディレクティブベースのプログラミングが有望なのか? ~ GPU computing への基礎知識 ~
2012年5月30日 技術資料 ▶ 弊社加藤による OpenACC ディレクティブに関する講演資料
  PGIコンパイラの使用の実際 ~新しいOpenACCによるプログラミング~
2011年10月21日 TIPS PGI CUDA Fortran による CUBLAS 4.0 以降の使用方法
2011年10月12日 TIPS CUDA Fortran による CUDA 4.0 Multi-GPU プログラミング (3) - Host Memory -
2011年10月11日 TIPS CUDA Fortran による CUDA 4.0 Multi-GPU プログラミング (2) - UVA -
2011年10月6日 TIPS CUDA Fortran による CUDA 4.0 Multi-GPU プログラミング (1) - GPUdirect -
2011年6月13日 TIPS PGI CUDA Fortran から CUDA CUFFT ライブラリを呼ぶ
2011年5月9日 TIPS PGI 2011のCUDA FortranでのModule文
2010年11月18日 TIPS Windows 版 PGI コンパイラの使用法特集(2) PGI Workstation 製品を使う
2010年11月12日 TIPS Windows 版 PGI コンパイラの使用法特集(1) PGI Visual Fortran 製品を使う
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年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(64bit)、Apple OS X(64bit)、Windows(64bit) の各プラットフォームに対応しております。

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

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

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

PGIのパッケージ

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

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

(1) OpenACC ディレクティブを利用する方法

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

OpenACC

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

OpenACC プログラミングガイド(日本語)

(ニュース・トピックス)

(弊社加藤による OpenACC ディレクティブに関する講演資料)

2012年5月

2012年7月

2013年7月

(PGI Accelerator Compilers with OpenACCスタータ・ガイド

(Rob Farber's OpenACC article series published on DrDobbs.com)

(プログラムの一例)

(Applications and Programming Information )

(仕様書 OpenACC プログラミングモデル)

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 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