GPGPUとは:グラフィックカードによる高速化のしくみ


GPU を用いた高速処理(GPGPU)は、 CUDA や OpenCL などの技術によりだいぶ一般的になってきました。 ここでは、そもそもなぜ GPU で計算すると速くなるのかを、簡単に説明します。


コンピュータでの図形描画方法

たとえば、画面上に四角形を描きたいとします。 描画したい人は、四つの頂点の座標と、四角形内部の色を指定します。 すると、コンピュータ内部では、以下のような処理を行います。

  1. 画面上のどこに各頂点を表示すればよいのか
  2. 四角形の内側に含まれるピクセルはどれか
  3. 四角形内側の各ピクセルの色はどうなるか

この内部処理を担当するのが、グラフィックカード(ビデオカード)に搭載されている GPU です。

細かく区分すると

1を担当するのが、頂点シェーダ [vertrx shader]
2を担当するのが、ラスタライザ [rasterizer]
3を担当するのが、ピクセルシェーダ [pixel shader]

となります。ピクセルシェーダは、フラグメントシェーダ [fragment shader] とも呼ばれます。 シェーダとは、陰影処理(shading)を行うプログラムをあらわす言葉です。


シェーダによる計算は、ひとつの図形を描画する間に多数実行されます。 下の図の四角形の例では、1の処理を頂点数分の4回、3の処理をピクセル数分の38回、行っています。

shader

高速に描画するため、 GPU は、並列化が可能な処理である1と3を行う小さなプロセッサを、大量に積んでいます。その数は2017年現在で、4000ほどになります。 つまり、 GPU は、日頃から大規模な並列演算を行っているのです。
この強力な並列計算能力を、画面描画以外の計算に流用できないか? として2006年頃から始まったのが、 GPGPU です。


一方、コンピュータでの通常の計算は、 CPU で行われています。 並列化ももちろん可能ですが、その数はせいぜい数十個です。 そのため、計算をうまく並列化できれば、 GPGPU により今までとは比較にならないほどの高速化を達成することが可能です。 グラフィックカードはハイエンドでも10万円以内(一部を除く)ですので、コストパフォーマンスも非常に高くなります。


シェーダプロセッサの呼称と変遷について

最初は、頂点シェーダを行うプロセッサ[vertrx shader units] と ピクセルシェーダを行うプロセッサ[pixel shader units] が分かれていました。 それでは効率が悪いということで、2006-7年ごろに2つのプロセッサが統合され Stream Processing (SP) units となりました。 NVIDIA 社では2009年ごろから SP units のことを cuda cores と呼んでいます。


また、現在では、頂点シェーダとピクセルシェーダ以外に、ジオメトリシェーダ [Geometry Shader] とコンピュートシェーダ [Compute Shader] が追加され、より計算がしやすくなりました。


余談

弊社が2005年の創業時に購入したパソコンの GPU は Radeon X300 で、頂点シェーダプロセッサが2基、ピクセルシェーダプロセッサが4基積まれていました。2017年現在で使用している GPU は、NVIDIA TITAN X Pascal で、cuda core は 3584基です。およそ12年で600倍となりました。