このページの本文へ

前へ 1 2 次へ

あなたの知らないWindows第20回

GPGPUをWindowsでサポートする「DirectCompute」

2010年01月07日 12時00分更新

文● 山本雅史

  • この記事をはてなブックマークに追加
  • 本文印刷

まずは「GPGPUとはなんぞや?」をおさらいしよう

 GPUの高機能化にともない、GPUをグラフィックス処理だけではなく、汎用プログラムを動かしてさまざまな処理をさせようというのが、「GPGPU」(General Purpose GPU)のコンセプトだ。

現在のパソコンは、CPUとGPUという2つの頭脳を持っている(PDC09資料より引用、以下同)

 例えば、GPGPUを利用すればCPUだけで処理するよりも、動画のエンコードやフォーマット変換(トランスコーディング)が高速化できる。GPGPUに対応しているサイバーリンク(株)の変換ソフト「MediaShow Espresso」では、1920×1080のHDビデオをiPod用のビデオ(解像度640×360ドット)に変換するのに、CPUだけと比べると40%ほど高速化されるという。もちろん、一概にすべての環境で40%高速化されるわけではないが、低速なCPUでもGPUを利用すれば、高速なトランスコードが可能になる。

現在のGPUは、2万円以下のグラフィックカードでも1TFLOSの性能を有している

 GPGPUはCPUのように、どんなプログラムでも高速に動作するわけではない。GPUのハードウェアを考えれば、物理シミュレーションや金融シミュレーション、ビデオ変換処理など、並列性を生かして単純なデータを一括処理する用途に向いている。

DirectComputeを使えば、画像を高速にFFT(フーリエ変換)できるGPUによるFFTの性能計測結果。DirectComputeでGPGPUを使えば、CPUだけに比べて2~5倍も速い

 最近のGPGPUの事例としては、長崎大学工学部と独立行政法人理化学研究所が、GPGPUを使ったスーパーコンピューターの開発で、IEEEのゴードン・ベル賞(価格性能比部門)を2009年末に受賞した事例が話題となった。このスーパーコンピューターは380台のGPUを接続して、158TFLOPSを実現している。天文学や流体力学に使われている「階層化N体シミュレーションプログラム」に特化しているが、「地球シミュレータ」の122TFLOPSを上回っている。

 GPGPUは、パソコンのパフォーマンスを大幅に向上すると期待されているが、肝心の対応アプリケーションがなかなか増えてこない。これは、NVIDIAやAMDなどGPUによって、プログラミング方法が異なるためだ。アプリケーション開発者が両社のGPUに対応しようとすれば、まったく異なるアーキテクチャーを持つNVIDIAとAMD用のプログラムを2つ開発しなければならない。ただでさえ、GPGPUのプログラミングは難しいのに、市場環境を考えれば、両社のGPUに対応するのは大変だ。

 こうした状況を改善すべく、GPGPU用ソフトウェア開発のための標準化技術が各方面で開発されている。そこにマイクロソフトが提案する技術が「DirectCompute」だ。


DirectXにDirectComputeを追加

 マイクロソフトは、Windowsプラットフォームで使用するグラフィックス機能のAPI群として、DirectXを提供している。DirectXはDirectX対応GPUと対になって、高速な2D/3Dグラフィックや高品質なテキスト表示(DirectWrite)などを実現しているのはご承知のとおりだ(関連記事)。

 DirectXはグラフィック表示に特化しており、GPUでグラフィック以外のプログラムを動かすためのAPI群は用意されていなかった。そのため、今までNIVDIAやAMDが規定した独自のAPIが使われていたわけだ。しかしDirectComputeは、グラフィック中心のDirectXに統合した形で、GPUにプログラムとデータを送り込む仕組みを実現する。

 また、DirectComputeのプログラムは、HLSL(High Level Shader Language)というプログラミング言語を利用する。HLSLはC/C++と似たプログラミング言語だ。ただしC/C++と異なるのは、プログラムを中間言語として実行する点にある。NVIDIAやAMDのグラフィックドライバーが、HLSLの中間言語を自社GPU用のコードに変換して実行させる。そのため、GPUメーカーが異なったり世代が異なるGPUでも、同じコードのプログラムをさまざまなGPUで動かせる。

HLSLのコード例。プログラミング言語としては、C/C++に似ている
HLSLのプログラムは中間言語(Intermediate language)に変換され、GPUメーカー提供のドライバーで各GPUのネイティブコードに変換される。中間言語を使うことで、GPUメーカーの違いは吸収される

前へ 1 2 次へ

この連載の記事

注目ニュース

ASCII倶楽部

最新記事

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン