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

Intelが次期Atom「Silvermont」でマイクロアーキテクチャを刷新

Atomファミリで初めてのアーキテクチャのフルチェンジ

 Intelが、Atomプロセッサのマイクロアーキテクチャを刷新する。22nmプロセス世代のAtom「Silvermont(シルバモント)」は、プロセス技術だけでなく、マイクロアーキテクチャ自体が全く新しくなる。FinFET 3Dトランジスタと、高いパフォーマンス効率のアーキテクチャの組み合わせで、モバイルだけでなく、組み込みからサーバーまで幅広い市場をカバーする。これが、Intelの第2段階Atom戦略だ。

Silvermontの概要

 Intelの従来のAtomは、45nmプロセスの「Bonnell(ボンネル)」系アーキテクチャをベースにしている。その後、CPUコアにマイナーな改良は加えられたものの、完全にアーキテクチャが一新されたのは今回が初めてとなる。IntelはPC&サーバー向けCPUは2年置きにCPUマイクロアーキテクチャを刷新しているが、これまでは、Atom系はマイクロアーキテクチャが据え置かれていた。Intelは今後は毎年Atomを刷新すると説明しており、Silvermontはそのファーストランナとなる。

 Silvermontマイクロアーキテクチャのポイントは、ざっと挙げると下のようになる。

(1)アウトオブオーダー実行パイプライン
(2)“マクロ”実行タイプの命令制御
(3)分岐予測の強化と分岐予測ミスペナルティの低減
(4)実行レイテンシとスループットの改善
(5)アウトオブオーダーメモリトランザクション
(6)低レイテンシかつ広帯域のキャッシュ
(7)ハードウェアプリフェッチャの階層化と強化
(8)効率の高いマルチコア化を実現するモジュール構成
(9)マルチコアを前提としたインターコネクト

Silvermontの特徴

 これまでのAtomは、言ってみればPentium相当だった。x86の2命令デコードで、インオーダー実行の2-wayスケーラパイプライン構成と、ラフに見た場合の実行パイプラインの構成はPentiumに似ていた。しかし、Silvermontは異なる。命令デコード幅は2命令のままだが、アウトオブオーダー実行となる。しかし、CPUコア内部での命令のスケジュールは、基本は“マクロオペレーション”とIntelが呼ぶ、CISC(Complex Instruction Set Computer)スタイルで行ない、命令スケジューリングの複雑化をできる限り抑える。

 また、投機実行のロスを減らすために、分岐予測を強化するだけでなく、分岐予測ミス時のパイプラインペナルティを減らす。さらに、メモリアクセスでもアウトオブオーダー型のトランザクションを可能にする。こうした機能を入れ込む代わりに、IntelはSilvermontから、SMT(Simultaneous Multithreading)機能であるHyper-Threadingを取り去った。さらに、IntelはAtomの難点の1つだった内部バスを、ポイントツーポイントインターコネクトに置き換える。

シングルスレッド性能を引き上げるSilvermontアーキテクチャ

 では、Silvermontでは、マイクロアーキテクチャ的に、何がこれまでのAtomより向上したのか。まず、一目瞭然なのは、スレッド当たりのパフォーマンスの向上だ。シングルスレッドの性能は、アーキテクチャ面だけでもSilvermontでかなり改善される。原理的に、CISCであるx86/x64命令では、アウトオブオーダー実行は利く。

Intelが示した性能比較

 また、分岐予測ミス自体と分岐予測ミスのロスサイクルが減ることは、パフォーマンスだけでなく、電力の低減にも効果がある。メモリアクセスのデータ依存関係の解決もできるようになったと推測されるため、メモリアクセスのペナルティも減らすことができる。全体で言えば、同じ周波数でも、従来のAtomよりIPC(Instruction-per-Clock)が向上する。加えて、Silvermontは22nm SoCプロセスで製造されるため、動作周波数自体の向上を見込むことができる。

 ちなみに、ARMのCortex-A15と比べると、Cortex-A15は3命令デコードのアウトオブオーダー実行なので、Cortex-A15の方が命令並列性は高いように見える。しかし、ARM命令セットアーキテクチャはRISC(Reduced Instruction Set Computer)系(ARMはRISC風ではないという意見もある)なので、命令が相対的に単純だ。そのため、複合命令のCISC系x86の2命令デコードであるSilvermontも、内部命令帯域に換算するならCortex-A15に遜色はないはずだ。

 それでは、マルチスレッド性能はどうなのか。SilvermontはHTを取り去り、通常のシングルスレッドコアにした。その代わり、最大8コアまでのマルチコア構成を可能にする。つまり、SMTによるコア内でのスレッド並列化ではなく、実CPUコアを増やすことでマルチスレッド性能を上げる。これが現実的なのは、IntelがSilvermontの拡張を、比較的おとなしく抑えたからだ。

 Atomコアは、これまで、ARMコアよりもコアのダイエリアが大きく、それがコア数を増やす場合の障害になっていた。Silvermontは、相対的にダイエリアを抑えてマルチコア化を容易にしようとしていると見られる。下の図はAtomとARM Cortex-A9などのダイサイズを比較したものだ。

AtomやBobcatとCortex-A9のダイサイズ比較
PDF版はこちら

 実際、Silvermontの拡張は、かなり抑えられている。フロントエンドは3命令デコードではなく、従来通り最大2命令デコード。実行ユニット数も、実はインオーダーの時と変わっていない。

 もちろん、アウトオブオーダー型命令スケジューリングのためにCPUが肥大するが、SMTサポートのリソースは減る分、多少は相殺される。例えば、従来のBonnellやSaltwell(32nmコア)は2スレッド分のレジスタを備えていたが、Silvermontではシングルスレッドでレジスタリネーミングを行なうためのレジスタリソースを備える。ある意味、マルチスレッドのためのレジスタリソースをアウトオブオーダーのリソースに振り替えたようなイメージだ。Silvermontの方がCPUコアが大型化することは間違いないが、それでも、プロセスのシュリンクによってかなりコアサイズは抑えられるだろう。

アウトオブオーダー実行パイプラインをマクロオペレーションで実現

 マイクロアーキテクチャの詳細は別な記事で紹介するとして、ハイライトを挙げると、まずSilvermontではアウトオブオーダー実行が目立つ。従来のAtomはインオーダー実行、つまり、命令をプログラム順序に沿って実行するアーキテクチャだった。それに対して、Silvermontからは、命令を順不同で実行できるアウトオブオーダー実行になる。それに伴い、レジスタの競合を避けるためのレジスタリネーミングも実装した。

 アウトオブオーダー実行では、ハードウェアで命令間の依存性がチェックされ、ハザードが回避される。ハードで制御するため、間違えた命令を実行して、結果を破棄しなければならないようなことは発生しないが、依存性をチェックしスケジューリングする機構がトランジスタを食う。ここで、Silvermontのアウトオブオーダー実行での重要なポイントは、Intelがマクロオペレーションを維持しながら実現していると説明していることだ。

 Intelのx86/x64命令セットはCISCであり、1命令の中にメモリオペレーションと演算の両方を含むことができる。IntelはこのCISC型の複合命令スタイルを、ちょっとややこしいことに「マクロオペレーション(MacroOP)」または「マクロインストラクション」と呼ぶことがある。それに対して、Pentium 4を初めとした多くの高速CISC CPUは、CISC命令を単純オペレーションの内部命令に変換して実行して来た。この単純命令を、IntelはuOP(マイクロオペレーション)と呼んでいる。

 SaltwellまでのAtomコアはインオーダー実行で、x86命令をほとんどそのまま1対1で内部命令に置き換えて実行していた。つまり、複数のオペレーションを含むマクロオペレーションをそのまま実行していた。そのため、内部パイプラインも、CISC命令(マクロ)に合わせた「ロード−オペレーション−ストア(Load-Op-Store)」型の長いパイプラインを備えていた。

 具体的には、実行パイプラインの前半に「Memory Execution Cluster」があり、アドレス生成とデータL1キャッシュアクセスを行なう。このステージ群で、キャッシュにアクセスして、整数演算実行ユニット部である「Integer Execution Cluster」に流れる設計になっていた。これは、インオーダーでCISC命令を直接、高速に実行するために必須の構造で、インオーダーのx86ではよく採用されている。下は初代AtomのSilverthorneのブロック図だ。

Silverthorneのブロック図
PDF版はこちら

 それに対して、アウトオブオーダー実行では、実行パイプは演算とメモリアクセスに分離される。CISC命令の中の、ロードオペレーションはメモリパイプに先に発行され、データがロードされると演算パイプ側の演算オペレーションが実行される。そして、演算結果を、今度はストアオペレーションがメモリパイプで書き戻す。これを、RISC風に実行する場合は、1個のCISC命令に含まれていた複数オペレーションをuOPsに分解して、各パイプに流して実行する。そのため、複数個のuOPsが生成され、それがスケジューラでトラックされる。

 しかし、Silvermontでは、従来のx86命令をほとんどそのまま実行していたBonnellアーキテクチャと同様に、複数のマイクロオペレーション(uOP)を含んだマクロオペレーション(MicroOP)を扱うとIntelは説明する。つまり、uOPsに分解することが前提のアウトオブオーダー実行を、マクロオペレーションで行なうと言う。

 この場合、マクロオペレーションは、実行段になって初めてuOPに分解されて実行され、マクロオペレーションが全て終了した段階で、マクロオペレーションとして命令リタイヤすると見られる。下の図は、IntelがPentium M/Core系で最初に実装したマクロオペレーション(MacroOP)のアウトオブオーダーコアでの実行アーキテクチャ「Micro-OPs Fusion」の概念図だ。この方式の利点は、アウトオブオーダー実行のリソースをある程度節約できること。そもそも、MicroOPに含まれるuOPsは互いに真の依存性があることが分かっているから、順番にディスパッチすればいいことになる。

マクロオペレーションの模式図
PDF版はこちら
Micro-OPs Fusionの概要

 この方式は、別段新しいものではなく、AMDやIntelも、これまでも使ってきた。Intelなら10年以上前のPentium M(Banias:バニアス)からこの方式だ。Intelはこうした方式を採用し始めた時に、「CISCの美」を利用すると説明していた。SilvermontでIntelがこの点をことさら強調するからには、マクロオペレーションの実装がCore系のアーキテクチャと違う可能性があるが、設計フィロソフィは共通していると見られる。

分岐予測と予測ミス時のペナルティなどを改善

 CPUはパフォーマンスを上げるために、条件分岐命令の条件確定を待たずに処理を行なう投機実行を行なう。分岐の方向を予測して、その方向のパスの命令ストリームを実行する。しかし、予測が外れた場合には、それまで実行していた命令をパイプラインからフラッシュしなければならず、その分、パフォーマンスと電力のムダが生じてしまう。

 分岐予測は、アウトオブオーダー型だけでなくインオーダー型CPUでも重要だ。特にCISCの場合はインオーダーでパイプラインが長くなる傾向があるため、ミスプレディクトのペナルティが大きい。そのため、従来のAtomでも分岐予測を重視していた。Silvermontでは、さらにこの部分が強化された。分岐予測のミスのロスを少なくする解決策は、まず分岐予測の精度を上げること、分岐予測ミス時のロスサイクルを減らすこと、リカバリを速くすること。

 IntelがSilvermontで主張しているのは、まさにこの部分で、プレディクタでは最近需要度が増している間接分岐プレディクタが入る。分岐予測ミスサイクルも短くなるが、これは実行アーキテクチャの変化による。これまではCISCのインオーダー実行に最適化したロード−オペレーション(Load-Op)型パイプラインだったため、実行ステージまでが長く、その分、ミスプレディクトのペナルティが大きかった。アウトオブオーダー実行になったSilvermontでは、当然のことながらロード分のパイプラインステージがなくなり、その分、分岐予測ミス時のサイクルが短くなる。

インオーダーとアウトオブオーダーのパイプラインの違い
PDF版はこちら

 従来のAtomは、インオーダー実行であっても、CPUはパイプライン化されているため、命令はパイプリライン中でカスケードする形で並列に実行されている。非パイプラインCPUのように、先行する命令が終了するまで次の命令が実行できずCPUがムダに遊ぶようなことはない。しかし、ロングレイテンシのメモリアクセスが入った場合はパイプラインがストール(停止)してしまう。

 従来のAtomは、こうした場合には、Hyper-Threadingで別スレッドを走らせることで、CPUリソースをある程度有効に使っていた。しかし、アウトオブオーダー化されたSilvermontでは、ロード命令を前もって実行することで、レイテンシをある程度隠蔽できるようになった。その意味でも、Hyper-Threadingの意味は薄らいだ。

 Silvermontのメモリアクセス回りに関しては、アウトオブオーダー型のメモリトランザクションをIntelは挙げている。これは、メモリ上のデータ依存関係の曖昧さ(ambiguity)を解決する「Memory Disambiguation(メモリディスアンビギュエイション)」の実装を示していると見られる。プログラム順序で先行するロード/ストア命令との依存関係がメモリアドレスが解決するまでわからないメモリアクセス命令を、バイパスして前に出すことができるように、動的に依存関係を判定するメカニズムを備える技術で、IntelもAMDも、パフォーマンスCPUでは採用している。下はMeromでDisambiguationを実装した時のスライドだ。

メモリディスアンビギュエイションの実装

Atomの内部インターコネクトを刷新

 Intelは、Silvermontのマルチコアサポートの特徴として、2コアを1モジュールにまとめた点がユニークだと説明している。2コアでL2キャッシュと内部インターコネクトを共有する。実際には、この構成はユニークでも何でもなく、ARMも含めた多くのCPUでよく見られる。2コアで1モジュールにまとめる程度が、設計自由度や共有リソースの有効性からもちょうどいいからだ。

マルチコアの対応

 また、Intelは、Silvermontの新しい内部バスの特徴として「ポイントツーポイント」のインターフェイスであることを挙げている。IDIと呼ばれるポイントツーポイントバスで、2コアのSilvermontモジュールが、システムエージェント(SA)と接続されている。この構成は、通常のSoCで見慣れたインターコネクトであり、別段新しいものではないように見える。しかし、Atomでは新しい。

 Atomは、ディスクリートCPUから始まり、最初のAtomはオンボードのFSB(Front Side Bus)を実装していた。このバスアーキテクチャは、AtomをSoC化した後も引きずられて残り、内部バスでもFSBと類似のアーキテクチャのままだった。シェアード型で自由度がなく、Atomのボトルネックとも呼ばれていた。Intelは、Silvermontで、ようやくこのレガシーを切り捨て、今風のインターコネクトへと切り替えた。

 こうして概観すると、Silvermontの正体が見えてくる。確かに、マイクロアーキテクチャが強化されているが、驚くほどではない。また取り込んでいる技術も、ローパワーCPU向けに新たに開発したというより、これまで段階的に上位のパフォーマンスCPUに取り込んできた機能のように見える。そういった意味では、Intelの持つ、優れたマイクロアーキテクチャを、ダイの大型化を極力抑えながら取り込んだCPUアーキテクチャのように見える。実際には、この上にプロセス技術や回路設計技術が組み合わさり、SilvermontベースのSoCができあがる。

プロセス進化などとの組み合わせ

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