後藤弘茂のWeekly海外ニュース

Fusionのための新たなソフトウェア層を創るAMD



●第2世代以降のFUSIONアーキテクチャが重要

 台湾で開催されたCOMPUTEXで、AMDは次世代CPUアーキテクチャ「Bulldozer(ブルドーザ)」ベースのAPU「Trinity(トリニティ)」を発表。AMDのメインストリーム製品ラインを、GPUを統合したAPU(Accelerated Processing Unit)へと移行させて行くビジョンを改めて示した。メインストリームPC向けのAPUでは「Llano(ラノ)」がすでに秒読みに入っている。AMDがATI Technologiesを買収して以来連綿と進めてきたFusion戦略が、ようやく結実しつつある。

 しかし、AMDのFusion戦略の最も重要な部分は、単なるCPUとGPUの物理的な統合にはない。APUを発展させることで、最終的にAPUでのプログラムのプログラミングとプログラム実行のモデルを変革することが、AMDのFusion戦略の要だ。そして、それは、現在見えている第1世代APUよりも先、第2世代、第3世代のAPUで実現されて行く。AMDは、こうしたFusion戦略のビジョンと方向性を、6月上旬に開催する「AMD Fusion Developer Summit 2011」で公開する予定だ。

Trinityを掲げるRick Bergman(リック・バーグマン)氏(Senior Vice President and General Manager, AMD Product Group)Llanoの特徴

 AMDは、将来的にはCPUコアとGPUコアを混在させたヘテロジニアス(Heterogeneous:異種混合)環境でのプログラムの実行モデルを拡張する。現在の、ドライバソフトウェア層を通じてGPUプログラムを実行するモデルに加えて、新しいソフトウェアモデルを導入する。業界の標準的なタスクパラレルランタイムソフトウェアやAMDのランタイムから、CPUコアと同様にGPUコアにもタスクを発行できるようにする構想だ。AMDのChuck Moore氏(Corporate Fellow and CTO Technology Development)は、「(AMDが提供する)アクセラレイテッド並列コンピューティングの機能を広く使ってもらうために、我々はヘテロジニアス(Heterogeneous:異種混合)コンピューティングソフトウェアスタックを新たに定義した」と2010年のAnalyst Dayで説明した。

 AMDは現在のドライバモデルも、グラフィックスやレガシソフトウェアとの互換性のために残す。しかし、GPU上での汎用コンピューティングについては、CPUと共通するランタイム層を経由するモデルへと穏やかに移行させようとしている。シンプルに言えば、CPUとGPUを同列にコンピューティングコアとして扱えるようにしようとしている。これは、GPUにとっては、ドライバソフトウェア型のモデルからの脱却を意味する。現在、ドライバ層で行なっているGPUのネイティブ命令セットへの変換のためのジャストインタイムコンパイルは、別なモジュールとしてランタイムライブラリと連携する。

ヘテロジニアスコンピューティングのソフトウェアスタック(2010年Analyst Dayより)

●プログラムの実行モデルを変更するAMD

 AMDは、こうしたGPUでのプログラムの実行モデルの変更と共に、それを支援するためのハードウェア的な改良もAPUやGPUに加えつつある。最大のポイントは、CPUとGPUの間での統合された仮想メモリアドレススペースと、CPUとGPU間でのハードウェアによるメモリコヒーレンシ。

 メモリコヒーレンシは、PCI Expressバスの拡張によって、ディスクリートGPUとの間でも取ると言う。APU内のGPUコアも、外付けのディスクリートGPUも同じプログラミングモデルで扱えるようにする。さらに、GPUのためのタスクスケジューラハードウェアの実装、汎用コンピューティングでのコンテクストスイッチングの実装なども計画する。

 AMDの計画するこうしたGPUの拡張は、GPUをCPUと同列に扱えるようにするために必要なものだ。「GPUの洗練度をどんどん上げることによって、システムアーキテクチャ全体の中で、GPUをファーストクラスの市民にする」(Chuck Moore氏)。GPUが、あたかもCPUコアの1つであるように、コヒーレンシが保たれたメモリ空間をCPUコアと共有し、タスクを切り替えながら実行できるようにする。そして、マルチコア向けのタスクパラレルランタイムから、CPUと同様にGPUへもタスクを発行できるようにする。

AMD Fusion Task Queuing(PDF版はこちら)

 こうした改革で、AMDはCPUとGPUを統合したヘテロジニアス環境でのプログラミングを容易にしようとしている。この上に、ドメインライブラリを用意することで、ハードウェアを意識することなくプログラムできるようにする。さらに、コンパイラの技術の進歩によって、GPUの並列コードを自働生成するといった可能性までAMDは見通している。究極的にはプログラマが書いたコードから、GPUで並列化可能な部分をソフトウェアが自動的に抽出してコードを生成、GPUにタスクを投げるような未来だ。また、ランタイムを噛ませることで、タスクをネットワーク越しに他のシステムに投げるクラウドベースのモデルの可能性も検討している。

 AMDの描くゴールへの第一歩が、Fusion System Architectureの実行モデルだ。ただし、その道は平坦ではなさそうだ。

●GPUの並列プログラミングモデルの改良とエコシステム

 AMDはGPUの汎用プログラムでの利用において、NVIDIAに大きく後れを取った。しかし、AMDはこれが致命的だとは考えていない。なぜなら、GPUの汎用利用は、まだ初歩の段階にあり、幅広く普及させるためのソリューションは、NVIDIAも完全には提供できていないと考えているからだ。GPUの汎用利用の本当の戦いはこれからで、そのカギを握るのは、一般プログラマーが簡単にプログラムできるソフトウェアスタックを組み上げることだとAMDは考えている。Moore氏は次のように説明していた。

 「我々が提案するソフトウェアスタックのゴールは、Fusionアーキテクチャを広く広め、高い生産性でソフトウェア開発をしてもらうためのものだ。多くのアプリケーション開発者にとって、現在はGPUを使うことが難しいのが真実だ。そこで、我々はソフトウェアスタックによって並列プログラムの開発を容易にするための、一連の抽象化を定義する。このスタックを使うと、複雑なハードウェアが抽象化され、アプリケーション開発者は、GPUを使うための多くの複雑なことから解放される。多くの人々に、このスタックで開発をしてもらい、多くのアプリケーションをその上に走らせてもらう。そうすれば、Fusionの経済サイクルに燃料が与えられ、回り始める」。

 GPUの複雑性を隠蔽することで、プログラミングを容易にして、GPU上での汎用プログラムの普及を促すという戦略だ。AMDのJoe Macri氏(CTO, Fusion)は、この構想を次のように例える。

 「我々は、(GPUをプログラムする)誰もが、シーモア・クレイ(スーパーコンピュータの父)のようなベクタープロセッシングの科学者になって欲しいとは考えていない。自動化を進めることで、ソフトウェア開発者を煩雑な作業から解放し、プログラムで何を実現するかに集中できるようにする。すると、ソフトウェア開発者が、どんどん、ミケランジェロのような芸術家になる。

 ミケランジェロはノミとツチで、岩から石像を彫りだしたが、今度は、ノミとツチに当たる部分は我々が考える。そうすれば、ソフトウェア開発者は、岩から石像を取り出すように、自由に自分の作品に集中できるようになる。ゲーム開発者なら、ゲームのことだけを考えられるようになる。こうしたことは、過去にも行なわれた。MicrosoftとOpenGLコミュニティは、同じことをグラフィックスで15年間やって来た。それを、並列コンピューティングにも広げられると考えている」。

●4ステップのAMDのFusionアーキテクチャの発展

 AMDはこの構想を4つのステップで実現しようとしている。(1)CPUとGPUの物理的な統合、(2)プラットフォームの最適化、(3)アーキテクチャ上の統合、(4)OSへの統合の4フェイズだ。これらのうち、「最初の2つのカラム(1と2)は最初の世代のFusionで実現でする。次の2つのカラム(3と4)も、そのあと迅速に実現する。1年以内とは言わないが、5年もかかることはない。5年より、ずっと早い時期に実現する。もっとも、正直に言えば、OSサポートは我々だけで(時期を)決めることはできないが」とMacri氏は時期について説明する。

 物理的な統合では、CPUコアとGPUコアを実際に1個のチップに統合し、両者を広帯域のオンチップメモリコントローラに接続し、GPUコアを利用できるオープンなソフトウェアエコシステムを提供する。これは、最初のLlano(ラノ)の世代で実現する。プラットフォーム最適化では、CPUコアとGPUコアを広帯域のインターフェイスで接続し、GPUをプログラムするための高レベル言語をサポートし、CPUコアとGPUコアで連携する双方向のパワー制御も行なう。これも、Llano世代となると言う。

 重要なのは次のステップのアーキテクチャ上の統合だ。ここでAMDは、CPUとGPUのメモリアドレス空間の統合、それに伴うページャブルメモリのGPUへの実装、GPU用のハードウェアスケジューラの搭載、CPUコアとGPUコア間でのメモリコヒーレンシの実現などを挙げている。

 そして最後のOSインテグレーションのステップでは、汎用コンピューティング時のGPUの細粒度のコンテクストスイッチング、グラフィックス時のGPUのプリエンプション、PCI Express経由での外部GPUとのメモリコヒーレンシ、タスクパラレルランタイムへの統合を挙げている。ソフトウェア層との連携などが必要なフィーチャが最後のステップだ。AMDは、ここまでをあと数年のうちに実現しようとしている。

AMD Fusionの進化のステップ(PDF版はこちら)


●並列化可能なタスクの粒度が大きいと判断

 こうしたAMDの構想は、GPUコアで実行する汎用プログラムについて、AMDが一定の見通しを立てたことも意味している。それは、GPUコア上で実行するプログラムが一定以上の粒度を持つという見通しだ。

 かつてAMDは、GPUコアで実行する汎用プログラムがどの程度の粒度になるのかが、まだ明確になっておらず、そのために、どういったGPUコア統合が適しているのか、決定ができていないと説明していた。CPUで実行するスカラーコードと、GPUで実行する並列コード。この2つが大きな粒度で分かれるアプリケーションが多いなら、タスクレベルでGPUコアとCPUコアの命令ストリームを分けてしまうのが合理的だ。しかし、2つのコードが細粒度で入り交じるならば、CPU側の命令セットのスペースにGPU命令をマップして、CPUコアとGPUコアを融合させた方がいい。そうAMDは説明していた。後者のアプローチを取るなら、IntelのLarrabee(ララビ)とある程度似たようなアプローチになっただろう。

 しかし、AMDの現在の構想は、明らかに前者の見通しに立っている。CPUコアとGPUコアを融合させたコアに、スカラコードと並列コードを同じ命令ストリームで流すのではない。タスクレベルでコードを分けてCPUコアとGPUコアそれぞれに渡すという構想だ。これは、GPUコアに渡す処理が一定以上の粒度を持っていると判断したためだと考えられる。

 NVIDIAもIntelも、似たような判断を下していると思われる。並列コンピューティングコアに渡す汎用処理が一定以上の粒度を持つというのが、共通認識になりつつある。粒度が大きいことは、並列化可能なコード部分自体の占めるパーセンテージが大きいことを示している可能性が高い。だとすると、今後のアプリケーションでは「アムダールの法則」が大きな問題ではなくなりつつあることも意味している。プロセッサが実行するコードのうち、並列(パラレル)化できない部分が、全体の実行時間を制約してしまうとするアムダールの法則は、もはや問題ではないのかも知れない。このことは、今後、Fusion型プロセッサの中で、増えて行く部分はCPUコア側ではなくGPUコア側になることを予想させる。

プログラムとGPUコンピューティング(PDF版はこちら)
並列コードの粒度(PDF版はこちら)
アムダールの法則(PDF版はこちら)