後藤弘茂のWeekly海外ニュース

整数パフォーマンスを犠牲にする? AMDの「Bulldozer」



●CPU設計の大きなターンであるBulldozer

 AMDが2011年に投入する次世代CPUアーキテクチャ「Bulldozer(ブルドーザ)」。この新アーキテクチャで、AMDは大きな決断をした。それは整数パイプを細くすることだ。

 Bulldozerは、2個のCPUコアを融合させたモジュールを基本単位としている。1つのモジュールの中に2つの整数コアを備え、2スレッドを並列実行する。それぞれの整数コアは、内部命令である「uOP(MicroOP)」で4uOPs/Cycleの帯域となっている。これは、現在のK7/K8/Hound(K10)系の整数ユニット群の6uOPs/Cycleの帯域より少ない。

 つまり、Bulldozerの整数パイプ群で実行できる命令のピーク実行帯域は、現在のCPUコアの2/3になる。その分、整数オペレーションのピークパフォーマンスが低くなる。内部命令の実行帯域としては、K6系に近い(ただし、並列実行の制約はBulldozerの方が緩和されていると考えられる)。整数演算パフォーマンスと効率性のトレードオフで、AMDは後者を取ったと言えそうだ。

 数世代もアーキテクチャを後戻りさせるように見えるAMDの選択の意図は明白だ。CPUコアの効率を高めることだ。内部命令の実行帯域を狭めれば、CPUのパフォーマンス効率はより高くなる。ダイ面積当たり、あるいは消費電力当たりのパフォーマンスが高くなる。

 また、整数演算パフォーマンスもクリティカルなほどには落ちない可能性も高い。現行のK7/K8/Hound(K10)系の整数コアも、6uOPs/Cycleのピークを達成できるチャンスはそれほど多いわけではないからだ。だから整数パイプの幅が2/3になったからと言って、Bulldozerの整数コアの実効性能は2/3ほどは落ちない可能性が高い。また、現状では多くのアプリケーションで整数性能はボトルネックにはなっていない。さらに、CPU構造の簡素化で、CPUの動作周波数を上げることができれば、低下分を埋め合わせることができるかも知れない。

 しかし、かつては広げる一方だった整数パイプの幅を狭めるというのは、かなりリスクのある選択だ。その点で、AMDは思い切った決断をしたことになる。

AMDのアーキテクチャ比較

●CPUアーキテクチャの時代の変化が来る?

 AMDの転換を一言で言うと、シングルスレッドの整数演算パフォーマンスを求める方向から、マルチスレッドや浮動小数点演算パフォーマンスを重視する方向への転換だ。これまでは、IntelとAMDともに、シングルスレッドの整数演算パフォーマンスを追求した基本設計のCPUコアを複数載せてマルチコア化を図ってきた。しかし、AMDはBulldozerで、整数演算パフォーマンスを犠牲にしても、効率を上げるという大転換を図ることになる。

 「ILP(Instruction-Level Parallelism)」よりも、「スレッドレベルの並列性(TLP:Thread-Level Parallelism)」と「データレベルの並列性(DLP:Data-Level Parallelism)」へと向かう転換だと言い換えてもいい。ここ数年、AMDは、CPUアーキテクチャの時代区分の移行を唱えて来た。その中で、シングルコア時代からマルチコア時代を経て、Bulldozerの前後からは「ヘテロジニアスシステム時代(Heterogeneous Systems Era)」に入ると説明している。AMDは明確な意図を持って、この転換を行なおうとしている。

 この戦略が裏目に出るか、それとも大当たりになるか。行方はまだ一切見えない。しかし、その是非は、AMDだけでなく、パーソナルコンピューティングというもの自体の方向性を左右する大きな試金石になるかもしれない。

 x86以外のCPU業界全体を見渡しても、このポイントは論議を呼んでいる。Sun Microsystemsのようにシングルスレッドの整数演算パフォーマンスを切り詰めてでも効率を追求するメーカーもある一方で、シングルスレッドの整数演算パフォーマンスは維持しようとし続けるアーキテクチャも多い。アーキテクト達も、ここで踏み切るかどうか、見解が分かれているように見える。

CPUアーキテクチャのトレンドと性能
AMDのアーキテクチャの推移

●Bulldozerの命令発行とパイプラインへの疑問

 AMDでBulldozerの開発をリードしたAMDのChuck Moore氏(Corporate Fellow and CTO Technology Development)は、今年(2009年)11月に開催した「2009 Financial Analyst Day」で、Bulldozerの命令発行の仕組みを次のように説明した。

 「(デコードユニットは)スケジューラに命令を1サイクルに4命令ディスパッチできる。また、1つの整数演算スケジューラは4命令を(実行パイプに)発行(Issue)できる。FPスケジューラも4命令を発行可能で、もう1つの整数演算スケジューラも4命令を発行できる」。

 「これ(整数コアの図中の4本のパイプライン)が示しているのは命令パイプラインだ。それぞれの整数スケジューラは、4命令/サイクルで実行できる」。

 下のBulldozerの図は、こうしたAMDの説明に基づいている。その結果、いくつかの疑問を耳にするようになった。1つは、命令発行の数が合わないというもの。

 Bulldozerでは、1個の共有命令デコーダから、2つの整数コアと1つの浮動小数点ユニットの3つの実行ユニット群それぞれのスケジューラに命令を送る。整数コアは、それぞれ別スレッドを並列実行する。CPUをフルに稼働させるには、命令デコーダから2つの整数コアに命令を送り続けなければならない。それには、2つの整数コアそれぞれに4個の命令、合計で8個の命令を1クロックに供給しなければならない計算になる。命令デコーダから4命令しか発行できないとすると、一見すると、充分な数の命令を供給できないように見える。これが疑問だ。

 よりCPUアーキテクチャに突っ込んだ疑問になると、次のようになる。整数演算コアに対して命令スケジューラは、x86命令に相当する内部命令を4個発行できるのか、それとも、x86命令を砕いたuOPを4個発行できるのか。

 同じ疑問を、実行ユニット側のパイプラインの構成に言い換えると次のようになる。実行パイプラインは、整数演算パイプと、ロード/ストアのためのアドレス生成パイプのペアが2組で4パイプなのか、4組で8パイプなのか。あるはパイプ数は、上段の命令発行幅と一致しないのか。

●命令デコード帯域は整数パイプの実行帯域と一致する

 これらは、実は全て根は同じ疑問で、相互に結びついている。そして、後段については、すでに冒頭で書いたように、Bulldozerの整数命令スケジューラは整数ユニットに4個のuOPを発行することがわかっている。そして、整数コアの実行パイプラインは、uOPを4並列実行できる構成だ。AMDによると、整数演算パイプが2つ、ロード/ストアパイプが2つの合計4パイプだという。

 そうすると、命令デコーダとのバランスもすっきりと解決する。Bulldozerの命令デコーダは、最大で4個のx86命令をデコードできると見られる。Bulldozerと現在のAMD CPUで、デコーダの基本的な仕組みが似ていると仮定すると、4個のx86命令は、4個の複合型内部命令「MacroOP」に変換されると考えられる。

 命令デコーダが、4個のMacroOPを整数スケジューラに発行するとして、各MacroOPはそれぞれがピークで2個ずつのuOPに分解されると仮定する。すると、ピークで8個のuOPが各サイクルに供給されることになる。

 ところが、スケジューラから実行パイプに発行できるのは、ピークで4個のuOPだ。すると、命令デコーダから発行されたピークで4個のMacroOP(=8個のuOP)を実行ユニットに発行するには、最短でも2サイクルかかる。2サイクルの間に、命令デコーダは、別な4個のMacroOPをもうひとつの整数コアに発行できる。典型的には、命令デコーダは交互に4個のMacroOPを、2つの整数スケジューラに発行し続ければ、実行パイプを充填するに足るだけの命令を供給し続けることができる計算になる。

 このように、Bulldozerの整数コアの構成は、命令デコーダの構成とぴたりと合っている。ピークで回す場合にも、命令を充填し続けることができることになる。

Bulldozerのデコーダ
Bulldozerアーキテクチャの命令デコーダ

●FUSION時代を見据えたBulldozerのアーキテクチャ

 Bulldozerアーキテクチャでは、整数パイプを細くする一方で、浮動小数点ユニット群は並列度を実質的に上げて共有リソースにした。これも分岐点になって行く可能性がある。というのは、浮動小数点ユニットをオンダイの共有コプロセッサのように扱う構成が、将来のデータ並列コアの統合の形態も示唆しているからだ。

 Bulldozerの構成を発展させるなら、AMDは将来、共有の浮動小数点ユニットとして、よりワイドなデータ並列ユニット群を実装する可能性もあるかもしれない。AMDは、以前、GPUのようなデータ並列コアの命令セットをx86の命令空間にマップする可能性を説明した。その場合、1つの命令ストリームの中に、ワイドなデータ並列命令を組み込み、メインのCPUコアの命令ユニットからデータ並列コアに発行する形態を取ることができる。Bulldozerのような構成なら、共有の浮動小数点コアをワイドなデータ並列コアに置き換えることも可能だ。

 AMDは以前から、FUSIONのビジョンとして、最初はCPUコアとGPUコアが大きな塊として同じダイに載るだけだが、次第に両コアの要素が入り交じって行くというビジョンを示していた。Bulldozerの実質的な開発リーダーだったMoore氏が、現在、APU(Accelerated Processing Unit=FUSION)を担当しているところも意味深だ。

 AMDの現在のGPUは、NVIDIAと比べると、ずっと既存グラフィックスに最適化している。AMDの勇ましいヘテロジニアスコンピューティングのかけ声とは裏腹に、GPUアーキテクチャ自体は保守的だ。もしかすると、AMDは現在のGPU開発チームとは別に、CPUのアーキテクトが中心になったデータ並列コアの開発を進めているのかもしれない。

AMDのFUSIONアーキテクチャ