少なくない、GPUコンピューティングの課題
HPCのGPU利用がトレンドとなるなかで、GPUのすぐれた並列演算性能を活かすためにはHPCアプリケーションのGPU対応が不可欠となる。しかしながら、現在のGPUプログラミング環境は、CPUベースのそれと比べると、かなり取っつきにくいものであるのも確かだ。NVIDIAは、これまでもCUDAのC++対応やFortran対応など、GPUプログラミング環境の整備を進めてきた。そして、同社の次の一歩となるのが「GPUディレクティブ」の採用によって、GPUプログラミングの敷居を下げることだ。
GPUディレクティブとは、これまでCPUのみを対象としてプログラミングされてアプリケーションのコード内に、GPUで高速化が図れるループや並列処理に適した部分があった場合、追加コードを埋め込み、コンパイラ側がこの部分をGPUを活かせるようにするもの。NVIDIAは、このGPUディレクティブ環境をオープンスタンダードAPIとして普及させるべく、CrayやCAPS Eneterprise、Portland Group(PGI)などとともに、新しいCPU/GPUプログラミング規格「OpenACC」を立ち上げた。さらにNVIDIAは、同APIにより既存のプログラムを短期間でGPUアクセラレーションを適用した並列演算プログラムを構築できるようになるとして、「GPUディレクティブを用いれば、既存のHPCプログラムを4週間で倍の性能を得られる」(スコット氏)と、PGIともに「2x in 4 weeks」と呼ぶ、OpenACC対応コンパイラの1カ月無償トライアル版配布も行なっており、GPUアクセラレーションに対応したHPCアプリケーションの整備を急ぐ。
|
GPUディレクティブのオープンスタンダードとして普及させようとしているOpenACCコンパイラ環境をPGIとともにアピール。4週間で2倍の性能を引き出せるようになると、OpenACC対応コンパイラのトライアル版無償配布も行なっている |
ただし、この4週間で2倍という性能向上幅は、CPUの10倍以上の演算性能を謳うGPUを活用すると見た場合、実に控え目な数値ということができる。その意味では、OpenACCによるGPUディレクティブの適用は、当面はGPUが高速化できる部分の抽出と基本的なGPU並列処理対応を果たすのみで、GPUコンピューティングへの最適化作業は、別途行なう必要があると考えた方がよいだろう。それでも、既存のHPCアプリケーションの移植を容易にするという意味では、GPUディレクティブに対する業界の期待度は大きいと言えそうだ。
一方で、NVIDIAはCUDAをオープンソース化することで、より幅広いプラットフォームに移植できる環境を整える。その対象には、ライバルとなるAMD製GPUも含まれる。
最新のCUDA開発環境となる「CUDA 4.1」では、LLVM(Low Level Virtual Machine)ベースのCUDAコンパイラを採用し、そのソースコードを研究者やプログラミングツールベンダーなどに公開する。LLVMは、仮想化技術を取り入れることでプログラミング言語非依存を実現したオープンソースの中間言語コンパイラと、特定のプラットフォームでこの中間言語プログラムを変換し、動作させるバックエンドで構成される。CUDAをLLVMをベースとすることで、シングルコードであらゆるプロセッサ(CPUのみならず、GPU)にも対応させることができるようになる。NVIDIAによれば、CUDAコンパイラのソースコード提供先は、研究者やコンパイラ・ミドルウェアデベロッパに限られるが、「コンパイラベンダーや研究者がCUDAをライバルとなるAMD製GPUで利用できるようにすることも自由だ」と、同社でHPCビジネスを統括するスミット・グプタ氏(Director, Tesla High Performance Computing)は説明する。
なお、同氏は「CUDA 4.1ではLLVMの採用によって、各プラットフォームへの最適化が進み、同じCUDAプログラムのコードをコンパイルしても平均して約10%の性能向上が望める」と、そのパフォーマンスのよさもアピールする。
NVIDIAとしては、これらの取り組みによってHPCアプリケーションのGPU対応を加速するとともに同社アーキテクチャへの最適化を進めていくことで、MIC(Many Integrated Core)アーキテクチャでSGIとともにエクサスケールHPCの開発を推進するIntelや、AMDより優位な環境を構築しようという狙いもありそうだ。