まずは「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メーカーの違いは吸収される |
|---|
この連載の記事
- 第26回 メモリー使用量と性能を改善する7のカーネル改良
- 第25回 DirectXで進化したInternet Explorer 9を試してみた
- 第24回 MinWinとVirtual DLLで変わるWindowsカーネル
- 第23回 なぜWindows 7のカーネルはVistaより軽量化できたのか?
- 第22回 周辺機器を使いやすくするDevice Stageの利点と問題点
- 第21回 Windowsの画面表示を変えるDirect2DとDirectWrite
- 第19回 SSDサポートにさらなる一歩を踏み出したWindows 7
- 第18回 32bitアプリを64bit Windows 7で動かす「WOW64」
- 第17回 パブリックベータが開始された「Office 2010」
- 第16回 Internet Explorer 9のデモが公開 PDC09レポート1
- この連載の一覧へ





















