ニュース
» 2009年10月07日 10時41分 UPDATE

NVIDIA GPU Technology Conference:次世代GPUアーキテクチャ「Fermi」の内部構造に迫る (1/2)

NVIDIAが9月末に行った技術イベントで最も注目を集めたのが、次世代GPUアーキテクチャ「Fermi」だ。GPUコンピューティングに最適化されるCUDAコアとは?

[笠原一輝,ITmedia]

 NVIDIAが米国で行ったGTC(Gpu Technology Conference)では、同社の戦略を開発者などに向けて発表しているが(その詳細については「これは壮大なコンピューティング革命の始まりに過ぎない」を参照のこと)、「Fermi」(日本ではフェルミ、英語の発音だとファーミ)のコード名で開発されてきた次世代GPUアーキテクチャについても概要が紹介された。G80(GeForce 8とGeForce 9シリーズに採用されたアーキテクチャ)、GT200(GeForce GTX 2xxシリーズに採用されたアーキテクチャ)に次ぐGPUアーキテクチャとなるFermiは、GPUコンピューティングに最適化された環境となる。

kn_gtc02_01.jpgkn_gtc02_02.jpg GTCで公開されたFermiのファーストシリコン(テスト向けに製造されたテストチップ)。TSMCの40ナノメートルプロセスルールを利用して製造されている(写真=左)。Fermiチップの裏側(写真=右)

大容量のデータを一度に処理するのに適したGPUコンピューティング

 GPU(Graphics Processing Unit)は、グラフィックス、特に3Dを処理するチップとして進化してきた。NVIDIAは、初代の3DチップとなるNV1以降、RIVA 128、そして、2000年にGeForceシリーズを投入し、3Dグラフィックスチップの市場でリーディングメーカーの1つに成長した。

 従来の3Dグラフィックスチップは、ポリゴンやレンダリングなどの処理を専用に行うハードウェアの集まりで、それらを固定機能として処理していた。しかし、2000年代に入ると「プログラマブルシェーダ」と呼ばれる技術が導入される。これによって、開発者が用意したプログラムを利用してGPUにある程度まで自由に処理を実行させることができるようになった。処理方法の自由度が増したことで、3Dグラフィックスのリアリズムも大幅に向上することになる。

 次いで、GPUを汎用プロセッサのように使えるプログラムを開発して実行させるアイデアが登場する。GPUにプログラムシェーダが導入されたことで、GPUに内蔵する演算エンジン(シェーダユニット)の性能強化に努めた結果、ベクトル演算を行うプロセッサとして使えるほどの計算能力を備えるようになったからだ。

 ベクトル演算は、現在のPCが行っている処理で多用されている。例えば、動画のエンコードや静止画の処理などが該当し、こうした大容量のデータを演算する場合はベクトル演算を得意とするGPUが圧倒的に有利になる。これに対して、現在のPCで使われているx86系のCPUは、ベクトル演算が得意ではない。x86系CPUでも、MMXやSSEのようなSIMD型の命令を実装したり、マルチコアにすることでベクトル演算の性能を上げる努力がされてきたが、もともとデータをシリアルに処理する方針で設計されたx86のアーキテクチャでは、ベクトル演算の性能はさほど向上せず、限界が見え始めていたのだ。

下位互換性とCPU命令セットの非依存を実現したCUDAの特徴

 GPUで汎用目的のベクトル演算を実行させようと、NVIDIAが2006年に発表したのがCUDA(当初、Compute Unified Device Architectureの略とされていたが、最近になってNVIDIAはこのことを公式に言明しなくなった)と呼ばれる環境だ。CUDAは特定の技術やプラットフォーム、チップなどの名前ではなく、統合された開発環境を示す名称だ。開発者向けに提供されている「CUDA SDK」(Software Development Kit)をダウンロードしてアプリケーションの開発に利用する。

 CUDAがユニークな点は3つある。1つはCUDAのアーキテクチャにおいて、GPUの命令セットアーキテクチャが規定されていないことだ。一般的に、CPUでは命令セットアーキテクチャが規定されており、プログラマはそれに沿ったプログラムを記述し、コンパイラと呼ばれるバイナリファイルを生成するソフトウェアを利用してアプリケーションの実行ファイルを作る。CPUは世代が変わっても命令セットアーキテクチャの下位互換性を確保することで、アプリケーションの互換性も維持する。

 これに対して、GPUネイティブの命令セットアーキテクチャは世代によって異なるため、GPUの世代が変わるとアプリケーションの互換性が確保できない。そこで、CUDAではPTX(Parallel Thread eXecution)と呼ばれる仮想の命令セットアーキテクチャを規定し、GPUのドライバがPTXをGPUネイティブの命令セットに変換して実行する。この仕組みによって、GPUの世代が変わってもアプリケーションの互換性が確保される。

 2つめの特徴は、CUDAで開発したアプリケーションにおいて、プログラム本体はGPUで実行しないことだ。CUDAで開発したアプリケーションは、x86系などのCPUでプログラムがロードされ、データ演算などをGPUで行う。プログラムを走らせるCPUアーキテクチャについて、アプリケーション開発者側はある程度意識して設計する必要があるが、基本的にはコンパイルの段階で指定すればいい。コンパイラが対応しているなら、x86系CPUだけでなく、ARMアーキテクチャのシステムで動くCUDAで開発したアプリケーションというのも理論的には不可能ではない。現時点で、ARM向けのGPUドライバというのをNVIDIAは提供していないが、将来的にはそうした可能性も十分にあり得るだろう。

 3つめの特徴として、CUDA環境においてアプリケーションの開発環境を自由に選べる点だ。NVIDIAは開発者がCUDAでアプリケーションを作成するときに利用できる言語としてC、C++、FORTRANなどを挙げている。そのおかげで、アプリケーション開発者は使い慣れている言語を利用してプログラムを記述できる。また、CPUとGPUのどちらで最も効率よく処理できるかを決定するのに利用できるデバッグツール(NVIDIAはGTCで「Nexus」と呼ばれる最適化ツールを発表した)なども用意している。さらに、PC用のGPUがプラットフォームとして利用できるので、開発したアプリケーションの実行環境が開発者側にも用意できるため動作検証も行いやすい。このように、CUDAでは、アプリケーション開発者が取り組みやすい環境が提供されているのだ。

 こうした特徴のおかげで、アーキテクチャが発表されてからわずか3年弱という短期間で、多くのアプリケーションがCUDAで開発されて登場しつつある。現時点では主にHPC(High Performance Computing)で実行される大量のデータ演算を駆使した分野が主で、天気予報や各種シミュレーションなどのプロユースのアプリケーションが多いが、コンシューマ向けでも、ペガシスのTMPGEnc 4 XPRESSやサイバーリンクのPowerDirector 8などのメジャーシリーズでCUDAで開発されたモジュールが組み込まれるようになってきた。

開発段階からGPUコンピューティングに最適化されるFermi

 CUDAに対応したGPUアーキテクチャとして、NVIDIAはG80(GeForce 8とGeForce 9シリーズに採用)とGT200(GeForce GTX 2xxシリーズに採用)をリリースしてきた。今回発表された「Fermi」はGPUコンピューティングに対応したGPUアーキテクチャとしては第3世代になる。なお、Fermiは、GPUそのものの開発コード名ではない。あくまでも「アーキテクチャ全体」を指しており、今後具体的なGPUの製品として開発が始まったときには、別の開発コード名が付与される。

 FermiがG80やGT200と大きく異なるのが「FermiはゼロからGPUコンピューティングのために開発してきたアーキテクチャ」とNVIDIA 社長 兼 CEOのジェン・セン・ファン氏が述べるように、GPUで汎用の計算処理をさせることを最初から想定したアーキテクチャになっていることだ。なお、GT200は、G80の進化版といえるバージョンだったので、FermiはCUDAに合わせてアーキテクチャを大きく変化させる初めての世代となる。

開発コード名 G80 GT200 Fermi
構成トランジスタ 6億8100万トランジスタ 14億トランジスタ 30億トランジスタ
倍精度浮動小数点演算能力 - 30FMA Ops/クロック 256FMA Ops/クロック
単精度浮動小数点演算能力 128MAD Ops/クロック 240MAD Ops/クロック 512MAD Ops/クロック
Warpスケジューラ(SMあたり) 1 1 2
特別機能ユニット(SFU、SMあたり) 2 2 4
シェードメモリ(SMあたり) 16KB 16KB 構成可能な48KB ないしは 16KB
1次キャッシュ(SMあたり) - - 構成可能な16KB ないしは 48KB
2次キャッシュ(SMあたり) - - 768KB
ECCメモリサポート - - あり
コンカレントカーネル - - 16個まで
ロード/ストアアドレス幅 32ビット 32ビット 64ビット

 Fermiの最も大きな特徴は、構成トランジスタ数が大幅に増えていることだ。NVIDIA 副社長のトニー・タマシ氏によれば、現在のテストチップは、TSMCの40ナノメートルプロセスルールに基づいて製造しており、トランジスタ数は30億個と、GT200の倍以上となっている。半導体の世界では、トランジスタ数と性能はほぼ比例する。FermiがGT200から大きく進化したことは、このトランジスタサイズの変化からも知ることができるだろう。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

この記事が気に入ったら
ITmedia PC USER に「いいね!」しよう