【AFDSレポート】
MicrosoftがGPGPU開発向けC++の拡張「C++ AMP」を発表

ハーブ・サッター氏

会期:6月13日~16日(現地時間)
会場:アメリカ合衆国ワシントン州シアトル市SF博物館



 AMD Fusion Developer Summitの2日目となる6月15日(現地時間)、MicrosoftのPrincipal Architectであるハーブ・サッター氏が基調講演を行なった。ここで同氏は、ヘテロジニアスコンピューティング時代に適応するC++の拡張となる「C++ AMP(Accelerated Massive Parallelism)」の開発を発表。GPGPUを含む開発環境の構築へ取り組む姿勢を見せた。

●「今のメインストリームはジャングル」

 サッター氏は、Microsoftでプログラム言語のアーキテクトを務める人物。冒頭で、現在のメインストリームはあらゆるデバイスで、CPUのマルチコア化、GPGPU、クラウドが利用可能になっているが、これらを個別にトピックとするのではなく「ヘテロジニアススーパーコンピューティング」という一言に集約されるとする。

 サッター氏は、パラレルコンピューティング時代の到来によって、プロセッサの性能が高まっていくのでソフトウェアの性能も自然と上がっていく「フリーランチ」の時代は終わったとし、現在のヘテロジニアスコンピューティング時代を「ジャングル」であると形容。

 そのジャングルを、CPUアーキテクチャを縦軸、メモリアーキテクチャをX軸としたマトリックスに示した。

 CPUアーキテクチャはアウト・オブ・オーダー型もあればイン・オーダー型もあり、加えて各種GPUもある。メモリも全プロセッサのメモリスペースが統合されたものから、キャッシュメモリ、グローバルメモリ、クラスタのインターコネクトなどさまざま。

 そして、このマトリックスに現在のハードウェアを割り当て、実に多種多様なアーキテクチャが存在することを提示。例えば、Fusion APUはアウト・オブ・オーダー型のCPUとGPUという性格の異なる2つのコアを持ち、メモリ空間はCPU-GPU間をゼロコピーで利用可能になっただけに、1つの点では表わせない。

 さらに現在はCPUが中心のクラウドにもAmazon ECのようにGPGPUを採用するものがあったり、CPUとメモリ空間が分かれているGPUもメモリ統合が進んでいるなど、現在進行形の変化も紹介。この状況をジャングルと形容したのである。

 しかも、こうした多様なハードウェアは、プロセッサやメモリなどを強化して単一機器の性能を高めていくスケールイン、機器を増加させることで性能を高めていくスケールアウトの2つに分かれるとする。

 先に示した、フリーランチは終わったという言葉で表現されるように、こうした性格の異なるプロセッサが混在し、それらを組み合わせて利用するヘテロジニアス時代にはプログラムコードの最適化が性能の鍵を握る。しかし、すべてのプロセッサの強い部分を引き出すプログラムを記述のは容易ではない。そうしたヘテロジニアスコンピューティング時代に向けたMicrosoftの新たな取り組みが「C++ AMP」だ。

2005年の段階でプロセッサの性能向上だけでソフトウェア性能を高めていく時代(フリーランチ)は終焉。現在はメインストリームへのヘテロジニアススーパーコンピュータの浸透段階にある。サッター氏はこれをジャングルの時代と表したジャングルの時代であることを表すマトリックス。縦軸がプロセッサアーキテクチャの種類、横軸がメモリヒエラルキの種類で、多種多様なプロセッサが存在し、それらを共存させるヘテロジニアスな時代には、それぞれの特色を活かすプログラミングが非常に困難であるとするハードウェアの進化についても、単一機器のCPUやメモリの性能を高めていくスケールインだけでなく、クラスタを組んだクラウドサービスなどではスケールアウトによる進化も見られる

●ヘテロジニアスな環境での開発を容易にするC++ AMP

 MicrosoftはGPGPUのプラットフォームとして、DirectX 11においてDirectComputeをすでに提供している。今回のC++ AMPは、DirectXプラットフォーム上で動作するもので、DirectComputeを実行可能なプロセッサ(GPU)においてC++による開発を手助けをするもの、という表現で紹介された。

MicrosoftはC++のマルチコア向けライブラリのPPLのほか、ヘテロジニアスプログラミングに適応するための言語拡張「C++ AMP」をアナウンス。現在はDirectCompute対応デバイスを対象としているが、より広い範囲へ適用できる仕様となる

 C++の利点としてサッター氏は例外処理やテンプレートの存在を挙げている。また、C++ AMPの開発にあたって、C++から大きな変更を加えずに言語を拡張する点を強調している。新しい言語に生まれ変わってしまうことによる開発者の混乱を避けるためだ。

 その言語拡張としてサッター氏はrestrict()関数と、array_viewという2つの型をキーに挙げた。前者はプロセッサアーキテクチャに応じて実行可能な機能に制限をかけてしまうもので、後者は不均一なメモリ空間へのアクセスで生じる問題を回避するために、メモリ空間をN次元のアレイとして作業するというもの。メモリ空間の抽象化という表現も可能だろうか。いずれにしても、プロセッサアーキテクチャ、メモリ空間の違いを吸収することができるという点で、C++ AMPのキーとなるわけである。

 C++ AMPのコンパイラはVisual Studioの次期バージョンで利用可能となる予定で、リリースは今年末になるとサッター氏は述べた。また、このコンパイラはオープン仕様になる予定で、Windows上のVisual Studioだけでなく、それ以外の開発環境でも利用できるようAMDと協力して開発中であるという。

 AMDではFusion System Architectureの基調講演において、ヘテロジニアスコンピューティングプログラミングの展望として、CUDAなどの独自仕様からOpenCLやDirectComputeなどのオープン仕様でのプログラミングを、エキスパートなプログラマが行なう時代を2011年までとする表を示している。そしてその先にはメインストリームのプログラマが完全にC++で記述するヘテロジニアスコンピューティングプログラムが到来すると述べている。

 先述のとおりサッター氏はメインストリームのデバイスはいずれも異種混合のプロセッサを持つデバイスとなっていると述べたほか、このC++ AMPをヘテロジニアス環境に適応したソフトウェア開発への参入を容易にするものとしている。

 C++ AMPをFusion Developer Forumという場で紹介したことは、AMDとMicrosoftの両者が揃って、次のステップのヘテロジニアスコンピューティングプログラミングプラットフォームの方向性を明示的にしたものといえるだろう。

C++ AMPのサンプルコード(左)。ここでキーとして挙げられたのがrestrict()とarray_viewで、右のスライドから分かるとおりrestrict()はプロセッサアーキテクチャの違いを、array_viewはメモリヒエラルキの違いを吸収するためのものとなるC++ AMPの特徴をまとめたもの。最後にオープン仕様となることが発表された
AMDが示しているヘテロジニアスコンピューティングのプログラミングモデルの進化。OpenCLなどのオープンアーキテクチャを使ったエキスパートプログラマによる開発から、C++を使ったメインストリームへの進化が示されているC++ AMPによって開発されたn-bodyのデモでは、LlanoのCPU、内蔵GPU、内蔵+ディスクリートGPU(マルチGPU)を切り替えたり、ボディ数を変更するなどし、システムが持つ演算能力を引き出せることを示した

●NVIDIAもC++ AMPを歓迎

 このMicrosoftの基調講演後、GPUコンピューティングプラットフォームをCUDAで推進してきたNVIDIAもすぐさま反応した。

 NVIDIAのCUDAは独自仕様のGPGPUプラットフォームの代表ともいえる。CUDAにおいては登場時にCUDA Cだけであったものが、現在はFortranやC++もサポート。さらにはVisual Studio向けの開発環境支援ツールのParallel Nsightを提供している。C++ AMPの登場は、こうしたCUDAのエコシステムから、もっとオープンなものへの本格的な移行がはじまるもの、という見方もできる。

 だが、NVIDIAのブログでは、パフォーマンスを最大限引き出す必要があるHPCアプリケーションにおいてCUDAは引き続き人気を集めるが、多数のWindowsデベロッパがC++言語によるGPU活用をしやすくなることと、GPGPUのマーケットが成熟期に達する、という2点に対する期待から、C++ AMPの登場を歓迎するとの声明を発表している。

(2011年 6月 17日)

[Reported by 多和田 新也]