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に対応するコンパイラです。

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

PGIとGPU computing

PGIアクセラレータ™ コンパイラは、NVIDIA社の GPU / GPGPU とそのCUDA開発環境を実装したシステム上で、GPU を活用するためのコンパイラを含めたプログラム開発環境を提供します。この PGIアクセラレータ™ コンパイラは、Fortran と C99 の二つの言語に対応しており、NVIDIA 社の GPU を備えた、全てのインテル(R)プロセッサ並びに AMD のプロセッサベースのシステム上で動作し、Linux、Windows、Mac OS Xの各プラットフォームに対応した PGI 2010 バージョン(今までの呼び方で言うと PGI 10.0)にて提供されました。
 PGIアクセラレータ™ コンパイラ製品の機能とその構成は、以下の図に示しました。本コンパイラ製品は、インテル(R)プロセッサ並びに AMD のプロセッサマルチコアに対応した、従来のコンパイラ製品の上位の製品系列に位置づけられ、いわゆる従来のホスト側の Fortran/C/C++ コンパイラ環境がベースとなります(現在のアクセラレータ機能のないコンパイラ製品とは別系列の製品として販売しますので、アクセラレータ機能を含む製品が必要な場合、現行製品からの買い換えが必要です)。PGIアクセラレータ™ コンパイラ製品は、従来のマルチコア用の並列化コンパイラ機能を含みますので、GPUアクセラレータ処理を行わない環境では、従来通りの x86、x64 プロセッサ用のコンパイラとしてお使いいただけます。さらに、PGIアクセラレータ™ コンパイラ製品には、(1)「コンパイラ指示行によるプログラミングが可能な PGIアクセラレータ・コンパイル機能」 (2)「CUDA API を利用して明示的にプログラミングを行うための PGI CUDA Fortran 機能」の両方の機能を備えます。一般に前者のようなコンパイラ指示行のみの挿入で行うような言語開発モデルを Implicit Programming Model と称し、また、後者のような開発者が明示的に CUDA API を使用してコーディングするような言語モデルを Explicit Programming Model と言います。PGIアクセラレータ™ コンパイラ製品は、この両方のプログラミング機能を提供します。なお、CUDA C 言語は、NVIDIA 社から提供されておりますので、これは含みません。

PGIのパッケージ

GPU / GPGPU対応 PGIコンパイラの二つのプログラミングモデル

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

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

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

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

	subroutine saxpy( n, a, x, y ) 
	real, dimension(*) :: x,y 
	real :: a 
	integer :: n, i 
!$acc region copyin(x(1:n))
!$acc& copy(y(1:n))
!$acc do parallel
		do i = 1, n
			y(i) = a * x(i) + y(i) 
		end do
!$acc end region	
	end subroutine

(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 Fortran とCUDA C の相互運用を可能にします。

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

! GPGPU kernel definition
	attributes(global) subroutine ksaxpy( n, a, x, y ) 
	real, dimension(*) :: x,y 
	real, value :: a 
	integer, value :: n, i 
		i = (blockidx%x-1) * blockdim%x + threadidx%x 
		if( i <= n ) y(i) = a * x(i) + y(i) 
	end subroutine 
! Host subroutine 
	subroutine solve( n, a, x, y ) 
	real, device, dimension(*) :: x, y 
	real :: a 
	integer :: n 
! call the kernel 
		call ksaxpy<<<n/64, 64>>>( n, a, x, y ) 
	end subroutine

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

現在、お持ちのアプリケーションを 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 Accelerator™ コンパイラの機能概要

2009年11月に、PGI Accelerator™ と言う名称で、既存のコンパイラ製品シリーズとは異なる別製品系列として発売されました。今までのアクセラレータ機能無しの製品の全て(PGI Workstation/Server、PGI CDK、PGI Visual Studio)に対して、それぞれ、別系列の上位製品としてラインナップされております。本リリースでの「アクセラレータ コンパイル機能」に関する主な内容は以下の通りです。
(注意)PGI アクセラレータ™ 製品は、現在お使いのPGIコンパイラ製品とは異なる製品系列ですので、商用並びに教育機関用を問わず、現行の製品ライセンスのままではご使用いただけません。必ず、製品のアップグレード(買い換え措置)が必要です。現在、現行製品のサブスクリプションが有効なお客様は、「アップグレード特典」によるアクセラレータ付きの製品への移行が可能です。これ以外の場合は、別途、新製品をお買い求め頂く必要がございます。

  • ディレクティブベースでプログラミングを行う、x64ホスト + GPUハードウェア環境に対応したPGIアクセラレータ コンパイラ(Fortran とC99言語)を提供します。なお、サポートするプラットフォームは、CUDA開発環境を備えNVIDIA社のGPUを実装した Linux(32bit/64bit)、MacOS(32bit/64bit)、Windows(32bit/64bit) システムとなります。
  • PGI F95/03 Fortran コンパイラの中に、CUDA Fortran 機能を提供します。これは、CUDA開発環境を備えNVIDIA社のGPUを実装した Linux、MacOS、Windows システム上で動作します。
  • CUDA Fortran のデバッグ用として、マルチコア x64 ホスト上でのエミュレーション機能を提供します。
  • C99 並びに Fortran95/03 言語における PGIアクセラレータ™ プログラミング・モデルに、GPU デバイス・レジデント・データをサポートする機能を追加します。これは、「カーネル」間のデータの共用をサポートします。
  • PGPROFプロファイル機能は、x64+GPUアプリケーションのプロファイリング用に拡張されます
  • x64+GPU アプリケーションを対象としたアプリケーションのポーティングと最適化のために、Compiler feedback (CCFF)ガイド機能が拡張されます。

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

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

PGI Accelerator™ FAQ

PGI Accelerator™ 製品の FAQ ページ ▶

PGI Accelerator™ TIPS

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

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

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

 PGIアクセラレータ™ コンパイラ (x64+GPU) 製品のラインナップを以下に示します。Linux、Windows、Mac OS X の各プラットフォーム版をご用意しております。なお、PGIアクセラレータ™ コンパイラ製品は、既存の マルチコア 64ビット x64 プロセッサあるいは 32ビット x86 プロセッサ用の従来のコンパイラ (x64) 機能とその開発ユーティリテを含みます。なお、従来のPGIアクセラレータ™ 機能無しのコンパイラ (x64) 製品もございますので、ご購入の際はどちらかを選択していただく必要があります。

製品ライセンスページへ

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 統合開発環境用プラグイン。
PGI Fortran & MPI/OpenMP デバッガ
ノードロック、フローティング用ライセンスあります。