ソフテックは、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用のコンパイル機能も含んでおります。
| 2010年3月1日 | TIPS | ▶ NVIDIA GPUの実効メモリ帯域(STREAMベンチマーク) New! |
| 2010年2月25日 | TIPS | ▶ PGI Workstation 製品の Windows 版の使用(Bashシェル環境 Makefileの利用) New! |
| 2010年2月16日 | TIPS | ▶ マルチコアCPU上の並列化手法、その並列性能と問題点 New! |
| 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年11月25日 | リリース | ▶ 新バージョンPGI 2010 (PGI 10.0) のリリースと新製品出荷日 |
| 2009年9月29日 | Release | ▶ PGI CUDA Fortran のベータ・バージョンを PGI 9.0-4 にてリリース開始 |
| 2009年9月1日 | TIPS | ▶ PGIアクセラレータのディレクティブで姫野ベンチマーク 20GFLOPS (1GPU)を記録 |

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 対応の並列プログラミングを行う方法は、上述したように「二つの方法」が用意されております。具体的なコードを示し、簡単に概略を説明します。
一つは、スレッド並列用の標準規約 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
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アクセラレータ™を使用すると、以下の図のような「段階的なプログラム移行と最適化」が可能となります。

2009年11月に、PGI Accelerator™ と言う名称で、既存のコンパイラ製品シリーズとは異なる別製品系列として発売されました。今までのアクセラレータ機能無しの製品の全て(PGI Workstation/Server、PGI CDK、PGI Visual Studio)に対して、それぞれ、別系列の上位製品としてラインナップされております。本リリースでの「アクセラレータ コンパイル機能」に関する主な内容は以下の通りです。
(注意)PGI アクセラレータ™ 製品は、現在お使いのPGIコンパイラ製品とは異なる製品系列ですので、商用並びに教育機関用を問わず、現行の製品ライセンスのままではご使用いただけません。必ず、製品のアップグレード(買い換え措置)が必要です。現在、現行製品のサブスクリプションが有効なお客様は、「アップグレード特典」によるアクセラレータ付きの製品への移行が可能です。これ以外の場合は、別途、新製品をお買い求め頂く必要がございます。
| PGI Accelerator™ FAQ |
PGI Accelerator™ 製品の FAQ ページ ▶
▶ PGI アクセラレータ™ コンパイラの一般的な FAQ
▶ PGI アクセラレータ™ コンパイラの使用時の技術関連 FAQ
| PGI Accelerator™ TIPS |
▶ ソフテック・テクニカル情報コラム by Kato, SofTek Systems Inc.
PGIアクセラレータ™ コンパイラ (x64+GPU) 製品のラインナップを以下に示します。Linux、Windows、Mac OS X の各プラットフォーム版をご用意しております。なお、PGIアクセラレータ™ コンパイラ製品は、既存の マルチコア 64ビット x64 プロセッサあるいは 32ビット x86 プロセッサ用の従来のコンパイラ (x64) 機能とその開発ユーティリテを含みます。なお、従来のPGIアクセラレータ™ 機能無しのコンパイラ (x64) 製品もございますので、ご購入の際はどちらかを選択していただく必要があります。


PGIアクセラレータコンパイラ機能を含む、3言語パック。
ノードロック、シングルユーザ用。
この他に、Fortran専用製品とC/C++専用製品もあります。
PGIアクセラレータコンパイラ機能を含む、3言語パック
ネットワーク・フローティング用。
この他に、Fortran専用製品とC/C++専用製品もあります。
PGIアクセラレータコンパイラ機能を含む、クラスタ用キット
2, 5, 10, 25, 50 同時使用ユーザ数
フローティング・ライセンス
クラスタ・ワイドの MPI 用開発ツールを含みます。
PGIアクセラレータコンパイラ機能を含むVisual Fortran。Microsoft Visual Studio 統合開発環境用プラグイン。
PGI Fortran & MPI/OpenMP デバッガ
ノードロック、フローティング用ライセンスあります。
PGI Accelerator
機能概要