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

ローパワーx86市場でAMDのJaguarと戦うIntelの「Silvermont」

BonnellからSilvermontへと内部構造を進化

 現在のコンピューティング市場の戦いの焦点は、デスクトップやノートPCではなく、モバイルとサーバーに移っている。そして、Intelにとっては、サーバーは守りだが、モバイルは攻めになる。ARMアーキテクチャが占める市場に、いかに攻め込むか。Intelの第2世代のAtomアーキテクチャである「Silvermont(シルバモント)」は、そのための重要な武器だ。

 Silvermontの特長は、従来のAtomのインオーダ実行パイプラインから、アウトオブオーダ実行パイプラインへと変更したこと。Atomは、最初の45nmプロセスの「Bonnell(ボンネル)」アーキテクチャから、32nmプロセスの「Saltwell(ソルトウェル)」まで、マイクロアーキテクチャ面ではそれほど大きく変更されなかった。Silvermontでは、それが一新され、命令デコード幅は2命令だが、実行パイプラインがアウトオブオーダになる。これは、AMDのローパワーx86 CPUのBobcat(ボブキャット)、Jaguar(ジャギュア)と同様だ。

 この変更によって、CPUコアの全体の構造は大きく変わった。Bonnell/SaltwellとSilvermontは、どちらもx86命令を2命令同時にデコードするアーキテクチャだが、命令デコードまでのフロントエンドは似ていても、その下の実行パイプの構成は大きく異なる。下は両アーキテクチャを比較した図で、左が旧来のBonnell/Saltwell系、右が新しいSilvermontとなっている。

BonnellとSilvermontのブロックダイヤグラム※PDF版はこちら

 この違いは、インオーダ実行かアウトオブオーダ実行かによる。従来のBonnell系アーキテクチャは、CISC(Complex Instruction Set Computer)命令のインオーダ実行に最適化していたため、ロード-オペレーション-ストアといった複合命令を効率的に実行するために、演算ユニットの前にロードステージ群があった。上の図で言えば、メモリ実行クラスタを経て、整数実行クラスタに入る構造になっていた。

 しかし、Silvermontでは、ロード/ストアユニットは、演算ユニットと並列に並び、並列に命令発行されるようになった。一般的な、アウトオブオーダ型のプロセッサの配置に変わった。インオーダのBonnellと、アウトオブオーダのSilvermontのパイプラインの違いを概念で示すと下の図のようになる。

インオーダとアウトオブオーダのパイプラインの違い※PDF版はこちら
BonnellとSilvermontのパイプラインとブロック図※PDF版はこちら

レジスタファイルはリネーミングバッファを使う方式

 SilvermontでもBonnellでも、x86命令は内部命令であるMacroOPにデコードされる。Bonnellでは、MacroOPはそのまま実行パイプラインに送られるが、アウトオブオーダ実行のSilvermontでは、アロケートとレジスタリネームのステージに送られる。リオーダバッファは32エントリと比較的小さいが、これは内部命令を複合型のMacroOPとして扱っているからだ。

 レジスタファイルは、アーキテクチャルレジスタファイルとリネームバッファに分かれた、伝統的方式を採っている。この方式の場合は、リネームしたレジスタの値はリネームバッファに書き込まれ、命令実行が終わった段階でレジスタファイル側に書き込まれる。

 Intelは、Nehalemまでこの方式を採っていたが、データの移動が多くなり、電力上のムダが多いとしてSandy Bridgeで変更した。Sandy Bridgeからは多数の物理レジスタファイルを用意して、そのレジスタ群へのアーキテクチャルレジスタのマッピングを管理することで、レジスタリネーミングを行なう。

 IntelがSilvermontで、旧来方式を採った理由は、リネームする空間が狭いために大きな問題にならないと判断したのかも知れない。ちなみに、AMDのJaguarは、物理レジスタファイルとしており、後者の方式を取っていると見られる。

 また、従来のBonnell/Saltwellでは、マルチスレッディングのためにアーキテクチャルレジスタファイルを2スレッド分保持していた。リソース的には、セカンドスレッドの分のレジスタが、レジスタバッファの一部に転用されたという見方もできる。

 このほか、Intelアーキテクチャでは、レジスタを含めたアーキテクチャルステイトを保持するための「C6アレイ」と呼ぶ、ステイト保存用SRAM領域をCPUコアの内部に備えている。Bonnellの例では10.5KBのC6アレイを持ち、スリープステイトで、CPUコアを完全にパワーゲイトした場合も、ステイトをCPUコア内部に保持する。SilvermontもC6をサポートするため、この仕組みも継承されている。

複雑な現行のAtomのSIMD実行エンジンの仕組み

 レジスタリネーミングステージの後は、内部命令は各実行ユニット毎に設置されたスケジューラに送られる。個別のリザベーションステーションになっており、Core系のマイクロアーキテクチャで採用しているユニファイドのスケジューラにはなっていない。よりシンプルな方式だ。

 Silvermontでは5個の命令発行ポートがあり、整数演算が2ユニット、浮動小数点/SIMD演算が2ユニット、ロード/ストアが1ユニットとなっている。前回の記事では、Silvermontの実行ユニットの部分に若干間違いがあったので修正してある。具体的にはFPパイプのSIMD演算幅の部分で、明瞭になっていないために削った。Atomの浮動小数点/SIMDパイプラインの構造は、実はかなり複雑で、これがどう変わったかもSilvermontのポイントだ。

BonnellとSilvermontのバックエンドブロックダイヤグラム※PDF版はこちら

 Bonnell系マイクロアーキテクチャで、特徴的だったのはSIMD乗算とSIMD加算のパイプラインが非対称であったこと。加算ユニット(ADD)が128-bit SIMDなのに、乗算ユニット(MUL)は64-bit SIMDで、同等のパフォーマンスではなかった。Intel系のアーキテクチャの常として、乗算と加算は別パイプに分けられている。

 正確にはもう少し複雑だ。まず、Bonnellアーキテクチャでは、SIMDの乗算ユニット(MUL)は、浮動小数点も整数演算も、どちらも64-bit幅のSIMDとなっている。そのため、128-bit幅のSSE SIMD命令はダブルバンプで実行する。倍精度(DP)のSIMD演算では、さらにスループットが落ちる。

 それに対して加算ユニット(ADD)は、単精度(SP)浮動小数点演算と整数演算ではフルの128-bit幅となっている。1サイクルスループットで、128-bitのSIMDの単精度と整数の加算自体は実行できる。しかし、倍精度浮動小数点演算時にはSIMD加算ユニットは64-bit幅となり、128-bit SIMDの倍精度(2x64-bit)はダブルバンプで実行する。Intelは、Atom発表時のアーキテクチャ説明会でこのように説明していた。

 込み入っているようだが、簡単に言えば、従来のAtomは加算は速いが乗算は遅く、単精度はそこそこだが倍精度が特に遅い構造となっていた。倍精度演算が遅いことは有名で、このあたりはAtomの弱点となっていた。最初のAtomでは、より複雑な乗算ユニットを簡略化することで、実行ユニットのダイ(半導体本体)エリアを小さくしたと見られる。

 それに対して、Silvermontでは、Intelは実行ユニット群は完全に設計し直して、パフォーマンスを向上させたと説明している。Atomで問題となった、乗算系の命令実行レイテンシとスループットも含まれるはずだ。ただし、AMDのJaguarのように、完全に乗算と加算とも128-bitパイプに編成し直したなら、その点を強調するはずだが、Intelはそうしていない。

Jaguarのブロックダイヤグラム※PDF版はこちら

 従来のBonnell系のアーキテクチャでは、L1データキャッシュは24KBだった。24KBという中途半端な容量になった理由の1つは、L1データキャッシュアクセスを、高クロック時にも2サイクルで維持するためだ。BonnellはCISC(Complex Instruction Set Computer)に最適化されたLoad-Op型のパイプラインなので、実行ステージの前にL1データキャッシュのステージ群が挟まる。そのため、L1データキャッシュアクセスを、短いレイテンシに留める必要がある。

 Silvermontでは、アウトオブオーダ実行になり、パイプラインの構造が完全に変わったにも関わらず、L1データキャッシュのサイズは据え置かれているようだ。依然としてキャッシュアクセスレイテンシ重視であることがわかる。

BonnellとSilvermontのパイプライン※PDF版はこちら

短くなったSilvermontのパイプライン

 インオーダ実行からアウトオブオーダ実行に変わったことで、Silvermontではパイプラインも変わった。実行ステージまでの間にL1データキャッシュアクセスがなくなったことで、パイプラインステージが若干短くなった。整数演算では、Bonnell系が16ステージに対して、Silvermontでは14ステージとなっている。

 また、分岐予測ミス時のペナルティサイクルも短くなった。Bonnellが13サイクルのミスプレディクションレイテンシなのに対して、Silvermontでは10サイクルとなった。その分、分岐予測をミスした時のロスが少なくなり、その分性能が上がり、同時に電力を抑制できるようになった。

 Silvermontでは、従来のAtomよりパイプラインが短くなったとは言っても、各ステージの切り分けが変わったわけではない。そのため、ステージ毎のレイテンシに依存する動作数は数の上限が大きく変わるわけではない。

 Silvermontのパイプラインを、同じローパワーx86であるAMDのJaguarと比べると、デコードステージの違いが目立つ。Jaguarでは、命令デコードは、命令フェッチとオーバーラップするステージから始まり6ステージとなっている。Bobcatから命令デコードが1ステージ増えた。デコード関係のステージだけを見ると、AMDの方が倍のステージ数に見える。分岐予測ミスのパイプラインレイテンシも14サイクルと長い。

Jaguarのパイプライン※PDF版はこちら

 この違いには理由がある。IntelはAtom系では、L1命令キャッシュにフィルする段階で、プリデコードを行なっている。Silvermontでもこの仕組みは受け継がれていると見られる。

 そのため、キャッシュの前にある、プリデコードのステージ群はパイプラインにカウントされていない。x86/x64系命令では、命令長のバリエーションが非常に多いため、命令を切り出す作業自体に時間がかかる。プリデコードでこの作業を終えているなら、Silvermontのパイプラインはその分短くなる。L1命令キャッシュにヒットし続ける限りパイプラインの短さは維持される。ただし、Atomのアプローチにもトレードオフがある。L1への命令プリフェッチのミスがあると、命令プリデコードの分だけレイテンシが増え、プリデコードの電力の消費も増える。これは、分岐予測の精度とも関連している。

 IntelはSilvermontをベースにしたSoC(System on a Chip)製品を、今年(2013年)後半から投入し始める。スマートフォン向けの「Merrifield(メリフィールド)」、モバイル機器向けの「Baytrail(ベイトレイル)」、サーバー向けの「Avoton」、通信機器向けの「Rangeley」などで、組み込み向けも用意される。

(後藤 弘茂 (Hiroshige Goto) E-mail