GPU(Graphics Processing Unit)はもともと,3Dグラフィックスを描画するための専用ハードウェア,すなわち,3Dグラフィックスで同時多発的に発生する,頂点の座標変換や,ピクセルの陰影処理などにおけるベクトル計算を,CPUよりも高速に処理するためのプロセッサ「3Dグラフィックスアクセラレータ」として誕生している。
初期のGPUは,3Dグラフィックス処理において頻発する,典型的なベクトル計算に特化したハードウェア設計がなされた。そのため,ro rmt,「比較的シンプルなベクトル演算器を複数個実装する」形態からスタートしている。その後,3Dグラフィックスの表現力の強化が望まれるにつれ,シンプルなベクトル演算器だった演算コアは,より高度なソフトウェアを実行できるような,汎用プロセッサ的な機能を備え始めていく。また,演算コアの数自体も,製造プロセス世代が新しくなるにつれ,増加の一途を辿っていった。
そして,“GPUの汎用プロセッサ化”に,決定的な影響を与えたのが,プログラマブルシェーダ(Programmable Shader)だ。GPUの各演算コアにおけるプログラマビリティの向上は,プログラマブルシェーダ仕様(Shader Model,以下SM)バージョンアップの歴史に相当すると述べても,アイオン RMT,過言ではない。
プログラマブルシェーダの歴史は,DirectX 8時代におけるSM1.xの登場から始まる。GPUの演算コアでプログラム長に制限はあったものの自由にソフトウェアを実行できるようになったのだ。DirectX 9のSM2.0では浮動小数点演算に対応し,同じくDirectX 9のSM3.0では,より高度な条件分岐を伴ったソフトウェアを実行できるようになった。
Windows Vistaで導入されたDirectX 10世代のSM4.0では,さらなるプログラマビリティの向上と,プログラム長の(事実上の)撤廃が行われ,CPUに迫る複雑なソフトウェアロジックを実行できるようになっている。
GPGPUという概念が起こったのはDirectX 9時代となる2003年ごろからで,「3Dグラフィックス処理だけでなく,それ以外のソフトウェアも,GPUでアクセラレーションできないか」という研究が発端だった。
2004年8月には,世界初のGPGPU研究報告学会「GP2」(Workshop on General Purpose Computing on Graphics Processors)が開催されたが,本学会では発表者達が,GPGPUの抱えている問題を厳しく指摘していたことを筆者は印象的に記憶している,maplestory RMT。ノースカロライナ大学のFrederick P.Brooks,Jr.氏はGPUが仮想メモリを取り扱えないことに苦言を呈し,並列コンピュータを用いた原子レベルでの物理シミュレーションを研究しているLawrence Livermore National LabのMark Seager氏は,GPUが例外処理能力に乏しいことを問題視していた。
あれから4年以上。2009年のGPGPUでは,当時指摘された弱点をほぼ克服してきており,様相もかなり異なっている。
もともとCPUにとって重荷だった3Dグラフィックス処理のアクセラレータとして登場したGPUは,CPUの得意分野であるはずの汎用ソフトウェア領域にまで踏み込もうとしているのだ。
関連トピック記事: