米The MathWorks社は、GPGPUによって何が可能になるのかを示してくれている。同社は、自社のシミュレーション製品においてNVIDIA社のGPU をサポートすると発表した。そして、NVIDIA社のGPUを活用するために、一連の関数を開発した。それにより、ユーザーは、GPU用のコーディングの詳細を意識することなく、制御文を使用してプログラムフローの一部をGPUに割り当てることができる。
例えば、リスト1(a)は、CPUのみを使用してスペクトログラムを生成するためのコードである。これに対し、リスト1(b)、(c)が新たな関数を使用して同様の処理を記述した例だ。強調表示されているキーワードがリスト1(a)と異なっているところだが、それぞれ単一のGPU、複数のGPUへと配列計算を割り当てるものとなっている。
MathWorks社の並列コンピューティング開発チームを統括するJos Martin氏も、「AMD社、NVIDIA社ともに、一般的なユーザーが、自社のチップをより汎用的な処理に利用したいと考えるようになると予測している。そのため、自社製品に、レンダリング以外の広範囲にわたる機能のサポートを追加している」と述べている。
このような背景で追加された機能には、倍精度浮動小数点演算、線形代数演算、行列演算のサポートが含まれる。Martin氏のグループは、同社の「MATLAB」での利用を念頭に置き、IEEE準拠の倍精度浮動小数点演算機能を含むNVIDIA社の製品に着目している。実際、この機能に加え、FFT(高速フーリエ変換)などを効率的に計算する能力がGPUにあるならば、数値ライブラリの集合を構築する価値がある。
Martin氏は、「MATLABは、GPUの配列向け処理にそのまま対応し、配列形式の基本的な数値を表現することが可能なベクトルや行列を備えている」と述べている。
GPUは、グラフィックス処理から派生したモードでは、配列の各データ点に対して同一の処理を実行する。各処理は、カーネルが自身のメモリー空間で扱い、カーネル間の通信は行わない。MATLABのデータ形式は、そのままこの環境での並列化に対応可能なものとなっている。また、線形代数演算の追加によって、行列の乗算などの機能が実現される。なお、GPUが各処理を実行する間、データはGPUのメモリーに保持しておくことができる。
MATLABの開発チームは、現在、並列コンピューティング用のツールキットにおいて約100個の関数を実装している。そのすべてが次の同一の手法を採用している。それは、対象とするデータを配列にロードし、データをGPUにプッシュし、実行する処理を指定し、結果のデータ配列を収集してCPUに返すというものだ。
このようにして作られた関数を利用することにより、「通常、プログラムの実行速度は、CPUで実行するよりも4〜10倍高速になる」とMartin氏は説明する。特にFFT処理は、メモリーと各GPUとの間の帯域幅が広いこともあり、かなり高速に実行できるという。MATLABの開発チームは、CUDAのスレッドやブロックの構造を隠ぺいすることで、プログラミングモデルの複雑さを気にしなくて済むようにしている。
Copyright © ITmedia, Inc. All Rights Reserved.