判明した第3世代Ryzenの内部構造を大解説 AMD CPUロードマップ

先週に引き続き、AMDのNext Horizon Gamingイベントで公開された話を解説しよう。今回はCPU編である。

Zen 2ではIPCが15%改善

まずZen 2のコアアーキテクチャー全体で言えば、IPCが15%改善されているほか、3次キャッシュのサイズが2倍となり、またFPU性能も2倍になるとされる。

このFPU周りについては、連載484回でも触れている通り、FPUユニットがすべて256bit化された

この15%のIPC改善はどうやって実現されたかという話であるが、まず基本的な構造が下の画像だ。

Zen2の基本構造。Renaming Registerも168→180に増やされた。これはAGUが1つ増えたことに対応したものと思われる

Zen/Zen+の構造と比較すると、以下の違いが挙げられる。

AGUが1つ追加された3つになった

Micro-op Cacheの容量が4Kopに倍増した

分岐予測に、新たにTAGE(TAgged GEometric)を利用した方式が追加された

そしてバッファ周りでは、以下の違いが挙げられる。

L1 I-Cacheが64KB/4wayから32KB/8wayに変更

TLBの大容量化(後述)

仮想化マシンのセキュリティー周りの高速化

脆弱性対策のハードウェアベースでの強化

もう少し細かく見てみよう。まずはフェッチだが、BTBが大幅に強化されているのがわかる。もっともこれは上でも書いたが、従来のPerceptronベースの分岐予測に加えてTAGEベースの分岐予測も加わったことで、BTBのエントリーを増強しないと予測が収まりきらなかったものと思われる。他にITAのサイズを増やしたことも挙げられている。

インストラクションキャッシュ(L1 I-Cache)については、そもそもデータキャッシュ(L1 D-Cache)がやはり32K 8-Wayだったわけで、64Kの4-Wayがどこまで有効なのか不思議ではあったのだが、やはり思ったほど有効ではなかったということだろう。

2次キャシュとは32Bytes/サイクルで接続されており、これはデコード段の読み込み速度にあわせたものと思われる。

デコード段については大きくは変わっていないが、先に書いた通りMicro-op Cacheが4Kopに増量されたほか、Op-Cacheから最大8 Fused-opが出力されるようになった。またInstruction Fusionがさらに改良されたとしている。これらの結果として、実効スループットの改善がなされたと思われる。

新たにAGU2制御を追加した
Load/Storeユニット周り

ALUに関しては今回特に言及がなかった。ということで、次はLoad/Storeユニットになる。以前の構造と比較するとわかるが、以下のような違いがある。

新たにAGU2からの制御が追加された

Store Pipe Pick周りの構造が少し変わった(Store Pipe Pickはプリフェッチからのデータは参照しない。プリフェッチは直接STP:Store Pipeにリクエストを出す)

ちなみに3つのAGUであるが、以前は2つのAGUについて、Storeに関してはAGU0ないしAGU1からStore Queueにリクエストを出すだけだった。

AGU0

基本はLoadでTLB 0/Data 0に直接アクセス可能。ただStore Queueにリクエストを出すこともできる。

AGU1

やはり基本はLoadで、TLB1/Data 1に直接アクセス可能。ただStore Queueにリクエストを出すこともできる。

これがZen 2ではAGU2が新たに追加された。

AGU2

基本はStoreで、Store Pipeに直接アクセス可能。ただLoad Queueにリクエストを出すこともできる。

これを利用して、AGU0/1がLoad、AGU2がStoreをそれぞれ発行することで、256bit Load×2と256bit Store×1が同時に発行できるようになった形だ。

ただLoad/Store Queue経由では、かならずしもAGU0/1がLoad、AGU2がStoreである必要はなく、その意味ではインテルのAGUに比べると柔軟性は高いと言える。

広帯域になったキャッシュ周り

さて、次がキャッシュ周りだ。Zen 2では1次/2次/3次キャッシュがすべて32Bytes/サイクルで接続されるという、けっこう広帯域な構成になっている。

ちなみに1次/2次キャッシュはSharedだが、2次/3次キャッシュはVictimの構成になっているのは従来と同じ。余談ながら、このVictimキャッシュが理由で、3次キャシュへのプリフェッチの機能は実装されていないそうである。

キャッシュ周りでは、3種類の制御命令が新たに追加されている。これは性能改善というよりは、例にもあるようにNVDIMMやアクセラレーター、あるいは将来のOSの利用に向けたもので、どちらかといえばRyzen系列というよりはEPYC系列向けの機能と言えよう。

大幅な性能改善に貢献した
チップレット周り

さて次がチップレットの話。Zen 2ではメモリーコントローラーはCPUダイから外れ、I/O チップレット側に移動したという話はすでに説明した通り。

ここでCPUチップレットとI/Oチップレットの間はインフィニティーファブリックで接続されるが、この帯域もまた32Bytes/サイクルである。これはメモリー帯域が32Bytes/サイクルなのでこれにあわせている。

ちなみにここでいうサイクルはCPUの動作周波数ではなく、インフィニティーファブリックの動作周波数になることに注意されたい(上の画像で言うところのfclk)。

さて、この構造はメリットも多い一方で性能面へのインパクトもある。Ryzen ThreadripperでDynamic Local Modeが用意されたのも、複数チップに分散したことに起因するボトルネックを緩和するための方法の1つであるが、Zen 2でもこうした配慮が用意される。

1つはTopology Awareness。たとえばあるコアで新規スレッドを作成したときに、その新規スレッドが別のCCDで動いたりすると、猛烈な量のアクセスが2つのCCDの間で発生してしまう。

これを防ぐため、同一プロセスに属するすべてのスレッドは、同じCOD(同じCCX)で動かすようにするという配慮がされる。これはハードウェア側の問題ではなく、OSのスケジューラーの問題である。

ちなみにこれは単にRyzen 9 3900シリーズのみならず、従来のRyzen系でも有効であり、Ryzen Threadripperでも有効である。

もう1つはClock Selectionである。ACPI 5.1でCPPC(Collaborative Processor Performance Controls)という機能が追加されており、これは2014年頃のCPUから広くサポートされるようになっているが、これを高速化したCPPC2という機能がACPI 6.0から追加になった。

Zen 2ではこのCPPC2をサポートした結果として、従来30ms程度要していたClock Selectionを1~2msまで短縮できたという話である。

ちなみにこの効果であるが、Topology Awarenessで15%の、CPPC2サポートで6%の性能改善が果たされた、としている。

ところで1ページ目のバッファ周りの画像で“Hardware-enhanced Security mitigation”という項目が上がっていたが、具体的な改善項目というのが下の画像だ。

もともとZen系列は、Spectre/Meltdownからスタートした一連の脆弱性に(インテルに比べると)特に対策なしで対応できるという強みがあったが、唯一OS周りの対策が必要だったSpectreに対してハードウェアでの対応を強化したという話である。

配線のために生産ラインを再構成までした
MCM周り

MCM周りについてもいくつか説明があったので紹介しよう。下の画像がRyzen 3000シリーズの内部構成である。

「インフィニティーファブリックのコントローラーがI/Oチップレット側に移動すると、Zen 2内部の制御(それこそSenseMIなどがインフィニティーファブリックの上で実装されている)が遅くならないか?」というのが、CCXを8コアでないかと考えた最大の理由だったのだが、こちらにその回答が入っている。

図中でSMU(System Management Unit)とあるのが、そのインフィニティーファブリックを利用したSenseMIを始めとするさまざまなシステム管理を司る部分である。つまり以下のことがわかる。

CCXは引き続き4コアベース

CCD(つまりCPUチップレット)全体の制御は、CCD内のSMUが行なう。同様にcIoD(つまりI/Oチップレット)の制御は、cIoD内のSMUが行なう

ちなみに一見すると簡単そうに見えるが、実際はI/Oチップレットが従来と同じ150μmピッチのボール状バンプ(メッキで形成した突起状の接続電極)なのに対し、7nmプロセスを使ったCPUチップレットではこれが130μmピッチに狭まったそうだ。

これを解決するために、従来のように配線に直接バンプを構成するのではなく、銅で柱を立て、その上にバンプを形成するという解決案を取ったそうである。

またこのRyzen 3000では既報の通りPCI Express Gen4をサポートするが、16GT/秒に達する信号速度に対応するために、パッケージの材質を改善して損失を減らす工夫が必要だったそうである。

パッケージ層の配線で、おそらくは一番信号線のレイヤーだと思われるが、中央下のI/Oチップレットとその上に2つ並ぶCPUチップレットの間を直結しているのがインフィニティーファブリックの配線、左側に出ているのがおそらくはDDR4、そしてI/Oチップレットの中央および右上から、パッケージの右側に出ているのがPCI Express Gen4の配線と思われる。

実装もいろいろ大変だったそうで、生産ラインを再構成する必要があったというのも無理ないところである。

ということで、今回はCPU周りを深く掘り下げて解説した。全然性能やラインナップの話まで行けなかったのだが、このあたりはRadeon RX 5700シリーズ周りのまだ触れてない話題と併せて次週紹介する予定だ。