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

Atomに挑むAMDの省電力コア「Bobcat」



●従来のモバイルCPUの90%の性能を半分のダイで実現

 優れた省電力性と、Atomより高いシングルスレッドパフォーマンスの組み合わせ。AMDの次期低消費モバイルCPUコア「Bobcat(ボブキャット)」の、PC向けCPUとしての利点を要約するとそうなる。Atom対抗と思われたBobcatは、フタを開けたら、むしろPCクラスのコンピューティング市場に最適化されたCPUコアだった。AMDは「従来のPC向けモバイルCPUのパフォーマンスの90%を、50%のダイ面積で達成する」とBobcatを説明する。

 AMDは、2011年中にCPUコアアーキテクチャを一新する。ハイパフォーマンス向けに「Bulldozer(ブルドーザ)」を、低消費電力向けにBobcatを投入する。いずれも、フロムスクラッチ(ゼロから開発)で作られたコアだ。複雑極まりないx86系CPUを、開発に手間がかかるフロムスクラッチで作るAMDの姿勢はアグレッシブだ。フロムスクラッチの開発リスクを避け、Pentium IIIパイプラインを拡張し続ける(Pentium III→Pentium M→Core 2→Core i)Intelと好対照を見せている。

 それも、AMDは、両極に向かうCPUコアを、それぞれ別チームがフロムスクラッチで開発するという、よりハードルの高い方法を取った。Bulldozerの整数コアは演算2パイプ、ロード/ストア2パイプで、その部分だけを取ると、Bobcatの整数部と似ている。Bobcatは、Bulldozerの"1/2"版ではないかという見方もあった。しかし、両CPUは基本的に異なる設計(一部のサブモジュールには共有設計のものもある)だという。実際、BobcatにはBulldozerよりも優れていると見られる部分(分岐予測など)もあり、かなり設計の方向性が異なる。

Brad Burgess氏(AMD Fellow, Chief Architect, Bobcat Core) Hot Chipsの会場となったStanford大学のMemorial Auditorium

 米スタンフォードで先週開催されたチップカンファレンス「Hot Chips 22(A Symposium on High Performance Chips)」で明かされたBobcatコアの姿は、このCPUの性格を明瞭にした。上位のBulldozerアーキテクチャは、マルチスレッドや浮動小数点演算のパフォーマンスにポイントを置いている。それに対して、Bobcatは限られた電力とダイ面積の中で、シングルスレッドパフォーマンスを最大に発揮できるように設計されている。

AMDアーキテクチャの比較
PDF版はこちら

●モバイルだけではないBobcatが向いている分野

 具体的には、内部パイプは2命令発行と狭いが、アウトオブオーダ実行のスーパースカラで、大幅に強化された分岐予測やアウトオブオーダ型ロード/ストア機構を備える。その一方で、浮動小数点演算パイプは64-bit幅(単精度SIMDなら2-way)で、マルチスレッディングも備えない。シングルスレッドの整数演算が体感パフォーマンスに大きく影響する、モバイル機器に最適化されていることがわかる。省電力機構では、パワーゲーティングやファイングレインのクロックゲーティングが実装され、無駄な電力を産むデータ移動なども極力省いている。

 電力効率がよくシングルスレッド整数演算のパフォーマンスが相対的に優れたBobcatの特長は、モバイルPC以外の用途にも適用できそうだ。例えば、省電力ホームサーバーやブレードサーバー、ハイパフォーマンス組み込みにも適している。AMDはそうした分野も意識しているのか、Bobcatにバーチャライゼーション支援ハードウェアやECCプロテクトL2キャッシュを搭載している。BobcatとIntelのAtomは、モバイルPC市場ではオーバーラップするものの、そこから外へは、違う展開になるかも知れない。

 AMDは、2007年にBobcatの存在を明らかにした時は、Bobcatコアを家電や携帯電話クラスのデバイスにも浸透させる計画だった。しかし、家電と携帯機器向け製品の部門を売却してしまったAMDは、現在のところ自社のソリューションとしてはBobcatを家電/携帯電話分野に展開するビジョンを持っていない。

AMDのFUSION構想全体図
PDF版はこちら

 その代わり、AMDはBobcatを、ほぼ論理合成可能な設計にして、半導体ベンダー間で容易に移植ができるようにした(IntelもAtomで類似の説明をしている)。そのため、もしAMDが積極的にBobcatコアを売るIPビジネスを始めるなら、同コアがAMD以外のベンダーのSoCに取りこまれて行く可能性はある。

 実際、現在走っているBobcatベースの製品は、TSMCのバルク40nm Gプロセスだという。AMDの製造部門のスピンアウトであるGLOBALFOUNDRIESでの、AMD CPU向けSOI(silicon-on-insulator)プロセスではない。COMPUTEX時に見せた動作サンプルのBobcatコアAPU(Accelerated Processing Unit)「Ontario(オンタリオ)」がTSMC製だと推定される。ちなみに、AMDのGPUコアのIPはTSMCのバルクプロセスベースであり、その点ではAPUを製造しやすい。

AMDのAPUアーキテクチャ Bobcatのマイクロアーキテクチャ

●分岐予測を強化する一方、プリデコード方式を変更

 AMDはBobcatコアについては、Bulldozerコアより詳細を明らかにしている。

 まず、フロントエンドで目立つのは分岐予測の強化。分岐予測ロジックは2分岐/サイクルで予測ができる。分岐のターゲットアドレスやリターンスタックだけでなく、インダイレクトダイナミック分岐アドレスも予測できる。この部分は、過去の大型AMD CPUの機能削減版ではなく、むしろ大きく強化されている。

 Bobcatで分岐予測を強化したのは、予測ミスが無駄な電力消費につながるからだという。似たような説明は、Bobcat同様の低消費電力x86を開発するCentaur Technology(VIA Technologies傘下)も行なったことがある。電力消費の効率を高めようとすると、分岐予測の強化に行き着くのは必然のようだ。分岐予測が強化されれば、分岐が多い整数演算でのシングルスレッドパフォーマンスも上がる。

Bobcatのアーキテクチャ
PDF版はこちら
Bulldozerのアーキテクチャ
PDF版はこちら

 BobcatのL1命令キャッシュは、32KBの2-wayセットアソシエイティブ。命令キャッシュの大きな特徴は、命令マーカービットを持たないこと。AMD CPUは伝統的にL1命令キャッシュに取りこむ段階で、可変長のx86命令の切れ目を指定するマーカービットをつける。つまり、Intel CPUが命令プリデコード段階でやる処理を、L1命令キャッシュの前に行なってきた。IntelのAtom(Bonnell:ボンネル)アーキテクチャも、似たような手法を使っている。

 しかし、BobcatではL1命令キャッシュの段階では命令の切り分けを行なわない。Intel式に命令フェッチ後に行なうため、キャッシュメモリ上のマーカービット分を節約できる。Bobcatの場合、1サイクルに切り出さなければならない命令数が最大2命令と少なく負担が小さいため、こうした設計を取ったと見られる。

 x86命令デコーダは2-wayで、各サイクルに最大2個のx86命令をデコードできる。Bulldozerが最大4命令(Branch Fusionなら5命令?)をデコードできることと較べると、かなり大人しい。もっとも、Bulldozerでは2スレッドを並列実行するプロセッサクラスタなので、命令デコーダもサイクル単位で2つのスレッドを切り替えてデコードしている。

 Bobcatの命令デコーダは、大半のx86命令をBobcatの内部命令「マイクロオペレーション(Micro Operation:uOP)」に1対1でマップする。約89%のx86命令が1個のuOPに変換され、約10%のx86命令は2個のuOPsに変換される。残りの1%以下の命令が、マイクロコードに送られるという。

●ロード/ストアのアウトオブオーダ実行をサポート

 Bobcatも、従来のAMD CPUと同様に整数パイプ群と浮動小数点(FP)パイプ群が、スケジューラのレベルで分離されたアーキテクチャを取っている。整数系と浮動小数点系でスケジューラと命令発行ポートを共有するIntelアーキテクチャとは異なる。

 整数パイプ側では、デコードされたuOPは、キューからレジスタリネーミングロジックに送られる。x86命令セットではプログラマビジブルな論理レジスタスペースが限られている。そのため、CPU側では物理的に多くのレジスタファイルを実装し、レジスタの競合を避けて命令実行の並列度を上げている。Bobcatも同じ手法を取っており、リネーミング段階で論理レジスタより多い物理レジスタをマップする。この時に、レジスタ間での無駄なデータ移動を最小にするようにポインタをマップするという。

 整数パイプは、2つの整数演算パイプラインと、ロードパイプとストアパイプのペアに分離されている。整数演算パイプは片方が乗算をサポートする。ロードアドレス生成ユニットとストアアドレス生成ユニットは、それぞれ並列にアドレスを生成できる。IntelのAtomは、インオーダ実行であるため、実行ユニットの前にアドレス生成ユニットが組み込まれた構造となっているが、アウトオブオーダ実行のBobcatは他のアウトオブオーダ型x86と同じようにロード/ストアアドレス生成を演算パイプと並べた構造となっている。

Silverthorne(Atom)のブロックダイヤグラム
PDF版はこちら

 Bobcatのロード/ストアユニットはアウトオブオーダ型ロード/ストア制御をサポートした。伝統的なアウトオブオーダ型CPUは、ロード/ストア系命令を並べ替えて、プログラム順序上で先行するロード/ストア系命令の前に実行することができない。例えば、ストア命令がデータを書き込むはずのメモリアドレスから、ストアより前にデータをロードしてしまうと、間違えたデータをロードすることになってしまうからだ。

 Bobcatは、アウトオブオーダ型のロード/ストア命令実行のために、他のロード命令やストア命令をバイパスして投機的に実行できるハードウェア機構を備えている。ロード命令を、先行するストア命令やロード命令の前に実行したり、ストア命令を先行するロード命令の前に実行することが可能だ。動的にロード/ストア間の依存関係を予測し、判定して、データ依存関係の曖昧さを解決する機構を持つ。ロード/ストアのレイテンシを隠蔽することが容易になる。この機能は、PC向けCPUでは過去数世代でようやく組み込まれ始めた新しい技法だ。


●シングルコア設計のBobcat

 浮動小数点演算ユニットも2パイプの構成となっている。片方が加算パイプ、もう片方が乗算パイプで、整数演算のMMXと論理演算はどちらのパイプでも実行できる。2つのパイプラインとも64-bit幅のSIMDエンジンで、単精度32-bit演算なら、どちらのパイプも1サイクルに2つずつ実行できる。64-bit幅のSIMDエンジン構成は、IntelのBonnellと同じだ。

 BobcatのL1データキャッシュは32KB。8ストリームのデータプリフェッチャを備える。L2キャッシュは512KB。従来のAMD CPUとは異なりL2キャッシュはCPUコアの半分のクロックで動作しており、そのためL2ロードレイテンシは17サイクルと比較的長い。L2を低速にしたのは、消費電力を抑えるためだという。

 Bobcatのパイプラインは分岐予測ミス時に13サイクル。パイプライン自体はAtom(Bonnell)とある程度似通っている。どちらも命令フェッチに最短3サイクル、命令デコードに3サイクルを費やし、L1データキャッシュロードはアドレス生成を含んで3サイクル、レジスタリードと命令実行はそれぞれ1サイクルだ。

 Bobcatにはアウトオブオーダ実行の命令スケジューリングがあり、Atomの方にはマルチスレッディングのハンドリングがある。Atomでは命令実行を1サイクルと決めたことで、全体のパイプラインの長さが決まったとIntelはISSCC(IEEE International Solid-State Circuits Conference)で説明していた。Bobcatのパイプラインも似たような決定のされかたをしたのかも知れない。だとすると、同世代のプロセス技術時に動作周波数は似たようなものになる可能性がある。

 Bobcatのフロアプランは、明瞭にこのCPUがシングルコア単位で設計されていることを示している。この点は、2つのコアを密接に結合させたクラスタードアーキテクチャのBulldozerと大きく異なる点だ。ちなみに、Bobcatベースの最初のAPU Ontarioはデュアルコアだ。コアのサイズは不明だが、かなり小さいことは予想がつく。AMDがCOMPUTEXで見せたウェハ上のチップは、ダイサイズ(半導体本体の面積)が約80平方mm以下だった。