明確に現れ続けるシェーダアーキテクチャの違い

ここからは両者のブロックダイアグラムを見ながら、両者のアーキテクチャを読み解いていくことにしよう。

各社、汎用シェーダユニットの呼び名が異なるのでややこしいが、本稿ではStreaming Processor(SP)と呼称することにする。ちなみに、ATIはStream Core、NVIDIAはCUDA Coreと呼称している。これは各社のGPGPUプラットフォームブランドである「ATI Stream」と「NVIDIA CUDA」と無関係ではあるまい。

さて、ATIのRadeon HD 5870のSPコアは1600基あるが、これは、単体としては32ビット浮動小数点(FP32)のスカラプロセッサになる。このSPを5基一組とし、分岐ユニット、汎用レジスタ群を合わせたものを、Radeon HD 58x0では「Thread Processor」(TP)と命名している。

Radeon HD 5870の全体ブロックダイアグラム

Radeon HD 4870の全体ブロックダイアグラム(参考)

TPは16基集まって1つのクラスタを形成しており、これにはSIMD Engineという名称が付けられている。このSIMD Engineが10基集まって1つのクラスタを作っており、Radeon HD 5870では、これが二塊ある構成になっている。

図の描き方が違うので直感的には分かりにくいかも知れないが、10個分のSIMD Engineの一塊は丁度、先代のRadeon HD 4870の1個分に近いものになっているのだ。そう、Radeon HD 5870は、ズバリいうとRadeon HD 4870のシェーダコアを2つデュアル構成として、DirectX 11世代SM5.0対応へチューニングしたようなデザインになっているのである。

まとめると、

5SP×16TP×10SIMD Engine×2=1600SP

ということだ。

1TPあたりの基本的な構成は先代のRadeon HD 4800シリーズから大きく変化はない。FP32スカラ演算器は5基で構成されるが、うち1基は指数、対数、三角関数などといった複雑な超越関数(Transcendental Function)計算能力を持った特別仕様となっているのも、先代と同じだ。これに、前述したように、Branch Unit(分岐ユニット)、General Purpose Register(汎用レジスタ)群が備わり、TPの名にふさわしい「プロセッサとしての体裁」を実現している。

Radeon HD 58x0のThread Processor(TP)の構成。1TPは5SP出構成されるが、うち1SPは超越関数計算能力を持つ特別仕様

Radeon HD 58x0となってDirectX 11への対応を実現するための性能強化、さらなる性能向上の目的もあって、TPとしてはリファインが施されている。

まず、2×2ベクトルの内積演算命令の2命令同時実行や依存関係のある積算と和算の同時実行などを可能としている。TPはSIMDアーキテクチャなので、本質的には、そうした2命令を1命令語に割り当てた新しい命令語を新設したと言うことだ。この他、二つのアドレスに格納された数値データ間の差分の絶対値の総和を求めるSAD(Sum of Absolute Differences: 絶対差総和)命令、DirectX 11で対応必須となったbitカウント、bit挿入、bit取り出しなどの新しい二進論理演算も追加されている。

64ビット浮動小数点(FP64)の倍精度演算については大きな改良はなく、TP内の5SP(実動は4SP)がFP64に従事するアーキテクチャを継承している。

演算性能指標であるFP32時のFLOPS値は、1SPがFP32の積和算をこなすことができるので、

1600SP×2OP×850MHz=2720GFLOPS(2.72TFLOPS)

となる。FP64時はこの5分の1の544GFLOPSとなる。