ニュース
» 2008年06月19日 11時30分 UPDATE

ゲームを超えるミッションとは──NVIDIAが「GT200」にこめたGPUの可能性 (1/3)

NVIDIAの新世代GPU「GeForce GTX 280」の性能はすでに紹介したが、“新世代”たる理由がほかにもある。ここではゲームにとどまらないGPUの可能性について解説する。

[笠原一輝,ITmedia]

 こちらの記事でも紹介しているように、NVIDIAが、6月16日に同社のハイエンドGPUラインアップ「GeForce 9800」シリーズの後継として「GeForce GTX 200」シリーズをリリースした。これまで「GT200」の開発コード名で知られてきた同製品は、240個の統合型シェーダユニットを内蔵しており、その演算性能は933GFLOPS、ほぼ1TFLOPSに達する。

 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の性能も要チェック項目となりつつある。

kn_gpgpu_01.jpg NVIDIA GeForceシリーズ・ジェネラルマネージャのユージャッシュ・デサイ氏
kn_gpgpu_02.jpg GPUがPCの汎用的な性能としてゲーマー以外のユーザーにも影響するスペックとして注目されてきている

現実的ではなかった一般用途アプリでの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を利用する汎用アプリケーションの普及に大きく影響するだろう。

kn_gpgpu_03.jpg CUDAのアーキテクチャ。CUDAではランタイムを利用してアプリケーションからの命令をGPUに伝え、GPUは与えられた命令を実行する
kn_gpgpu_04.jpg NVIDIAのG8x世代以降のGPUがCUDAに対応しており、NVIDIAが配布しているCUDAに対応したドライバをインストールするユーザーも増えているという
       1|2|3 次のページへ

Copyright© 2016 ITmedia, Inc. All Rights Reserved.