後藤弘茂のWeekly海外ニュース
Intelのモバイル反撃のカギとなるローパワーCPU「Silvermont」
(2013/5/28 13:23)
22nmプロセスで5年ぶりにアーキテクチャを一新
Intelは、22nmプロセスで製造する第2世代のAtom系CPUマイクロアーキテクチャ「Silvermont(シルバモント)」を搭載したAtomファミリを、今年(2013年)後半から投入し始める。スマートフォン向けの「Merrifield(メリフィールド)」、モバイル機器向けの「Baytrail(ベイトレイル)」、サーバー向けの「Avoton」、通信機器向けの「Rangeley」などがSilvermontコアベースとなる。
Intelは、初代のAtomである「Silverthorne(シルバソーン)」から5年、Atomのマイクロアーキテクチャをほとんど拡張せずに来た。最初の45nmプロセスAtom系コアのアーキテクチャ「Bonnell(ボンネル)」は、32nmプロセスの「Saltwell(ソルトウェル)」にも継承された。メインストリーム&パフォーマンスPC向けCPUで、2年に1度アーキテクチャを刷新するのとは対照的だ。
しかし、IntelはSilvermontでは5年振りにアーキテクチャを刷新する。アウトオブオーダ(Out-of-Order)実行を採用して、シングルスレッドパフォーマンスを高め、モバイルでは4コアまでのマルチコア製品(内部インターコネクト的には8コアまで可能)も用意する。つまり、コア当たりのパフォーマンスを引き上げつつ、コアを小さく保ってマルチコアを容易にしている。相反するニーズを目的を満たすために、IntelはSilvermontを注意深く設計した。
重要なポイントは、x86系命令を2命令デコードするままアウトオブオーダ実行にしたこと。Silvermontでも、命令デコード幅は3命令に広げていない。実行ユニットも、整数演算ユニットが2、浮動小数点/SIMD(Single Instruction, Multiple Data)演算ユニットが2、ロード/ストアユニットが1で、インオーダ実行で2命令デコードだった従来とほとんど変わらない。アウトオブオーダのウインドウもアグレッシブに拡大はせず最小限に留めている。やや大人しい設計だ。
そこには、CPUを複雑にしてCPUコアのダイ(半導体本体)エリアを肥大化させないように、という設計思想が見える。もともと、Atom系はCortex-A8やA9に対して、シングルコアのパフォーマンスでは有利であるため、コアを大型化するよりは、CPUコアを小さく留めて、遅れているマルチコア化を促進しようとしているように見える。
CISCで2命令、RISCで3命令がローパワーコアのトレンド
SilvermontをAMDのローパワーCPUコアと比較すると、似通って来ていることに気がつく。AMDのx86系のローパワーCPUコアである「Bobcat(ボブキャット)」と「Jaguar(ジャギュア)」も2命令デコードのアウトオブオーダ実行。IntelとAMDで、ローパワーコアの基本の構成は同じだ。
それに対して、市場がオーバーラップするARM系CPUコアアーキテクチャでは、Cortex-A15やKraitが3命令デコードでアウトオブオーダ実行となっている。命令デコード帯域では、ARMの方が一見広いように見えるが、実際にはそうでもない。命令セットアーキテクチャ(ISA:Instruction Set Architecture)が異なるからだ。
ARMの各ISAはRISC(Reduced Instruction Set Computer)系で、相対的にシンプルなオペレーションの命令体系となっている。対するIntelのIA(x86)系ISAはCISC(Complex Instruction Set Computer)系で、複数オペレーションを含む命令を多く備える。そのため、RISCの3命令デコードと、CISCの2命令デコードでは、デコーダが生成できるオペレーションの密度は原理的にはそれほど変わらないだろう。
今年から来年(2014年)というフェイズで見ると、ローパワーCPUは、CISCで2命令デコード&アウトオブオーダ実行か、RISCで3命令デコード&アウトオブオーダ実行へと収束しつつあるように見える。これが、ローパワーCPUの、パワーとパフォーマンスのバランスの適切な落としどころなのかも知れない。
アウトオブオーダ化で短くなったパイプライン
パイプライン段数でも、Bonnell系とSilvermont系で大きな差がない。Silvermontの整数演算パイプライン段数は14ステージで、Bonnellの16ステージより若干短くなった。しかし、パイプラインが短くなった主因は、BonnellアーキテクチャがCISC(Complex Instruction Set Computer)命令のインオーダ実行に最適化したのに対して、Silvermontではアウトオブオーダ実行になったためだ。
上の図の左はBonnellのパイプライン、右がSilvermontのパイプラインだ。Bonnellは、CISC向きのパイプライン構成を取っていたため、パイプラインが長かったことがわかる。具体的には、ALUによる実行ステージの前に、L1データキャッシュアクセスのステージがはめ込まれている。違いを簡略に示したのが下の図だ。
BonnellとSilvermontでは、アウトオブオーダ実行に関連する部分以外は、大差がない。そのため、Silvermontでも、アーキテクチャ的には、動作周波数に大差がつかないことになる。もちろん、トランジスタパフォーマンスの向上と、駆動電圧によって実際の製品の動作周波数は上がる。ちなみに、ARMのCortex-A15は整数演算で15ステージ。RISCの方が命令デコードの負担が相対的に少ないことを考えると、A15の方がやや深いと言えるかも知れない。
命令をプリデコードするAtom系アーキテクチャ
IntelはSilvermontで、パフォーマンスを高めながら電力効率をアップさせるとしている。そこには、FinFET 3Dトランジスタの22nmプロセスによる、テクノロジー面でのゲインもあるが、Intelはアーキテクチャ面でも注意深く、パフォーマンスを引き上げつつ、電力の増大を抑えた。
Silvermontの構造を、上段のフロントエンドから見て行くと、一見するとBonnellと大きくは変わらないが、いくつかの違いがあることが分かる。分岐予測ユニットの構成やテーブルの規模が変わったほか、マルチスレッディング機能がなくなったことで、スレッド毎に持っていたバッファがシングルになった。
Silvermontでは、命令プリフェッチャが共有L2/バスから命令をプリフェッチしてL1命令キャッシュに取りこむ。オリジナルのAtomであるBonnellでは、L1命令キャッシュに取りこむ段階で、x86命令のプリデコードを行なっていた。プリデコードビット群をつけて、可変長のx86命令の命令区切りなどをマークする。命令タイプの判別も行なうと見られている。
この構造の狙いは、プリデコードをパイプラインの前のキャッシュラインフィルの段階で行なうことで、パイプライン中のデコードの負担を軽減し、デコードステージを短くすることだ。このアイディアはIntelのではなく、もともとはAMDが採用した。SilvermontとBonnellはフロントエンドの命令デコードパイプラインが変わらないため、プリデコードの構造も変わっていないと見られる。
L1命令キャッシュからの命令フェッチはパイプライン上で3ステージ。L1命令アクセスであるフェッチレイテンシのサイクル数はBonnellと変わっていない。フェッチ帯域はIntelは狭く取る傾向があり、Bonnellは16-byte幅だったので、Silvermontも同様だと見られる。もっとも、Atom系は命令デコード帯域も2命令と狭いので、バランスは取れている。
フロントエンドでは分岐予測が強化
命令フェッチのパイプラインでは、分岐予測の構成がBonnellから変更された。Bonnellアーキテクチャでは、分岐予測アルゴリズムは一般的なGShareアルゴリズムだった。SilvermontでもGShareのままで、メインの分岐予測アルゴリズム自体のアグレッシブな改良は行なわれていないと見られる。
だが、間接分岐のためのIndirect Branchプレディクタが加わった。分岐する先のアドレスがレジスタまたはメモリによって特定される間接分岐は、AndroidのDalvikのような実行環境では頻繁に出現するため、モバイルにターゲットを据えたCPUでも予測が重要になりつつある。Silvermontでは、そのための専用ユニットが設けられた。
また、IntelのオリジナルのSilvermontの図では、分岐予測ユニットが2つに分割されている。これは、分岐予測が2ステージに分割されたためと見られる。最初のユニットに分岐先アドレスのバッファであるBTB(Branch Target Buffer)と、コールからの戻りスタックのRSB(Return Stack Buffer)が配されている。2つ目のユニットに、GShareと間接分岐、RSBとなっている。
IntelはSilvermontでは、プレディクタのエントリを大型化して、分岐予測機能を強化したと説明している。一般的に、分岐履歴を収めるBHT(Branch History Table)を搭載すると分岐予測は向上するが、分岐予測により時間がかかるようになる。IntelのCoreブランドのCPUアーキテクチャでは、この問題を解決するためにNehalem(ネハーレン)で、分岐予測は2階層を導入した。Silvermontの場合は、BHTを参照した予測の結果を得るステージが後段になっているようだ。
x86命令をほぼそのままMacroOPにするSilvermont
フェッチした命令は、プリフェッチバッファに取りこんで、命令デコーダに最大2命令ずつ送り込む。マルチスレッディングのBonnellでは、ここでバッファが2スレッド分になっていたが、シングルスレッドのSilvermontではバッファは1系統になっている。下の図は左がBonnell、右がSilvermontのフロントエンド部分だ。
命令デコーダは、2-wayで、x86命令を最大2命令同時にデコードできる。2命令デコードという点は、Bonnellと同じだ。しかし、Silvermontでは命令デコーダ自身が改良されたという。Bonnellではデコーダ部分に制約があり、1命令しかデコードできないケースも多かった。Silvermontでは、この問題が解決され、より多くのケースで2命令を並列デコードできるようになったと見られる。
従来のAtom Bonnellでは、通常のx86命令では、ほぼそのまま1対1対応で内部命令にデコードしていた。CISC型のx86命令では、Load-Op-Store型の命令の場合、ロードオペレーションと、ALU(Arithmetic Logic Unit)オペレーション、ストアオペレーションが1命令に含まれる。データをメモリからロードして、オペレーションを行ない、再びデータをメモリにストアする。
これをIntel型のマイクロアーキテクチャでRISC(Reduced Instruction Set Computer)風のマイクロオペレーション(uOP)に分解すると、ロードuOP、ALU uOP、ストアuOP群で最大4個のuOPが生成される。しかし、アウトオブオーダ実行でトラックしなければならないuOPの数が多いと、その分、CPUのフロントエンドが複雑になり電力消費も増えてしまう。
初代のAtomであるBonnellは、CISC命令自体は分解せずに、インオーダ型パイプラインの方を、CISC命令の実行に最適化した。それに対してSilvermontではアウトオブオーダ実行であるため、パイプラインが大きく異なる。しかし、命令デコード段では、Silvermontも、x86をほぼそのままに、内部命令であるMacroOPに変換しているという。Bonnell同様にロード-ALU-ストアの場合でも1個のMacroOPのまま維持される。
ロードとALUを融合させるだけでなく、ストアも含めたx86ほぼそのままのMacroOPとして扱うことで、MacroOPの粒度が大きくなる。MacroOPとすることで、命令のハンドリングを容易にして、CPUをシンプルに留めて消費電力を抑えることが狙いだ。IntelのCore系のマイクロアーキテクチャのFused uOPと比べると、より多くのオペレーションを1 MacroOPに統合する。Silvermontのアウトオブオーダウインドウが32エントリと相対的に小さいのは、x86に近いMacroOPの形で扱っているためと見られる。
実際にはSilvermontでは、実行ユニットはロード/ストアと実行で分割されている。そのため、ロードと実行、ストアのLoad-Op-Store型の場合は、MacroOPがまずロードユニットに発行され、データがロードされた後に、MacroOPがALUに発行され、ALUが終了してからストアが発行されると見られる。uOPに分解されて発行されると見なすこともできるが、いずれにせよ1個のMacroOPの中のオペレーション同士は、依存性があることが明瞭であるため、管理が容易になる。
Core系マイクロアーキテクチャとの大きな差
Silvermontでは、命令デコードのステージに後にはMacroOPsのキューがある。このキューが実質的にループのためのバッファ「Loop Stream Buffer」になっている。短いループはここにバッファしたMacroOPsからスケジューラに発行することで、フロントエンドの電力をカットできるようになる。同様の仕組みは、Core系のマイクロアーキテクチャでも、Nehalem(ネハーレン)以降、uOPsキャッシュという形で備えている。Silvermontの方は、ループを検出してMacroOPを再利用するだけの、より単純な仕組みだ。Cortex-A15も同様に、デコードステージの後にループバッファを備えている。
IntelはSilvermontで、このループストリームバッファが強化されたと説明している。Bonnellは、このキュー部分がスレッド毎に2つの16エントリに分かれていた。Silvermontでは2スレッド分のエントリが1スレッドで使えるようになったと見られる。
こうしてパイプラインの前段だけを見ても、AtomとCoreの戦略の違いは明瞭だ。Intelは、Atom系のCPUコアは小さく留め、一定のペースで拡張するCore系のパフォーマンスCPUコアと差別化して行こうとしている。下はHaswell(ハズウェル)のブロック図で、Silvermontと比べると複雑度がはるかに高いことがわかる。最大4命令デコード(Macro-Fusionが可能なので実際には5命令)で、命令発行パイプは8。こうして見ると、相対的にCore系はCPUコアをよりパワフルにする方向で、それに対してAtom系は、やや大人しい拡張になっていることがわかる。