PR

 今、CPUとGPU(グラフィックスチップ)は明らかに異なるプロセッサーだ。構造も違うし、プログラミングの方法も違う。でも、これから10年後には、この2つのプロセッサーの間に根本的な違いは無くなってしまうかもしれない。構造もプログラミングの方法も似通ったものになり、違いは、命令を実行する時の並列性をどうやって実現しているか、だけになってしまうだろう。

命令の並列性に重点を置いていたこれまでのCPU

 CPUは1つのデータに対して順番に命令を実行し、GPUは多数のデータに対して並列に命令を実行する。CPUとGPUの違いを簡単に言ってしまうとこうなる。しかし、今、両者は、互いの特徴を取り込みつつあり、将来は部分的に重なり合うようになる。

 CPUとGPUの進化のコースが変わったのは2002年ごろ。それまで、かけ離れていた2つのプロセッサーが、両側から同じゴールを目指して進化を始めた。CPUはマルチコアへ向かい、GPUはDirectX 9からプログラム可能なプロセッサーへと向かった。2008年の現在はまだ、両プロセッサーには大きな違いはあるが、両者が交差するコースは見え始めている。今回は、CPUの進化を中心に、2010年代のプロセッサーがどうなるのかを見てみよう。

 プロセッサーの性能を上げる原則は簡単だ。1クロックに、できるだけ多くの並列処理を行うことだ。問題は並列に処理する方法がいくつもあることで、どの方法を採るかによって、プロセッサーのアーキテクチャーは全く違うものになる。

 CPUの場合は、まず、1つのデータに対して1つの命令を実行するところからスタートした。IntelやAMDのCPUでいうと486までがその時代で、並列に処理することは考えず、ただシンプルに1命令をできるだけ早く処理しようとしていた。

 次のフェーズはPentiumやK5以降で、命令を並べ替えて、1クロックに1つ以上の命令を実行できるようにした。これまで1クロックで1命令だったのが2~4命令を実行できるようになって、性能が飛躍した。これが「命令の並列性(ILP:Instruction Level Parallelism)」で、CPUはこの部分にフォーカスしてきた。

 ところが、プログラムの中の命令を入れ替えることは限界がある。そこで、CPUメーカーは、命令の並列性とは別な方法も徐々に取り入れてきた。

 方法の1つは、これまでのようなスカラー(1命令で1つのデータを扱う)演算ではなく、ベクター(1命令で複数のデータを扱う)演算を使うことだ。IntelとAMDは、MMXやSSE、3DNowでベクター演算を取り入れた。ベクター演算で多くのデータを一度に処理することは「データの並列性(DLP:Data Level Parallelism)」と呼ばれ、古くから知られていた。マルチメディアデータなどの場合は、データの並列性で効率良く処理できる場合が多い。