共にベースアーキテクチャは先代を踏襲する

GeForce GTX 280の汎用シェーダユニット(Shader Processor,Streaming Processor,以下SP)はGeForce 8800シリーズの128基から2倍近い240基へと増加させられた(GTX 260では192基)。しかし、SPの1個1個はGeForce 8800シリーズと同様の構成で、32ビット浮動小数点(FP32)演算器、整数演算器、比較移動命令ユニットからなっている。

なお、このシェーダコアの部分はGeForce GTX 200シリーズでは、汎用ロジックではなくカスタムロジックでの実装を果たしたと発表されている。カスタムロジックは汎用ロジックを採用するよりも開発期間が長くかかり、コストも高くなるが、その代わり、より高速な動作が可能となる。おそらくNVIDIAは55nm採用の次世代GeForceでも大幅なアーキテクチャ変更は行わずに、このシェーダコアを流用するつもりなのだろう。また、今世代で言えば、冷却システムを高効率化したより高クロックバージョンのUltraモデルの登場もあるのかもしれない。

GeForce GTX 280の全体ブロック図

GeForce GTX 280のSP(Thread ProcessorはGPGPUモードでの呼び名)は32ビット浮動小数点(FP32)演算器、整数演算器、比較移動命令ユニットから成っている

GeForce GTX 200シリーズのSPは8基で1グループとしてまとめられ、8SPで共有される16kBの「共有メモリ」(Local Memory:LM)、「命令デコードユニット」(Instruction Unit:IU)と組み合わせた構成を「ストリーミングマルチプロセッサ」Streaming Multi-Processor:SM)として処理系の一単位としている。

SM=1IU+8SP+1LM。TPC=3SM+8TF+L1CACHE

各SMは、IUでデコードした命令に応じて必要な数のSPを起用してスレッドを立ち上げる。例えばベクトル計算ならば複数のSPを起用したスレッドを立ち上げることになる。

16kBのLMは8基のSPから共有利用されるが、キャッシュメモリとしてはなく、8基のSP間の連携動作に用いられる。GPGPUモードにおいて、LMは複数のSPを用いたベクトル演算のための連携情報やデータ移動、比較命令実行のための中間データ保持用に活用される。また、GPUモードに限ってはジオメトリシェーダの動作用の一時的メモリとしても活用される。

「1IU+8SP+1LM」からなるSM3基と8基の「テクスチャフィルタユニット」(Texture Filter:TF)と、「L1キャッシュ」(L1 Cache)とて1クラスタをなし、このクラスタにNVIDIAは「スレッド・プロセッサ・クラスタ」(Thread Processor Cluster:TPC)という名称を与えている。

GeForce 8000/9000シリーズでは2SM+8TF+L1CACHEで1TPCをなしていたが、GeForce GTX 200シリーズではSMの個数を1個増やして1TPCをなすように改変された。

240SPにするならばGeForce 8000/9000シリーズのアーキテクチャの2SM=1TPCのままTPCの数を8(8SP×2SM×8TPC=128SP)から15(8SP×2SM×15TPC=240SP)にすることでも実現できたはずだが、GeForce GTX 200シリーズでは3SM=1TPCとしてTPCの数を10個(8SP×3SM×10TPC=240SP)に増やしている。これはなぜか。これは、TPC間を結ぶ内部クロスバーバスの複雑性をなるべく上げずに、トータルなSPの数を増やすための最善案だと推察される。

GeForce 8800 GTXの全体ブロックダイアグラム(参考)

Radeon HD 4800シリーズの方も、基本的には先代のRadeon HD 3800シリーズをベースにしたアーキテクチャを採用している。先代Radeon HD 3800シリーズがRadeon HD 2900シリーズのDirectX 10.1改変版ということを踏まえればベースアーキテクチャはRadeon HD 2900シリーズだといっても間違いではないだろう。

Radeon HD 4800シリーズのブロックダイアグラム

SPの個数はRadeon HD 3800/2900シリーズの320基から一気に二倍以上の800基に増加させられた。

一基あたりのSPはFP32の積和算器をコアにしたスカラプロセッサで、これを5基ひとまとめとし、これに5SPで共有使用されることになる分岐ユニットを合わせた単位を「SIMDユニット」としている(SIMD:Single Instruction Multiple Data)。

各SPは32bit浮動小数点積和算、整数計算、論理演算、比較演算といった機能を有しており、ブロックダイアグラム中、右端の大きなSPには、その基本機能に加えて、指数、対数、三角関数などの複雑な超越関数(Transcendental Function)計算能力も与えられている。ちなみに、この「5SP=4SP+1ビッグSP」という構成はRadeon HD 2000シリーズの頃から受け継がれてきているアーキテクチャだ。

1SIMDユニット=4SP+1ビッグSP+分岐ユニット

なお、今回のRadeon HD 4000シリーズにおけるアーキテクチャ改変に際してビッグSPにだけでなく、4基のスタンダードSPにもビットシフト命令の処理機能を与えたとしている。ATIによればこれは動画のデコード処理、エンコード処理、暗号生成、暗号解読などをGPUで行うGPGPU処理時に有用であるためだという。

この「4SP+ビッグSP+分岐ユニット」から成るSIMDユニットが16基集まってクラスタを形成しており、ATIはこれを「SIMDコア」と呼んでいる。つまり、まとめると1SIMDコア=16SIMDユニットであり、1SIMDコア=16SIMDユニット×5SP=80SPという関係性/階層構造になっているということだ。実は、この構成もRadeon HD 3800/HD 2900シリーズから変わっていない。

Radeon HD 3800シリーズの全体ブロックダイアグラム(参考)

Radeon HD 3800/HD 2900シリーズではSIMDコア4個から成っていたので80SP×4SIMDコア=320SPが搭載されていた。

Radeon HD 4800シリーズでは1SIMDコア=16SIMDユニット=80SPという構成を変えずにSIMDコアを10個に増やし、80SP×10SIMDコア=800SPを搭載させている。

さて、もう一度全体ブロックダイアグラムに立ち戻り、その他の機能ブロックについても目を向けてみよう。

全体ブロックダイアグラム最上段にある「コマンドプロセッサ」(Command Processor)はPCI Expressバスを通じてドライバから送られてきたコマンドを処理し、その下の「セットアップエンジン」(Setup Engine)は、後段フェーズにて各SIMDユニットが頂点/ジオメトリ/ピクセルいずれかのシェーダユニットとして起用された時に必要なデータを揃える役割を果たす。そしてセットアップエンジンの次に用意される「ウルトラスレッド・ディスパッチプロセッサ」(Ultra-Threaded Dispatch Processor)は各SIMDユニットを遊ばせることなくこき使うために、どのSIMDユニットを"何々"シェーダユニット(頂点/ジオメトリ/ピクセルのいずれかのシェーダ)として起用するかを制御する。

ところで、SIMDコアに目を向けると、ここにはなんともGeForce的な、興味深い拡張が施されたことに気づかされる。

それは「ローカル・データ・シェア(LOCAL DATA SHARE)」と呼ばれる16kBの共有メモリの存在だ。

そう、これはGeForce GTX 200シリーズのシェーダコアでSM(8SP)で共有されていたローカルメモリ(LM)に相当するものと言っていいだろう。これはSIMDユニット(5SP)で実行したスレッドの結果を他のSIMDユニット(5SP)で共有連携するために利用される。

これに加え、SIMDコア(16SIMDユニット)をまたぐようなデータ共有、データを媒介した処理連携のために16kBサイズの「グローバル・データ・シェア(Global Data Share)」も搭載される。

この2つの「データ・シェア」……ローカル・メモリは単なるキャッシュではなく、多目的メモリ(スクラッチパッドメモリ)的な活用に対応するものだ。これは主にGPGPUで利用するために設けられた機能ブロックともいえ、3Dグラフィックス用途では(すなわちFireStreamではなく、Radeonとしてでは)おそらく使用される機会がほとんど無いか、あるいはそれこそ逆にキャッシュメモリ程度に使われる程度だと思われる。

なお、Radeon HD 2900/3800シリーズ時から、そしてRadeon HD 4800シリーズにも「MEMORY READ WRITE CACHE」が搭載されているが(全体ブロックダイアグラム参照)、これはジオメトリシェーダからの出力や、DirectX 10新機能のストリーム出力などの、シェーダコアからの出力をバッファリングするためのものであり、データ・シェアとは役割が異なる。

SIMDコア部分のクローズアップ。ローカルとグローバル、2つの共有メモリの追加がトピック