GPUというか並列処理の今後。プログラマはどうなるか


GPGPUについて調べたことを前回前々回で書いてみたので、今度は考えたことをまとめてみる。

GPGPUとはそもそも何か

GPGPUは、もともとグラフィック処理専用に使われていたGPUを、グラフィック以外の用途にも使えるようにしよう、という試み。


これは、CPUの性能向上が頭打ちになりつつあることから生まれてきたと言える。CPUでは、プロセスの微細化による性能向上が飽和してきたため、CPUコアを複数内蔵してマルチコア化が進んでいる。けれども、コアをいくつも乗せるのにも限界があると思われるので、この方向による性能向上もそのうち頭打ちになる。乗せれば乗せるほど大きくなるし、電力も増えるから、どんどんマルチコアにしていけばいい、というわけにもいかない。


そこで、GPGPUを使って、CPUでは出せないような高性能を達成していく、という方向性が考えられる。そもそも並列処理するためのプロセッサなので、マルチコア化を進める上での障害は小さい。というか既に数100スレッドというレベルのマルチコア化ができている。この方向性であれば、頭打ちになるCPUの性能を超えて、さらなる高性能を実現することが可能になる。

GPUとCPUの今後

今後GPUはコア数を増やして並列度を上げていけば性能を向上させることができる。CPUと違ってコアがシンプルだし、そもそも並列化するために設計されているので、並列化するほど効率が悪くなると言うこともない。

一方CPUは逐次処理を高速化するために進化してきているので、そのまま並列化すると効率が悪い。消費電力や熱が増える。だから今以上に並列化を進めて性能を上げるのは難しい。

CPUコアをもっとシンプルにしてマルチコア並列化を進めていこう、というプロセッサ(Larrabeeと呼ばれている)もインテルで開発されているが、基本がCPUなので、GPUの性能には勝てないのでは、と言われている。


プロセッサにさせたい仕事には、並列処理に向いた処理と、逐次処理に向いた処理がある。並列処理はGPUが得意、逐次処理はCPUが得意、となれば、これは自然と住み分けされていくように思う。GPUがどんなに進歩して処理能力が上がっても逐次処理の仕事がなくならない限りCPUが消えてなくなることはないし、逆にCPUがどこまで進歩しても並列処理でGPUにかなわないなら、GPUがなくなることもない。なので、CPU、GPUとが両立したまま今後も進んでいくのではなかろうか。
もしくは両者が統合されて1チップになっているか。その場合でも並列演算と逐次演算に分かれているものと思う。

プログラマは今後どうすればいい?

となると、並列処理向けプログラマが今後もっと必要になってくるかもしれない。並列処理のプログラムが書ければ逐次処理のプログラムもかけるだろうから、位置づけとしてはプログラマの中でも特殊な部類になるだろうか。


PCでは、今のところGPGPUはゲーム分野か動画エンコードくらいにしか使われてないように思う。それでも、ゲーム用途で3Dグラフィックスのパフォーマンスを発揮させるには並列処理のプログラムを書かなきゃいけない。ゲーム用に物理演算する場合も同様。このあたりでは今でも既に並列処理プログラミングの技術が必要になっている。


また、PCでの画像や動画といった大容量データの利用は今でも当たり前に行われているが、今後これがさらに進んでいく可能性がある。今はまだ画像や動画を見るのがメインで、たまに加工したり編集したりという作業を行う程度だが、今後は画像や動画といった大量のデータを自動で解析して、何かしらの仕事をやっておいてくれるようになるかもしれない。たとえば画像や動画の意味を認識してシーンごとにタグ付けしてくれたりとか。
スタンドアロンのPCに限らず、サーバで動くプログラムも考えればもっと用途は多いだろうと思う。

今後PCが扱うデータ量はどんどん増えていく方向にあるだろうから、これを高速に処理できる能力が必要になってくる。また、大量のデータを力づくで高速処理することで新たな価値が見えてきて、今は存在しないアプリケーションが生まれてくる、ということもありうる。そのとき高速に処理できるプログラムが書ける、並列処理のプログラミングができるプログラマが必要になってくるのではなかろうか。そう考えると、並列処理プログラミングはなかなか将来有望な分野かもしれない。


PC以外にも目を向けると、もっといろいろな可能性がある。

たとえばAV機器の分野。ここでは動画、音声を扱うことが前提なので、並列処理に向いた用途といえる。AV機器での画像や音声信号処理は、今は専用のハードウェアで処理するのが当たり前だが、ここを並列処理プロセッサで置き換えることが考えられる。これができれば、ハードウェアの開発とソフトウェアの開発が分離できるので、開発は大変やりやすくなる。現状では新しい機能を追加するたびにハードウェアを作り直さなければならないし、それにあわせたソフトウェアを新たに作る必要がある。それが、プロセッサが導入されることによってソフトウェアの変更だけで新しい機能を追加できるようになるし、ハード、ソフトを別々に開発しても何の問題もなくなる。ハード側は純粋に処理性能を追求すればいいし、ソフト側は信号処理アルゴリズムに注力できる。

先日発表されたCELL REGZAには並列処理プロセッサであるCELLが搭載されている。すでにAV機器への並列処理プロセッサの搭載はもう始まっている。こういう組み込み分野でも今後並列処理プロセッサが浸透していく可能性があり、そうなれば組み込みでも並列処理プログラミングが必要になるだろう。


また、たとえばロボットやコンピュータビジョンの分野。まだまだ研究段階の分野だが、ここでも並列処理プロセッサによる処理能力の向上が貢献するかもしれない。コンピュータに視覚を持たせるのが、コンピュータビジョンの目的だが、ここではきっと画像処理の性能というか処理速度が物を言うように思う。コンピュータに取り込む映像のフレームレートを超高速にして片っ端から処理にかける、という方法で物体の認識精度をあげる、という試みもある。こういった分野でも並列処理のプログラミングは必要とされるだろう。

まとめ

と、まあ、今ひとつまとまってないけれども、これから先、並列処理のプログラマ、というか並列処理のプログラミングスキルが必要になってくるんじゃないかな、ということを思ったので書き残してみた。
高速な並列処理ができる環境が手軽に手に入るようになれば、その処理能力を活かしたアプリケーションやサービスが新たに生まれてくるだろう。今は現実的でないと思われているようなアルゴリズムでも、力づくで処理してしまえるようになれば、それで新たな製品やサービスを作ることもできるだろう。
並列処理プログラミング、今のうちに始めておいてもいいかもしれない。