AMD社とNVIDIA社のグラフィックスカードの関連ドキュメントにおいて、それぞれ「ATI Stream」、「NVIDIA CUDA」という語を検索すると、両社の取り組みの概要について知ることができる。ちなみに、NVIDIA社は、CUDAという語をCompute Unified Device Architectureと展開して記載することはほとんどなく、この語を同社独自のブランドとして使用している。
AMD社のATI Stream、NVIDIA社のCUDAのいずれに対しても、チップに実装するソフトウエアのプログラミングのためにSDK(ソフトウエア開発キット)が提供されている。両社とも、コードの作成者がタスク全体における適切なセグメントをフォーマットし、それらのジョブをGPUに引き渡し、GPUが最も得意とする処理を実行させ、その処理結果をメインのプログラムフローに返すためのC言語拡張に相当するものを提供している。
また、両社ともにOpenCL(Open Computing Language)というフレームワークをサポートしている。同フレームワークは、標準化団体のKhronos Groupによって管理されている。同団体は、自らを「広範囲にわたるプラットフォームやデバイス上で、並列コンピューティング、グラフィックス処理、動的メディア処理の実現と高速化を可能にするためのオープン規格を構築する業界団体」と定義している。
OpenCLは、アクセラレーションの有無にかかわらず、GPUとその他のCPUの両方を含む複数のプロセッサアーキテクチャにわたって移植可能な並列処理コードを高速化するための手段を提供することを目的としたものだ。OpenCLという名称は、その開発者らが、広く使用されているグラフィックスプログラミング用のAPI(Application Programming Interface)であるOpenGL(Open Graphics Language)に似せて命名した。2つの言語がともにGPUプラットフォームを使用するというのがその理由だったのだが、この名称によって、かえってわかりにくく、紛らわしい状況になってしまったかもしれない。
Khronos Groupは、OpenCL 1.1仕様を2010年6月にリリースした。これには、OpenCLとともに使用するためのC++用ラッパーAPIが含まれている。OpenCL作業部会の会長で、Khronos Groupのプレジデント、およびNVIDIA社のバイスプレジデントを務めるNeil Trevett氏は、「OpenCL 1.0の18カ月後にリリースされたOpenCL 1.1によって、プログラマは、既存のOpenCLのコード資産を無駄にすることなく、並列コンピューティングのリソースをより効果的に活用できるようになる」と述べている。
Khronos Groupによると、「OpenCL 1.1には、3成分ベクトル、その他の画像フォーマットといったデータ型など、並列プログラミングの柔軟性とパフォーマンスを向上させるためのより多くの機能が追加されている」という。
OpenCL 1.1作業部会には、OpenCLプロジェクトを発足させた米Apple社、英ARM社、米Broadcom社、スウェーデンEricsson社、米Freescale Semiconductor社、米IBM社、米Intel社、フィンランドNokia社、ルネサス エレクトロニクス、スイスSTMicroelectronics社、同ST-Ericsson社、英Symbian社、米Texas Instruments社などが名を連ねている。この事実からも、GPGPUの概念が普及しつつあることがうかがえる。
ARM社のプロセッサ部門で技術/システム担当バイスプレジデントを務めるPete Hutton氏によると、同社はさまざまな自社製品においてOpenCLをサポートすべく取り組んでいるという。同氏は「OpenCL 1.1により、当社のパートナーが提供するGPU、CPU、その他のデバイスを搭載する高性能コンピューティングシステムで革新が促進されるだろう」と述べている。
GPGPU関連のあるユーザーフォーラムに、「OpenCLは、GPUメーカーのネイティブフォーマットを理解しなくても済むほど十分に進化しているのか」という質問が寄せられた。これに対し、別のユーザーからは「私はそう思う。バグは存在するが、どのような新しいソフトウエアにもバグは存在する」との回答が寄せられている。
AMD社のウェブサイトには、OpenCLに関する取り組みについて、同社の見解を示すチュートリアルが掲示されている。また、さまざまな種類のCPU/GPUにわたって動作する並列処理コードを高速化するという同社の目標についても説明されている。
チュートリアルに含まれるビデオで、AMD社は、「OpenCLはデータ並列またはタスク並列のカーネルベースのモデルをサポートする」と説明している。 OpenCLをサポートするホストマシンは、SIMDまたはSPMD(Single Program Multiple Data)形式の1つ以上のデバイスに接続されることになる。OpenCLによって、ユーザーは、GPUに実行させる処理をキューに投入する手段を得る。
また、AMD社のビデオでは、「OpenCLのコーディングには、厳格なメモリー管理手法が必要だ」と述べられている。OpenCLは、プライベート、ローカル、ローカル‐グローバル、ホストといった複数種のメモリーを認識するが、それらを包括する同期メカニズムは存在しない。ユーザーは、メモリーに入出力するデータのフローを管理し、明示的に同期とりの処理を行う必要がある。
OpenCL、CUDA、ATI Streamのいずれを使用する場合も、開発プラットフォームに対する投資が少なくて済むというメリットがある。パソコンに、グラフィックスカードが搭載されていさえすればよい。あるいは、米PGI(Portland Group)社が最近発表した計画を採用するならば、それさえも必要ないかもしれない。
PGI社は、STMicroelectronics社傘下の高性能コンピューティングコンパイラメーカーであり、32/64ビットのx86アーキテクチャをターゲットとするCUDA Cコンパイラを開発している。このコンパイラは、2010年11月に米ニューオーリンズ州で開催されたスーパーコンピューティングのカンファレンス『SC10』でのデモに向けて準備されていた。
このCUDA Cコンパイラにより、NVIDIA社のGPUを搭載するか否かにかかわらず、x86ベースのワークステーション、サーバー、クラスタで動作するCUDAアプリケーションをコンパイル/最適化することができる。ホストがGPUを搭載していない場合、アプリケーションは、複数のコアと、Intel社およびAMD社のCPUのストリーミングSIMD機能を利用して並列処理を実行する。PGI社は、単一の並列プログラミングモデルを使用して、多くのコアを搭載するGPUとマルチコアCPUを利用したいと考える開発者のために、このCUDA Cコンパイラを開発した。
Copyright © ITmedia, Inc. All Rights Reserved.