PR

 「グラフィックスチップはどんどんプログラム性を増していって、やがてCPUに近づく!?」。最近、よく聞く話だけど、この見方は正しくもあり間違ってもいる。グラフィックスチップはどんどんプログラム性を高め、部分的にはCPUライクになるけれど、やっぱりCPUにはならない。では、CPUとグラフィックスチップは何がどう違うのだろう。

ストリームプロセッシングのためのプロセッサー

 グラフィックスチップがプログラム性を高めた理由は、よりリアルで微妙な3Dグラフィックスを実現しようとしたからだ。複雑で入り組んだ処理は、ソフトウエアでないと実装できない。だから、今のグラフィックスチップは、CPUに匹敵するような汎用的な命令を備えた演算ユニットを持つようになった。

 しかし、グラフィックスチップがプログラムを実行する仕組みは、CPUとはかなり違いがある。そもそも、グラフィックスチップの実行するプログラム自体が、CPUとは異なる。CPUは「汎用コンピューティング」プロセッサーとして、さまざまな汎用プログラムを実行する。それに対してグラフィックスチップが実行するのは、「ストリームプロセッシング」と呼ばれる処理に特化したプログラムだ。

 ストリームプロセッシングとは、名前の通り、連続的(ストリーム)に“流れ作業”で処理を行うこと。ストリームプロセッシングでは、「カーネル」と呼ばれる機能が、「エレメント」と呼ばれる多数のデータ群に対して連続的に一定の処理を行う。例えると、自動車工場の製造ラインに、シャシーだけの車(エレメント)が流れて来ると、製造装置群(カーネル)が流れ作業で車体の組み立て(プロセッシング)をするイメージだ。同じ作業を多数の要素に対して行う、これがストリームプロセッシングの特徴だ。

1_px500.jpg
ストリームプロセッシングとグラフィックスチップ
1_px500.jpg

 以前のグラフィックスチップでは、製造装置群(カーネル)は多数の専用ロボット(固定機能ユニット)で構成されていた。ところが、シェーダー世代のグラフィックスチップでは、製造装置群は、1個の汎用ロボット(プログラマブル演算ユニット)で、それをソフトウエア(カーネルプログラム)により制御して、柔軟に複雑な作業を行わせている。グラフィックス用語で言い換えれば、シェーダーユニットを、シェーダープログラムで制御している。

 さらに、実際のグラフィックスチップでは、製造ライン(実行パイプライン)は複数あって、並列に処理をしている。並列化しているのは、グラフィックス処理にパフォーマンスが必要なためだ。

 ピクセル処理を考えてみよう。各シェーダープログラムが処理するエレメントの数は、最大で画面解像度のドット数。各ドットごとに、グラフィックスチップの内部では、RGBA(赤、緑、青、透明度)の4個のデータを扱う。4個のデータをセットにしたSIMD(Single Instruction Multiple Data)型データに対して、グラフィックスチップは、数命令から多い場合は1000命令以上で構成するシェーダープログラムを実行する。シェーダープログラムが1つではなく、複数の場合も多い。画面を毎秒数十フレームで描き換え、そのたびにすべての演算を行う。