新たに明らかになった内部構成

続いてはInternalの話である。2016年8月に内部構造について、ある程度説明を行ったが、今回は部分的にではあるが、もう一段細かい話が出てきた。

実は2017年2月5日からサンフランシスコで開催されたISSCC 2017においてAMDは"Zen: A Next-Generation High Performance x86 Core"という発表を行っており、ここで回路技術に関していろいろな情報が開示されている。今回の説明は、このISSCCにおける発表をベースとしたものである。ただISSCCのレポートもしていないので、まとめて紹介したい(Photo20)。

Photo20:説明を行ったMichael Clark氏(Senior Fellow)

IPCの向上が、Excavator比で52%になったという話(Photo21)は、HotChips 28のPaperを元にした先のレポートでも紹介した通り。細かなところでは、以前には無かったいくつかの情報(分岐ミスのリカバリが3cycle、同時にRead 12/Write 6の更新が可能)が追加された。

Photo21:ちなみにISSCCのPaperではここは40%になっていた。おそらくCineBenchの結果を比較したところ、52%まで引きあがったため、こちらの数字を前面に押し出したもので、設計目標的には40%以上の改善だったのだろう

Photo22:そのほかは、表現に若干の違いはあるものの、おおむねHotChipsの資料と同じ。Register Fileが合計168という情報は、別のスライドで公開済

また、コアの内部構造も明らかにされた(Photo23)。今回はダイ全体(Photo24)や4コアのクラスタ(Photo25)も公開されている。パイプライン構成に関して新しい話はなかったので割愛するとして、分岐予測(Photo26)に関しては、1つの分岐元から複数の分岐アドレスに飛ぶ場合をサポートしていることが今回明らかにされた。またITAが512entryという事も今回初めて明らかにされている。

Photo23:意外に分岐予測も結構な面積を占めている感じだ。スケジューラもかなり大きめ

Photo24:まもなく製品が出荷されれば、もはや隠しておく必要がないためだろうか。しかしコア以外の周辺回路が結構大きいことに驚く

Photo25:この構成で1つのCore Complexが構成される

Photo26:同時に2つの分岐を処理可能、というのはSMTへの対応としては当然のことだろう

L2 Cacheは性能と消費電力のバランスを取るため、データやTagは6T SRAM、ステートの保持のみ8T SRAMという構成になっているのが面白い。L1 Data Cache/Instruction Cache、及びL3へのバス幅は何れも32Bytesとなっている。

Photo27:LRU(Least Recently Used)は、前回使われてからもっとも長い時間が経ったものを判別するユニット。キャッシュの中身の追い出しをする際に利用される

ついでL3(Photo28)だが、こちらは省電力のために高密度のマクロセルを利用して設計されており、また2MBごとにClock Gatingを行っている。このスライドにはないが、ISSCCのスライドによれば、CoreとL3 Cacheの間にはFIFOが設けられているとのことだ。

Photo28:DPはData Pathの略。ちなみにL3の速度は「もっとも高速に動作するコアの速度にあわせる」そうである

ところでこのL3はExclusive構成になっており、なのでL2とL3の排他制御を行う必要がある。このために用意されるのがShadow Tag Macros(Photo29)で、L2のTagの4分の1の内容と状態をL3 Slice側に保持する。検索に当たってはまずL2 Tagとの比較を行い、ここでHitするようであれば、L2にアクセスしてきちんとTag検索を行うという仕組みであり、これによってL2アクセスの帯域を節約でき、消費電力を76%削減可能になったとする。

Photo29:そもそもShadow TagにHitしない場合はL2に無い、ということなのでそれ以上Tag検索を行う必要が無いことになる

さまざまな技術の積み重ねで省電力化を実現

続いては省電力機構に関して(Photo30)。まず物理設計であるが、競合製品と比較して10%以上エリアの節約が可能になっているという(Photo31)。ちなみに中央の図は、何で消費電力を削減したかという話で、アーキテクチャの改良で31%、FinFETの採用で70%、PurePowerの搭載で40%、PowerDeliveryの改良で129%の性能/消費電力比の改善が可能になったと説明する。

Photo30:こちらの説明はSam Naffziger氏(Corporate Fellow)

Photo31:実はこの数字からダイサイズの推定も可能である。Area(4コア+L3)が44平方mm、という数字を先のPhoto24に当てはめて換算すると、ダイサイズは206平方mmほどになる。8コア製品としてこれはかなり小さい数字であり、4core+GPUのKabyLake(推定183平方mm)の1割増しにすぎない

全部積み重ねると7倍近い改善になる計算だが、実際はここまでは上がらない。スライドの下には実際の測定データもあるが、AMD FX-8300やAMD A12-9800と比較した場合、

製品名 Cinebenchの結果とTDP 1W当たりのパフォーマンス
FX-8300 552cb@95W 5.81cb/W
A12-9800 331cb@87W 3.80cb/W
RYZEN 7 1700 1410cb@116W 12.16cb/W

といった結果になったそうで、A12-9800と比較すると3.2倍ほど改善した計算になる。

Clock配線に関してはコアとL3キャッシュを分離、更に2レベルのClock Gatingを施すことで全体の効率を50%以上向上、Clock Meshの消費電力も全体の24%から14%まで引き下げたとしている(Photo32)。

Photo32:CTS(Clock Tree Synthesis)は4レベルの自動生成だが、最適化を図ることで消費電力とスキューの両方を削減できたとしている

また利用するセルライブラリも、高速なものの利用率は少なく、比較的消費電力の少ないものを多用しているという(Photo33)。こうした改善により、消費電力に占める、実際に計算処理に利用される電力がExcavatorコア比で35%改善したとのことだ(Photo34)。

Photo33:縦棒は左軸で、水色がレイテンシ、緑色が消費電力で、これは低いほど良い。折れ線が、利用している比率である。高速だけど消費電力の多いflop1やflop2は、利用比率は5%前後、そこそこ早くてそこそこ消費電力の多いflop3が10%程度、バランスの取れた(というか基準になる)flop4が20%程度で、残りは低速だけど消費電力の低いflop5で構成される

Photo34:StorageはRegister Fileへの書き込み/読み出し、あるいはキャッシュへのアクセスに要する電力、Clock Overheadはラッチに供給するクロックのための電力である

ファームファクタにあわせた最適化を実現

ところでPhoto21で、"Fanless Notebook to Supercomputers"というキーワードがあるが、これを実現するためにZenコアでは3つの最適化ポイントを設けている(Photo35)。デスクトップは一番右、ファンレスクライアントが一番左と言う訳だ。

Photo35:一番左は電圧を落としていった時に当然ゲート速度も遅くなるので、こちらで動作周波数と消費電力の関係が決まる。一方、一番右は配線の速度で決まることになる。中央が周波数/電力で決まる形で、それぞれの領域別に最適化の方法が異なることになる

これを実現するために、ZENには「Pure Power」や「Precision Boost」「XFR」といった工夫が盛り込まれている。それぞれの概略は本間文氏の記事に紹介されているが、これらを実現するための機能について、もう少し説明があった(Photo36)。

Photo36:RYZENでは25MHz刻みで動作周波数を変化することで、よりぎりぎりまで性能を追い込めるとするが、更に個体差に応じてぎりぎりまで性能を上げられるのも売りの一つである

PurePower(Photo37)は、内部の回路をクローズドループでモニターしながら随時フィードバックをかけることで、その動作周波数を実現するために必要なぎりぎまで電力を落とす仕組みである。これを実現するために、1,300ものクリティカルパスを測定するほか、電力センサー48個、温度センサー20個、電圧ドループ検出9個という膨大なセンサーを利用していることが公開された。

Photo37:電圧ドループとは、ドライバの出力電圧が負荷に引きづられて低下することである。この検出のために、高速アナログコンパレータを利用している

またコア毎に動作周波数が異なるから、当然必要とする電圧も異なる。そこで、それぞれのコア毎に独立して電圧を供給できる仕組みを搭載している(Photo38,39)。

Photo38:電源から12Vが供給され、これはCPUソケット周辺のスイッチングレギュレータを利用して一旦0.9Vに変換された後、オンパッケージで搭載されたLDO(Low Drop Out)コントローラでコア毎に最適な電圧が供給されることになる

Photo39:LDOの効果。従来だと一番動作周波数の高いコアにあわせて電圧を決めていたから、平均して5%程度高い電圧が供給されることになっていた。ところがRYZENではLDOをコアごとに搭載することで最適化が図れたと言う訳だ

ちなみにLDOを利用した理由として、Intelが利用するようなFIVR(Fully Integrated Voltage Regulator)は回路が複雑すぎて大型化する上、効率もそう高くないとしている(Photo40)。LDOにしてもFIVRにしても、回路構成上どうしてもコンデンサを必要とするのだが、RYZENではここにMIMCap(Metal-Insulator-Metal Capacitor)を採用したことを既に明らかにしている(Photo41)。

Photo40:RYZENのLDOはW/2W/4W/8W/...../2^13Wと14の出力ポイントがあり、これを組み合わせて16383通り(0は存在しないので16384ではない)の電圧調整が可能。FIVRはもっと連続的に変更できるが、エリアサイズとか回路の複雑性を鑑みると効果が薄いと判断したようだ

Photo41:これのみISSCC 2017におけるAMDの発表資料より。メタル層の上2層を使ってコンデンサを構成した形になっている。L3は配線があるためか、若干カバー率が低いのは致し方ないところか

最後がPrecision Boostで、これまでよりも細かい頻度で動作周波数と電圧を制御する仕組みであるが、これに加えてXFRという機能があり、条件が許せば更に100MHzをプラスすることになる(Photo42)。

Photo42:ここについてはおおむね以前の説明と差はない