【レポート】

「CUDA」技術の全貌 - GeForce 8800を汎用ベクタプロセッサとして活用!?

1 GPGPUでは制約が多すぎる

    西川善司  [2006/12/19]

    CPU並のプログラマビリティを身につけたDirect X10世代プログラマブルシェーダ4.0仕様(SM4.0:Shader Model4.0)対応GPUの活躍の場を広げる意味合いから、NVIDIAはGPUにグラフィックス以外の汎用アプリケーションを走らせる「CUDA」構想を発表した。

    命令指向コンピューティングとデータ指向コンピューティング

    コンピューティングには2タイプがあるとNVIDIAは分析する。1つは「命令指向」(Instruction Centric)、そしてもうひとつは「データ指向」(Data Centric)だ。

    「命令指向」(Instruction Centric)コンピューティング

    CPUの進化の方向性

    「データ指向」(Data Centric)コンピューティング

    GPUの進化の方向性

    CPUが取り扱うテーマはまさしく「命令指向」であり、複雑な構造を持ったタスクがシーケンシャルに実行されていく。その処理の際に取り扱うデータはタスク毎に独立していて、しかもばらけていてランダム性が高い。

    だからこそCPUはいかにしてプログラム実行を高速に行えるかにフォーカスした進化を見せてきたし、それは長らく高クロック化だったわけだ。最近ではハードウェアマルチスレッディングやマルチコアという技術革新を取り入れるに至っている。

    「データ指向」とは大量のデータを処理するというテーマのコンピューティングだ。(2D/3Dの区別なく)グラフィックスというテーマはまさしくこのタイプのコンピューティングだ。音声データ、統計データなどの処理もこのタイプのコンピューティングだといえる。あるいは認識処理、データ解析などもそうだろう。

    データ指向のコンピューティングは処理が非常に反復的で、取り扱うデータが(その内容のばらつきはともかく、配置としては)規則正しく列んでいるのが常であり、それぞれのデータ処理において他のデータとの関連性が低く(データ処理の順番に結果が依存しない)並列処理が行いやすいという特徴がある。

    さて、GPUはまさしくデータ指向のコンピューティング向けプロセッサであり、グラフィックスに特化して進化してきたわけだが、当初、その進化は「一度に処理するデータ量を増やす」ことに集中し、これは「処理パイプラインの増加」という形で実現されてきた。

    CUDAのプレゼンテーションを行なう「GeForceの父」こと、NVIDIAチーフサイエンティスト、David Kirk博士

    このあと、GPUは「新しいグラフィックス処理をソフトウェアの形で実装しよう」とプログラマビリティの獲得へと走る。そして、続く進化で浮動小数点演算能力を身につけた時点から、「GPUをグラフィックス以外で用いたら面白いのではないか」という発想が生まれることとなる。

    それが「GPGPU(General Purpose GPU)」と呼ばれるパラダイムだ。

    GPGPUとは、グラフィックス処理専用プロセッサであるGPUをデータ指向のコンピューティングに転用してみようという発想であり、前述の音声データ処理、統計データ処理、認識処理、データ解析といった処理をGPUで行ってみようというものだ。

    ただし、GPUはもともと3Dグラフィックス描画のために設計されたプロセッサなので(当たり前だが)、そうした活用を行うには、取り扱うデータをテクスチャとして振る舞うように細工したり、勝手に不用意なスケーリングが行われないように入力データとなるテクスチャ解像度と出力データの書き出し先となるフレームバッファを1対1に対応させるための「おまじないのような頂点シェーダプログラム」を用意したり……と変な工夫が必要であった。また、変数量が限られたていたり、仮想メモリの仕組みを持たないビデオメモリでは取り扱えるデータ量に上限があったり、不都合も少なくはなかった。

    GPGPUは確かに面白いテーマだが、万人向けのコンピューティングメソッドとしてはあまりにも特殊で制約が多すぎたのだ。

    データ指向コンピューティングにはCPUとは違ったアーキテクチャが求められる

    新着記事

    特設サイトの情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      マイナビニュースマガジン