Yasuoka Laboratory


0. なぜGPUコンピューティングが注目を浴びているか

 2006年11月にNVIDIAからCUDAが公開されて以来,多種多彩なプログラムがGPUで高速化されている.単なるグラフィックアクセラレータであるGPUが,科学技術計算などを実行する計算機として何故こうも脚光を浴びているかここで述べる.

 GPU(グラフィックカード,Graphic Proecssing Unit)とはコンピュータの部品の一つで,画像処理に特化したものである.用途を特定したハードウエアを設計すると,一般的な用途に対して作られているCPUなどで同じことを実行するよりも何桁も実効速度を向上できる.最近ではGPUは主にビデオゲーム用の画像の出力を目的としてゲーム機や消費者向けパソコンに搭載されており,大量に生産されている.プロセスの微細化により半導体設計の初期コストが高騰している現在,チップが大きな市場規模を持っているということは非常に重要で,例えばカスタム設計の高性能計算機を作ろうとしても相当の数売れないとチップの価格を抑えられない.そのため,GPUは最新のプロセスで製造可能な数少ないチップであるとも言える.

 いくら最新のプロセスでGPUの中に大量の素子が詰め込まれているとはいえ,画像処理しか実行できないのではGPUが他の分野から注目を集めることはない.このGPUが持っている高いポテンシャルをその他の分野に生かせるようになった直接のきっかけは,ユニファイドシェーダによる汎用性を持ったGPUの登場である.

 画像処理の中でも特に3Dグラフィック処理は,様々な異なる種類の処理を包括的に高速化することが求められている.そのため,例えば,ポリゴンの頂点に対する処理にはバーテックスシェーダ,頂点の集合情報に対する処理にはジオメトリシェーダ,テクスチャなどの情報の処理にはピクセルシェーダ,といったようにそれぞれの処理内容に対して専用の回路を設けるアプローチが標準的になっていた.このアプローチでは,チップの設計段階でそれぞれの専用回路を配置する割合を決定するわけだが,実際は各専用回路に渡される仕事量の割合が大きく変動し,特定の専用回路が動いている間に他の専用回路が休んでいる,という状態が発生していた.


図 GPUの内部構造の変化

 コンピュータグラフィックス処理の高速化に多くの人は特に関心を持っているわけではないが,GPUメーカがその後考えだしたアイデアがユニファイドシェーダ(Unified Shader)の採用である.ユニファイドシェーダとは,それまでのそれぞれのシェーダ(専用回路)に置き換わるもので,普通の四則演算なども実行可能な汎用的な回路である.汎用的な回路であるため,当然専用回路で全てを構成するよりも多くの面積・電力的な無駄が生じる.しかし,ユニファイドシェーダの採用には以下のような利点がある.

   - ソフトウエアのアップデートにより機能を後から増強できる
   - 特定の処理が全ての回路を占めることも可能になり,全ての回路を無駄なく稼働させられる
   - 画像処理以外も計算可能になり,新たな市場を開拓できる

 特に最後の点は,GPUメーカにとって重要なことである.最近では,大きな市場規模を持つ安価なPC向けに,CPUメーカがGPUを統合したCPUも発表しており,GPUメーカは高性能GPUチップを作り続ける意味を失いつつある.そんな中,例えばたくさんの大学・研究機関の計算機センターに大量のGPUが導入されることになれば,高性能GPUを低価格で提供し続けることが可能となり,CPUメーカの作る低性能・超低価格のGPU市場に対抗できるようになる.


図 それぞれのマーケットにおいてよく用いられるチップ(a:過去,b:ユニファイドシェーダの登場以降)

 ユニファイドシェーダを搭載したGPUは,数十〜数百本(数え方の定義は場合により異なるが)ものユニファイドシェーダを1チップに備える.画像処理以外のアプリを対象にしているユーザから見ると,そのようなGPUは数十〜数百ものFPU(浮動小数点演算ユニット)を持つ超並列チップとみなせる.CPUの場合はSIMD命令を使ったとしてもせいぜい16本とかなので,理想的にはGPUを用いることで何倍もの演算能力を手に入れられることになる.しかも,そのような高性能を数万円で手に入れられるというのだから,カスタムチップを設計するよりも遥かに低コストで済む.逆にCPUは何故同世代の製造プロセスを用いているのに並列度が少ないかというと,それは既存のCPUを対象としたプログラマの多くが並列計算を前提としたソフト開発を行っていないからである.CPUを高並列度チップにしたところで多くの演算機が使用されずに放置されてしまうので,演算器にリソースを割くよりはキャッシュのような高速で汎用的な記憶装置をチップ内に埋め込んだ方が良い,というのが現在のCPUの設計方針である.


図 CPUとGPUの持つ並列演算器

 それでは,GPUコンピューティングの将来はどうなるのか.CPUメーカの作るGPU付きCPUのGPU部分も,ある程度速くなるに違いない.そうすると,消費者向けパソコンやゲーム機に,敢えて独立したGPUを搭載する意味もなくなり,チップ当りの値段も今ほど安価には出来なくなるはずである.また,CPU自身もGPUと同じぐらいコア数を徐々に増やしつつる状況にある.かといって,GPUコンピューティングを否定は出来ない.なぜなら,今後のハイ・パフォーマンス・コンピューティング(HPC)において1チップ内の並列度が数百,数千,あるいはそれ以上となるのが当たり前になるからである.高並列度の環境では,プログラミングが困難になる.現在は,そのような時代に向けた変革期であり,我々はGPUコンピューティングを練習場所として高並列度プログラミングと当たり前のように付き合えるようにならなければならない.(文責:坂牧)


図 マーケットの動向の個人的な予想

コンテンツ

0. なぜGPUコンピューティングが注目を浴びているか
1. CUDAプログラミングを始める前に
2. インストールガイド
3. CUDAプログラミングの第一歩
ホーム


Yasuoka Laboratory