2007年現在,企業情報システムにおけるGPU(Graphics Processing Unit,3次元グラフィックス処理チップ)活用の話題が盛り上がっている。
「もっぱらゲームで活用されているGPUと企業情報システムとの間に,何の関係がある?」と思う方もいらっしゃるだろう。だが,ゲーム用のGPUを,汎用的な浮動小数点演算に利用しようとする“GPGPU”(General-Purpose computation on GPUs)と呼ぶコンセプトが,今まさに注目されているのである。
GPGPUという言葉自体は,決して新しいものではない。GPGPUのWebサイトは2003年から存在している。3次元グラフィックス処理のためのチップを3次元グラフィックス以外の用途にも利用できないだろうかと考えることは,GPUの供給サイドにとって自然なことだ。それがここへきて現実味を帯びてきた背景には,GPU製品の仕組みに変化が生じたり,価格性能比が向上したことがある。
かつて,“ゲーム機の業務利用”という文脈で語られていたのは,Linux搭載ゲーム機をクラスタリング接続したグリッド型スーパー・コンピュータに分散処理を実行させる,というものだった。これは,コプロセッサやアクセラレータといったチップ・レベルでの話ではなく,あくまでも粒度の粗い世界に過ぎなかった。PLAYSTATION3が搭載するCell Broadband Engine(Cell BE)も,マルチコアという点はGPUと共通するものの,米IBMのブレード・サーバーなど汎用的な用途に使われるCPUだった。
それがここへきて,GPGPUのブレイクを予感させる話題が次々と登場している。2007年10月29日には,米NVIDIAが,ハイエンドGPU「GeForce 8800」シリーズの廉価新版に相当する「GeForce 8800 GT」を出荷(関連記事「NVIDIAが200ドル台の3次元処理カード新製品,費用対効果に特徴」)。浮動小数点演算性能にして1チップあたり数百ギガFLOPSが3万円強で手に入るという,その価格性能比の高さが話題となった。
続く2007年11月15日には,GPU業界におけるもう一方の雄である米AMD(加ATI Technorogiesを買収)が,“GPUの仮想化”などと表現される,米Microsoftの描画APIの最新版であるDirectX 10.1に対応した最新GPU「ATI Radeon HD 3800」シリーズを出荷した(関連記事「AMD,ハイエンド・ユーザー向け新型GPU「ATI Radeon HD 3800」を発売へ」)。
従来のGPUと最新のGPUでは,処理能力の絶対値が異なるだけでなく,そのアーキテクチャも大きく異なっている。従来のGPUでは,典型的な3次元グラフィックス処理を実行する目的に特化して,専用にハードウエア回路が設計/実装されていた(複数のVertex ShaderやPixel Shaderを順番に並べたパイプライン)。ところが,最新のGPUは,GPUが提供する機能をプログラミング可能となっている(例えば,Vertex ShaderとPixel Shaderを兼ねるUnified Shaderを実現する)。より汎用性の高い使い方,すなわちGPGPUとしての使い方が可能になっている。
NVIDIAでは,こうした汎用性の高いプログラマブルなアーキテクチャをGeForce 8800シリーズで実現した。ハードウエアとしては,Stream Processor(SP)と呼ぶ,従来の専用演算ユニットを代替する汎用性の高い統合型演算ユニットを採用した(SPの数は128)。同時に,GPU向けのC言語開発環境やSDK(ソフトウエア開発キット)を用意した。このC言語開発環境は,北米を中心に20を超える大学において並列処理プログラミングの教育に用いられているという。
NVIDIAでは,Unified Shaderによる単なるシェーダ・パイプラインの効率化にとどまらない,汎用言語による汎用の開発環境を含んだGPU活用のコンセプトを,CUDA(Compute Unified Device Architecture)と呼んでいる。
なお,東京工業大学とMicrosoftの研究開発部門であるMicrosoft Researchの共同研究でも,現状のGPGPUを超える,より汎用性の高いGPU利用を促進する言語やライブラリ技術を開発中だ(関連記事「『産学連携の目的は社会の発展だ』,米MicrosoftのGupta副社長」)。
一方,AMD傘下の加ATI Technorogiesも,新しい規格への対応が早いメーカーである。最初に登場したと言われている統合型演算ユニットも同社製であり,Microsoftが2005年暮に出荷したゲーム機「Xbox 360」搭載のGPUに採用されている(統合型演算ユニットの数は48)。パソコン用では,2007年5月に出荷したGPU「Radeon HD 2000」シリーズで統合型演算ユニットを採用。ユニットの数は,上位機種のRadeon HD 2900XTで320個になる。
同社の最新型GPUであるRadeon HD 3800シリーズでは,Windows Vista SP1に搭載されるグラフィックス描画APIの最新版,DirectX 10.1に対応した。DirectX 10.1では,業務アプリケーションから見たGPUの仮想化を実現する。
グラフィックス・チップの仮想化とは,マルチタスクで動作する複数のWindows Vistaアプリケーションがグラフィックス・チップやグラフィックス・メモリーを同時に利用する際に,個々のアプリケーションに対してGPUリソースを適切に割り当てるという機能。GPUを利用するアプリケーションごとにGPUリソースを時分割する。ちょうど,サーバー仮想化ソフトがハードウエア資源を複数の論理サーバーに対して提供するように,DirectX 10.1環境下では,GPUリソースを複数のアプリケーションに提供する。
そもそもWindowsは,Direct X APIを用いて画面を描画する複数のアプリケーションを同時に動作させてGPUリソースを共有するという使い方ができなかった(1つのアプリケーションがGPUを占有していた)。それが,Windows Vistaからは,ドライバ・ソフトウエアの機能によってGPUリソースをアプリケーションごとに時分割して利用できるようになった。Direct X 10.1ではさらに進化し,GPU側でタスク切り替えやメモリー管理を実施できるようになる。
かつて,浮動小数点演算(科学技術計算)に特化した専用コンピュータに対抗するコンピュータとして,COBOL言語などによる業務処理プログラムを動作させる“汎用性の高い”,“多目的な”コンピュータが存在した。こうしたコンピュータは,その形態からメインフレームと呼ばれ,その用途から汎用機と呼ばれていた。そして現在,ゲームという用途に特化していたGPUが,多目的な浮動小数点演算をこなす“汎用的”なGPGPUに進化しようとしている。