Radeon HD 2000シリーズは、汎用シェーダユニット5基を1単位として制御する構造を取っている。これをRadeon HD 2000シリーズではSIMD(Single Instruction,Multiple Data)ユニットと呼んでいる。汎用シェーダユニットの詳細については後述するが、5基の演算器を1組にして1単位としているあたりは従来のGPUでいうところの頂点シェーダユニットの構造によく似ている。

このSIMDを複数集めひとかたまりとして管理しているのがRadeon HD 2000シリーズの特徴で、これを特に「SIMDアレイ」(SIMD Array)と呼んでいる。

理解を整理する意味で、ここで製品ラインナップごとに、全体ブロック図をもう一度みながら確認してみよう。

Radeon HD 2900シリーズではSIMDアレイは4つあり、1SIMDアレイあたりに16SIMDがある。1SIMDあたり5基の汎用シェーダユニットがあるので、4SIMDアレイ×16SIMD×5基=320基の汎用シェーダユニットがあるという計算になる。

Radeon HD 2600シリーズはSIMDアレイが3つ。ただし、1SIMDアレイあたりに8SIMDしかない。1SIMDあたりに5基の汎用シェーダがあるのはHD 2900シリーズと同じなので、3SIMDアレイ×8SIMD×5基=120基の汎用シェーダユニットがあるということになる。

Radeon HD 2400シリーズはSIMDアレイが2つ。ただし、1SIMDアレイあたりに4SIMDしかない。1SIMDあたりに5基の汎用シェーダがあるのはHD 2900シリーズと同じなので、2SIMDアレイ×4SIMD×5基=40基の汎用シェーダユニットということになる。

ウルトラスレッド・ディスパッチプロセッサ(Ultra-Threaded Dispatch Processor)

ディスパッチプロセッサの中の2基ずつある調停ユニットとシーケンサは、相対するSIMDアレイに接続されている点に注目して欲しい。このことから、Radeon HD 2000シリーズのアーキテクチャでは、1SIMDアレイあたりに異なる2スレッドを実行させるアーキテクチャになっていることが分かる。これは異なる2スレッドをSIMDアレイに実行させた方が、SIMDアレイ中の汎用シェーダユニットが休むことなく常にフル稼働させられる可能性が高いだろうという目論みからだ。1SIMDアレイが1つのプロセッサだと仮定すれば、この考え方は、インテルCPUのHyper-Threadingに代表される同時マルチスレッディング(SMT:Simultaneous Multithreading)に近い発想だといえるかもしれない。

同時に実行が行われるのが2スレッドというだけであって、調停ユニットは、スレッド実行のストールを発見すると、どんどんスレッドを入れ替える動作を行う。

スレッドの切り替えの起点となるのが、テクスチャアクセス=メモリアクセスだ。

例えば、汎用シェーダユニットがテクスチャアクセスに遭遇した場合、これはメモリアクセスであるため、実際にメモリの内容を読んでくるまでに、そのスレッドの実行が一時停止してしまう。これを関知すると調停ユニットとシーケンサはこのスレッドを直ちに眠らせ、別スレッドの情報を持ちだして、そのSIMDアレイに別スレッドを実行させるのだ。例え対象データがキャッシュに載っていても、テクスチャアドレス計算やフィルタ処理などがある。その待ち時間は小さくないので、やはりスレッド切り替えは行われる。

さて、テクスチャアクセスもメモリアクセスだが、頂点シェーダやジオメトリシェーダから頻発するであろう、頂点情報の読み出しもメモリアクセスに相当する。そうしたメモリアクセスの順序などを統括制御するのが、「テクスチャ読み出し調停ユニット」(Texture Fetch Arbiter)や「頂点読み出し調停ユニット」(Vertex Fetch Arbiter)だ。そしてこれらに対応するシーケンサなども、このディスパッチプロセッサの中に内包される。

ディスパッチプロセッサは、汎用シェーダユニット達の仕事を管理する人材派遣会社のような役割を果たすだけでなく、「メモリアクセスの遅延(レイテンシ)をいかに隠蔽するか」というリソース・マネージメントも行っているのだ。

ディスパッチプロセッサは、Radeon HD 2000シリーズにおける"司令塔"の役割を果たしていると言ってもいいだろう。