イベント
NVIDIA,2014年を目処に「Tegra」で64bitアーキテクチャ採用。CUDAのオープン化でエコシステムの拡大を図る
当然,話題としてゲームの話が直接聞けるというものではなかったが,GPUメーカーであるNVIDIAがいま何を推進しているのかを知ることは,今後のゲームを考えていくうえでいろいろと参考になるはずだ。
というわけで,GTC Asia 2011で,筆者が見聞きしたことをまとめてお届けしてみたい。
関連記事:「GTC Asia 2011」基調講演レポート。2019年には100Wクラスのゲームコンソールが10TFLOPSを実現する!?
2014年を目処にTegraは64bitアーキテクチャを採用
GPUとCPUでメモリを共有する設計へ
そんななかで筆者は,「GPU Computing:Past Present and Future」と題された,NVIDIAのIan Buck(イアン・バック)氏がGPUコンピューティングの現状と将来をざっくりと紹介するセッションや,NVIDIAの各部門代表が質疑に応じるというセッションに参加することができた。これらのセッションを通して,NVIDIAが今後推進していくと思われる3つのソリューションが浮かび上がってくる。
- CUDA for ARM開発キット
- OpenACC
- CUDAコンパイラのソースコード公開
それぞれを順に説明していこう。まずは,12月15日の記事でもお伝えしている「CUDA for ARM」開発キットだ。実のところCUDA for ARMは,バルセロナ・スーパーコンピューティング・センターのHPCプロジェクト「EU Mont-Blanc」への採用がアナウンスされているので,新しいニュースというわけでもなかったりする。
CUDA for ARM開発キットの狙いについてBuck氏は,「これまでのHPCではPCに使われているx86 CPUが利用されていたが,このHPC向けCPUに大きなマーケットとしてARMが登場している。NVIDIAは,ARM CPUとCUDA GPUを組み合わせたプラットフォームを大学の研究者や開発者に提供し,x86上で動作するアプリケーションをARMへと移植することを支援する」と述べている。つまり,CUDA for ARM開発キットの狙いは,x86からARMへとアプリケーションを移行させることであり,言うまでもなく将来のTegraシリーズを見据えたソリューションというわけである。
とはいえ,現時点におけるCUDA for ARM開発キットは,既存の「Tegra 3」と「Quadro 1000M」を組み合わせたものであるため,ハードウェア的には将来のTegraシリーズがどうなるかのほうに注目が集まるのではないだろうか。
そんなCUDA for ARM開発キットであるが,現状のARM CPUにはいくつかの問題があったりする。まず1つめは,32bitアーキテクチャを採用している点である。ただ,ARMは,「ARMv8」という64bitの命令セットを発表しているので,Tegraが64bitアーキテクチャを採用するのは間違いない。
NVIDIAは,ARM互換コアを独自に設計して使用できるアーキテクチャライセンスを所持しているので,いずれは独自設計となることは間違いなかったのだが,Scott氏の発言からそれが現実のものとして見え始めたというわけだ。
続いて2つめの問題は,メモリ周りにある。現在の設計では,GPUメモリとCPUメモリとが完全に分離されているので,GPUとCPUとでデータのやり取りを行う場合にとても大きなオーバーヘッドが生じるというものである。ある程度の処理をGPUだけで行わないと効率が悪くなってしまうわけだ。
そのため,ARMが手がけるGPU「Mali」では,コヒーレント(CPUとGPUとでメモリおよびキャッシュを共有できる)なメモリモデルを実現していたりする。
CPUとGPUとを密に連携させるには,Maliのようなメモリモデルが望ましいのだが,このメモリ周りの問題に対してScott氏は,「将来,GPUはプロセッサに組み込まれる」と述べる。つまり,Mali同様にGPUとCPUで同じメモリを共有する形になるというわけだ。自然な方向性への進化ではあるが,HPC界の大御所とも言えるScott氏の口からはっきりと語られたことには,意味があると思う。
Gupta氏は,「NVIDIAは,CUDAによってすでにソフトウェアのエコシステムを築きあげており,ARMがハイエンドのGPUコンピューティング市場に参入するのは難しい」と述べ,GPUコンピューティングにおけるソフトウェアの重要性を強調していた。
加えてGupta氏は,「ARMとNVIDIAは,良好な関係を保っており,将来も両社が競合するようなことにはならない」とも語っている。
OpenACCによって
アプリケーションのGPU対応が容易になる
冒頭で挙げたNVIDIAが推進するソリューションの2つめが「OpenACC」だ。
OpenACCとは,GPU非対応のアプリケーションをGPU対応させることができるというプログラミング規格である。
CUDAを例に説明すると,CUDA対応アプリケーションでは,CPUで実行させるコードとGPUで実行させるコードを別々に記述しなければならないうえ,GPU向けのコードを「CUDA C」(Cg)言語で記述しなければならなかったりする。そのため,既存のアプリケーションをCUDA(GPU)に対応させるには,結構な作業が必要となっていた。
この既存アプリケーションのGPU対応を容易に実現するのがOpenACCというわけだ。
OpenACCでは,ソースコードにディレクティブ――コンパイラなどに指示するための命令のようなもの――を置いてGPU向けのコードを混ぜることができるようになっている。C言語とFortranをサポートしており,既存のアプリケーションの多くをGPU対応にすることができるのがウリだという。
もっとも,既存のソースコードにディレクティブを置くだけで,コンパイラが自動的にGPU向けのバイナリを出力してくれるというほど簡単なものでは(残念ながら)ない。現時点では,とくにメモリモデルを意識する必要があるようで,GPU向けの最適化が必須にはなる。そのため,既存のソースコードをGPU向けに手直しする作業が必要とのことだ。
ただ,先に触れたように将来のTegraでメモリモデルの問題がクリアになれば,より小さなコードブロックをGPUへと対応させることが可能になるため,OpenACCのようなプログラミング規格をより効果的に使えるようになるのではないだろうか。
セッションのなかでBuck氏は,「OpenACCよりもCUDAのほうが高い性能を発揮する」と前置きしたうえで,「HPCのユーザーは,コンピュータ研究者ばかりではない。OpenAACなら,科学者や経済学者がGPUを簡単に扱えるようになる」と説明していた。
そんなOpenACCは,オープンな仕様と銘打たれているものの,推進しているのがNVIDIA単独に近いという現状がある。しかし,Gupta氏は,「AppleがOpenAACに参加した」とOpenACCの広がりを強調し,「OpenACCは,Intelが注力しているMIC(Many Integrated Core)アーキテクチャを始め,さまざまなアクセラレータで利用できる」と語っていた。
なお,OpenACCと似たプログラミング規格としてMicrosoftの「C++ AMP」が挙げられるが,「HPCの90%はOSにLinuxを採用しており,OSに依存するC++ AMPよりも,OSに依存しないOpenACCのほうが優位だ」とGupta氏は言う。
CUDAコンパイラのオープン化で
GPUコンピューティングのエコシステム拡大を図る
NVIDIAが推進しているソリューションの最後は,「CUDAコンパイラのソースコード公開」である。GTC Asia 2011の開催に合わせる格好で,CUDAがLLVM(Low Level Virtual Machine)ベースのコンパイラを搭載し,そのソースコードが公開されたというニュースは4Gamerでも取り上げているので,覚えているという人も多いだろう。
CUDAコンパイラのオープン化については,「何が起こるか我々にも分からない。もっといいコンパイラが開発されるかもしれないし,Javaフロントエンドが作られるかもしれない。AMD製GPUや他社製プロセッサ向けのバックエンドが作られるかもしれない。いずれにしてもGPUをめぐるエコシステムの拡大に繋がるだろう」とGupta氏が語っていたのが印象的だった。
つまり,NVIDIAは,他社製品でCUDAが使えるようになる可能性よりも,エコシステムの拡大を重要視したというわけだ。
OpenACCのスタンスにもいえることだが,従来NVIDIAがとっていた囲い込みに近い戦略から,オープンな方向へと大きく舵を切ったような印象である。GPUコンピューティングに対するNVIDIAの自信の表れと言ってもいいのかもしれない。
さまざまなプラットフォームでCUDAが使えるようになれば,ゲームに採用される可能性も出てくるわけで,ゲーマーにもあながち無関係な話ではないのかもしれない。CUDAの今後の展開は注目しておきたい。