このページの本文へ

前へ 1 2 次へ

ロードマップでわかる!当世プロセッサー事情第372回

HotChipsで語られたZenの詳細 AMD CPUロードマップ

2016年09月05日 11時00分更新

文● 大原雄介(http://www.yusuke-ohara.com/) 編集●北村/ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

 AMDは、技術発表会「HotChips」で、Zenの詳細を発表した。結果、いくつか連載370回で説明した内容で間違っているところや、新たに判明したことなどがあるのでまとめて補足しておきたい。

 まずHotChipsで紹介されたZenの特徴が下の画像である。

主な特徴。とにかくQueueが全般的に大きめになっているのがわかる。ちなみにL1はWritebackだが、L2はWrite Throughの模様だ

 スケジューラーやキューのサイズは、Skylakeよりもやや少ないが、Haswell/Broadwell世代とはほぼ互角といったところまで増えており、一方でキャッシュは明らかにHaswell/BroadwellはおろかSkylake世代を上回る帯域となっている。

 結果、小さいプログラムやデータを扱う範囲ではSkylakeに分があるかもしれないが、大きなデータやプログラムに関してはZenに分がありそうだ。

 さて、まずフェッチのところであるが、TLBがかなり強化され、さらにL0 TLBが搭載されているのがわかる。

Micro-Op Cacheの制御もこの段階で行なわれる。要するにHash Perceptronのユニットで、Op Cache経由で読み込むか、通常のデコードを行なうかをMicro-Tagの形で付加していると思われる

 また分岐予測にパーセプトロン(一種のニューラルネットワーク)を応用した仕組みを取り入れており、これで分岐ミスをさらに減らそうという試みのようだ。この段階では、1サイクルあたり32バイトで命令を読み込み、これをデコード段に渡す形だ。

 そのデコード段であるが、Pick(32バイトのデータから命令をピックアップ)→デコード(x86命令を解釈)し、これをMicro-opキューに引き渡す格好だが、このあとマイクロコードRomを経るあたりは、やはり予想通りデコード段では最終的なMicroOpではなく、中間的な命令になると思われる。

Branch Fusionは、分岐命令を1 Micro-Opにまとめる仕組みである。通常分岐はまず条件判断命令、ついで判断結果に応じて分岐という2つのx86命令で表現されるが、これは当然ペアとなるので1つのMicro-opとすることで、Micro-op数の削減や消費電力削減に効果的という話だった

 またStack Engine Memfileと呼ばれるユニットがここに追加されているのがわかる。これは連載370回で説明したStack Engineに関係する。

 もともとK10の世代で搭載されたSideband Stack OptimizerはStackの処理のみを行なうユニットである。Stack処理とは、PUSH(あるレジスタのデータをStack領域に保存)とPOP(Stack領域からデータをレジスターに復活)の2つであるが、処理的には単純なデータのMoveと、Stack Pointerという値の加減算のみで、わざわざALUを動かすのはもったいないので、Stack Pointerの加減算専用のユニット(Sideband Stack Optimizer)を用意して、こちらで処理を行なうことで省電力化を図るというものだった。

 Stack Engineはこれをもう一歩すすめ、Move処理も省電力化した。ZenにはMove Eliminationという機能がある。これはRegister Fileの名前を付け替えることでデータの移動を省く仕組みだが、Stack処理の場合、従来ではメモリーに置かれたStack領域を利用するので、どうしてもメモリーアクセスが発生してしまう。

 そこで、Stack専用のMemfileを32エントリー分用意し(これが上の画像に出てくるStack Engine Memfileだ)、ここにStackデータを保存することで、メモリアクセスそのものも省こうというものだ。

 大規模にStackを積むと、当然32エントリーでは足りなくなるため、メモリーアクセスが発生するのは避けられないが、ちょっとしたサブルーチンコールなどではレジスターを数個Stackに保存する程度なので、ここで内部のMemfileが利用できれば省電力性と高速性の両方に役立つことになる。

前へ 1 2 次へ

この連載の記事