こちらの記事でも紹介しているように、NVIDIAが、6月16日に同社のハイエンドGPUラインアップ「GeForce 9800」シリーズの後継として「GeForce GTX 200」シリーズをリリースした。これまで「GT200」の開発コード名で知られてきた同製品は、240個の統合型シェーダユニットを内蔵しており、その演算性能は933GFLOPS、ほぼ1TFLOPSに達する。
【表:GeForce GTX 280とGeForce GTX 260の比較】 【他の画像】 NVIDIAはこのGeForce GTX 200シリーズを、ハイエンドGPUとしてだけでなく汎用プロセッサとしても考えており、エンコードや科学演算などの新しい利用場面を訴求している。
●Windows Vistaの登場前後で変わったGPUの任務
NVIDIAのGeForceシリーズジェネラルマネージャのユージャッシュ・デサイ氏は、GeForce GTX 200シリーズの設計思想を、「ゲーミングを超えたGPUの利用場面を意識した製品」と説明する。3Dゲームの描画以外に、GPUにできることとはなんであろうか。
現在のPCでは、CPU(Central Processing Unit)とGPU(Graphics Processing Unit)という2つのプロセッサが同居している。このうち、CPUはOSの起動や一般的な演算を担当し、GPUはグラフィックス周りの処理、例えば3D画面の描画や動画の再生を担当するというように役割を分担してきた。
しかし、OSがGPUを利用するのはウインドウを描画するときにアクセラレーション機能を使う程度で、GPUの主な用途と言えば3Dゲームぐらいだった。日本ではPCゲームが欧米ほどプレイされないこともあり、せっかくPCに備わっているGPUの処理能力がほとんど使われていない状況だ。国内の大手PCメーカーが投入しているラインアップで、ミドルレンジ以上のGPUを搭載した製品が少ないのも、こういう事情が影響している。
だが、GPUの3D描画機能をOSで多用するWindows Vistaが登場してから、状況は大きく変わりつつある。Windows Vistaの新しいユーザーインタフェースとして導入されたWindows Aeroは、GPUの3D描画機能を利用して画面を描画する。このため、Windows Vistaを快適に利用するためには、CPUやメモリというこれまでのPCで重視されてきたパーツだけでなく、GPUの性能も考慮する必要がでてきた。ゲームをやらないユーザーにも、PCを購入するときにチェックするパーツとして、CPUやメモリ、HDDなどといった従来の重要ポイントと並んで、GPUの性能も要チェック項目となりつつある。
●現実的ではなかった一般用途アプリでのGPU利用
「これからのPCはCPUだけじゃだめだし、GPUだけでもだめだ。CPUとGPUをバランスよく使えること、それが重要だと考えている」とデサイ氏はいう。GPUの得意な分野はGPUに、CPUが得意な分野はCPUにという考えだ。NVIDIAでは、こうしたCPUとGPUという2つのプロセッサがそれぞれ得意な分野を分担するような環境を、“Optimized PC”と呼んで、これをユーザーに訴求するためのマーケティング活動を行っている。
GPUはベクトル演算と呼ばれる複数の計算の並列処理を得意分野としている。例えば、科学技術演算や、同じような演算を繰り返す圧縮や解凍、動画データのエンコードやトランスコードなどは本来GPUが得意とする分野なのだ。最近ではCPUもMMXやSSEなどの拡張命令でそうした演算ができるようになっているが、基本的には整数演算に最適化されているので、GPUほどはベクトル演算が得意でない。
しかし、現在ではベクトル演算もCPUを利用して処理することがほとんどだ。その最大の理由は、GPUを利用するためのAPIなどが整備されてこなかったことだ。3Dゲームに関しては、Direct3DやOpenGLといった、標準化された、または事実上の標準と広く認識されているAPIが存在している。開発者側は標準のAPIを利用すれば、どのGPUでも同じようにプログラムを動作させるようにコードを書くことができる。
しかし、それ以外の用途に利用しようとなるとGPUに用意されているネイティブの命令セットをプログラマが理解し、かつ、それをアセンブラと呼ばれる機械語で記述するか、Direct3DやOpenGLを通じて利用する必要があった。前者の場合は理解が非常に難しいうえに、GPUのネイティブ命令セットが公開されていないという問題があるし、後者の場合には、汎用アプリケーションを作るプログラマが3Dグラフィックスに詳しくないため、Direct3DやOpenGLという3Dグラフィックス専用のAPIを理解する必要があるという問題を抱えていた。
こういう状況では、ユーザーがプログラマに“エンコードとデコード処理でGPUを利用するプログラムを作ってほしい”と要望しても実現は難しい。このように、従来の開発環境では一般的な用途でGPUを利用するのは、不可能ではないが、現実的ではなかったのだ。
●CUDAが変える“汎用”GPUの開発環境
この問題を解決するためにNVIDIAが以前から用意しているのが、「CUDA」と呼ばれるソフトウェアプラットフォームだ。
CUDAには大きく分けて2つの側面がある。1つはユーザーのPCで動作するランタイムで、CUDAに対応したGPUを搭載するPCにインストール(実際にはドライバと一緒に導入される)すると、そのPC上でCUDA向けに作られたアプリケーションを実行できるようになる。なお、CUDAは現在Windows XPにのみ正式対応しており、Windows Vistaに関してはβ版となっているが、今回のGeForce GTX 200シリーズの発表にあわせてCUDA 2.0と呼ばれる最新版を公開し、Windows Vistaにも正式に対応するようになる。
CUDAのもう1つの側面は、プログラマにとってメリットとなる開発環境の改善だ。CUDAを利用すると、プログラマは、CやC++の拡張機能として、GPUを利用する機能を利用できるようになる。プログラマは使い慣れたC言語を利用してGPUを利用したアプリケーションを開発できるわけだ。プログラマに余計な負担をかけることなくGPUを利用したアプリケーションの開発が可能になるというのは、GPUを利用する汎用アプリケーションの普及に大きく影響するだろう。
●GeForce 8800 GTXの倍近い演算性能を実現するGeForce GTX 280
NVIDIAのテクニカルマーケティング担当副社長 トニー・タマシ氏によれば、GeForce GTX 200シリーズは、こうしたCUDAを利用して作成されたアプリケーションを利用するプラットフォームとしても意識した設計になっているという。「GeForce GTX 200シリーズはゲーム用途の利用だけを意識した従来のGPUとは異なる設計思想を持っている。具体的にはコンピューティングプラットフォームとしての側面を意識した設計になっている」とタマシ氏は述べ、それを実現するためにGeForce GTX 200シリーズのマイクロアーキテクチャの設計は行われていると説明した。
GeForce GTX 200は「Thread Processor」と呼ばれるプロセッサコアを240個内蔵する。それぞれのThread Processorは整数演算器と倍精度(64ビット)の浮動小数点演算器を備え、8個のThread Processorで「Thread Processor Array」という単位を構成する。それぞれのThread Processor Arrayは16Kバイトのローカルメモリを備えている。さらに、3つのThread Processor Array(=24個のThread Procesor)で「Thread Processing Cluster」という単位が構成され、それぞれが1次キャッシュメモリを備えている。
こうした構造をとることで、GeForce GTX 200シリーズでは3万を超えるスレッドをGPU全体で処理できるようになっている(前世代のGeForce 8/GeForce 9シリーズでは1万前後)。こうした演算器の増加や効率の向上などにより、GeForce 8800 GTXが533G FLOPS(FLOPSとは1秒間に実行できる浮動小数点演算の数)だったのに対して、GeForce GTX 200シリーズの上位モデルとなるGeForce GTX 280では933G FLOPSと倍近い性能を実現している。
もちろん、GeForce GTX 200シリーズではグラフィックス処理における性能向上も図られている。NVIDIAによると、倍精度の浮動小数点演算をサポートしたため、テクスチャ処理の性能が向上しているほか、ジオメトリシェーダの処理能力が向上しているという。このほかにもレジスタファイルが倍になり、シェーダプログラムを実行する効率が向上するなどの特徴を備えている。
●エンコードをGPUに任せて全体の性能をアップする
NVIDIAは、GeForce GTX 200シリーズの発表にあわせてCUDA対応アプリケーションをいくつか紹介している。1つはAdobeのPhotoshop CS3を利用したデモで、デジタルカメラで撮影したRAW画像を展開してそれを加工する処理をGPUで行っている。通常、RAW画像を読みこんで加工する場合、CPUを利用して演算を行うとそれなりに時間がかかり、加工後の状況をライブビューで確認するのも難しい。しかし、GPUを利用して描画と加工を行うことで瞬時に読み込みを完了させ、ズームなどの加工作業を軽々と行うことができるようになる。
さらに、米国のElemental Technologiesが作成した、GPUを利用したエンコードソフトウェアのデモも紹介された。「BadaBOOM Media Converter」と呼ばれるそのソフトウェアは、CUDAの導入によって利用可能となったGPUを利用してメディアファイルのトランスコードやエンコードを行う。NVIDIAが行ったベンチマークテストによれば、動作クロック1.8GHzのデュアルコアCPUに比べて、MPEG-2からMPEG-4 AVCへのトランスコードを18倍も高速に行うことができたという。
●プロセッサコア240個の“280”と192個の“260”
GeForce GTX 200シリーズには、GeForce GTX 280とGeForce GTX 260という2つのモデルが用意されている。
大きな違いはThread Processorの数でGeForce GTX 280が240個搭載しているのに対して、GeForce GTX 260は192個となっている。また、コアクロックやメモリクロックが異なっているほか、メモリ容量はGeForce GTX 280が1Gバイト、GeForce GTX 260は896Mバイトとなっている。トランジスタ数は140億トランジスタ、TSMCの65ナノメートルプロセスルールを利用して製造される。
●7000“ペタ”FLOPSが世界中のPCで眠っている
NVIDIAがGeForce GTX 200シリーズのリリースで訴求するメッセージは明快で、GPUは単に3Dゲームをやるためだけのものではないということだ。GPUを利用したPhotoshopやトランスコードのデモでも分かるように、ベクトル演算を得意とするGPUの特徴を生かすことで、PC全体の処理能力を大きく引き上げることが可能になる。
日本のPC市場において、このメッセージは非常に重要だ。欧州や北米、アジアなどの国と比べて、日本ではPCゲームがあまり盛り上がっていない現状があるからだ。このため、せっかくPCに搭載されているGPUも、単に3D系ベンチマークテストを実行するだけの無駄な半導体となってしまっていた現状がある。
しかし、GPUを利用してPhotoshopやトランスコードの処理が速くなるなら、日本のPCユーザーでも利用する機会が増えるわけで、「PCゲームをやらないからGPUなんて、Windows Aeroが表示できれば十分」と考えていたユーザーをGPUに振り向かせることが可能になる。
もちろん、そのためにはGPUを利用したアプリケーションを世界中のプログラマやISVに作ってもらう必要があり、NVIDIAがやるべきことはまだまだ多い。
スタンフォード大学の「Folding@home」という分散コンピューティングプロジェクトを推進するビジェイ・パンデ教授は、GPUによる汎用コンピューティングの可能性について、以下のようなコメントを述べている。「重要なことはCUDAに対応した7億個のGPUが世界中にあることだ。平均100GFLOPSの処理能力があるとして、合計で7万P FLOPS(P=ペタ、ペタはテラの1000倍)もの処理能力がすでに存在していることを意味している。このうち、0.1%をFolding@homeに使ったとしても、70P FLOPSの処理能力を使えることを意味する」
ちなみに、文部科学省が進める「汎用京速計算機」のプロジェクトでは10P FLOPSのスーパーコンピュータを2010年までに開発するとしているが、すでに、それを上回る処理能力が世界中のコンピュータの中で眠っているということだ。
この業界では常に「ニワトリが先か、卵が先か」という議論が繰り返されるが、少なくともCUDAに関しては知らないうちにGPUとして強力なプロセッサが「卵」としてユーザーのコンピュータの中に存在している。あとは、この卵をどのようにかえしていくか、それがNVIDIAに求められているのではないだろうか。
【関連キーワード】
GPU |
GeForce 自作 D・I・Y(Doooon to Itte miYo!) アップグレードするならCPUよりGPU──NVIDIAが訴求するPC拡張プラン NVIDIA、HPC向け新GPUブランド「Tesla」発表