NVIDIAが7月30日に開催した「GTC Japan 2013」においてGPU Computing Software部門のジェネラルマネージャのIan Buck氏から、GPUソフトウェアの将来像について話を聞いた。Buck氏はCUDAの生みの親であり、現在もNVIDIAのGPUソフトウェア開発の中心となっている人物である。
GTC Japan 2013で基調講演を行うIan Buck氏 |
今回のGTCにおいて、NVIDIAがコンパイラのメーカーであるPGI(Portland Group International)を買収したことが発表された。これに関して、NVIDIAとPGIの分担はどうなるのかを質問したところ、PGIは、これまでのコンパイラのライセンス・販売を続ける。しかし、NVIDIAの一員となったので、MaxwellやVoltaといった将来のGPUやCUDA6/7の技術情報にアクセスできるようになり、より緊密な協力が行えるようになる。また、PGIは良い技術をもっており、将来的にはより広い協力が可能になると考えているとのことであった。また、CUDA自体についてはNVIDIAが開発を継続するとのことで、近い将来、分担が大きく変わることは無いようである。
現在、GPUのプログラミングはCUDAを使うのが主流であるが、標準化が進んでいるOpenCLやOpenACCとCUDAの位置づけを聞いたところ、OpenACCは、理論の数式をCやFORTRANプログラムに置き換えるという使い方をしている科学者に、簡単にGPU並列計算を使えるようにするもので、CUDAとは位置づけが大きく違うという。
また、OpenCLはCUDAと似ている面もあるが、OpenCLは、OpenGLと同様にGPUデバイスを制御するという思想で作られた言語であるのに対して、CUDAは、C言語をベースに並列計算のための最小限の拡張を付け加えたもので、デバイス制御とは逆方向の拡張を目指すものであり、方向性が違うという回答であった。ということで、NVIDIAとしては、独自のCUDAと標準のOpenCL、OpenACCともに開発を進めるようである。
基調講演でも次のスライドが示されたが、Buck氏は、将来の挑戦課題として、ユビクタス並列プログラミングと電力に着目したコンピューティングを挙げた。
現在では、OpenMPやOpenACCのような並列化ディレクティブはあるが、言語自体が並列性を記述する機能を持っているものはCUDAなどの一部の言語だけである。しかし、マルチコアCPU、超マルチコアGPUが広く使われるようになり、C++、JAVAやFORTRANなどで言語レベルの並列性の記述の検討が始まっているという。将来的には、どの言語でも並列性を記述する方向に進むというのが、Buck氏のビジョンである。
もう1つのチャレンジは消費電力を意識したプログラム作成である。短時間に計算できるやり方が計算に必要なエネルギーが少ないとは限らず、電力と計算時間のトレードオフを考え、消費電力低減をコンパイラの最適化の目標として実行コードを生成する。しかし、これは、まだ、アカデミックな研究の段階で、実用化されるのはずっと先になるとのことであった。