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

AMDがISSCCでZENベースSoC「Zeppelin」の詳細を明らかに

ISSCCでさらにZeppelinのベールをはがす

 AMDは、新CPU「ZEN」ベースの製品ファミリの展開にあたって、1つの設計のダイで、デスクトップからサーバーまで、幅広い製品ラインナップを派生させた。

 8個のCPUコアを搭載したダイを開発。1個のダイでデスクトップPC向けの「Ryzen」、2個のダイでハイエンドデスクトップ向けの「Ryzen Treadripper」、4個のダイでサーバー向けの「EPYC」と、性格が異なる4系統の製品群を実現した。サーバー向けのEPYCでは、最大32個のZEN CPUコアを搭載し、64スレッドを平行して走らせることができる。AMDでは過去最大のコア並列数を誇るCPUだ。

AMDのサーバーCPUの系譜
PDF版はこちら
1個のダイから3系統の製品ファミリを派生させる
PDF版はこちら
3系統の製品ファミリ

 そのために、ZENベースのSoC「Zeppelin(ゼペリン)」(英ロックバンドLed Zeppelinは日本ではツェッペリンとドイツ語発音されるが、英語の発音はゼペリンまたはゼプリンに近い)では、非常にフレキシブルで拡張性の高いシステムアーキテクチャを採用した。AMDは、米サンフランシスコで2月11~15日に開催された半導体国際会議ISSCC(IEEE International Solid-State Circuits Conference)で、Zeppelinの詳細を明らかにした。

 Zeppelinの最大の特徴は、複数のダイでチップを構成することを前提として設計されている点。そのために、Zeppelinには、オンパッケージでダイ同士を接続するためのインターフェイスが実装されている。また、ソケット間接続のためのインターフェイスも、PCI Expressと共有のSerDes/PHYで実装されている。ISSCCでは、SoCの内部アーキテクチャやユニットの配置も、マルチダイ構成に最適化されていることが明らかにされた。

ISSCCで明らかにされたZeppelinのダイレイアウト

 具体的には、オンパッケージ接続の「IFOP (Infinity Fabric On-Package)」はダイ上に4カ所に分散配置、DRAMインターフェイスはダイの片側に寄せて配置、パッケージ間接続の「IFIS(Infinity Fabric Inter-Socket)」はダイの対角の角に配置されている。この配置によって、CPUパッケージ内にダイを4個配置した時に、ダイ間の接続配線とパッケージ外へ向かうDRAMとパッケージ間接続またはI/Oの配線が絶妙にルーティングされる。また、オンダイのインターコネクトも、レイテンシを最短にするように設計されている。

Zeppelinのダイレイアウト
PDF版はこちら
4ダイのMCM接続を前提とした設計
ISSCCで説明されたダイレイアウトとパッケージの関係

コヒーレントプロトコルを拡張したZEN世代

 AMDの現在のプロセッサ製品は、いずれもインターコネクトファブリックに「Infinity Fabric」を採用している。Infinity Fabricはマーケティング的な名称で、実体は、データ伝送の「Infinity Scalable Data Fabric(SDF)」と、制御系の信号伝達の「Infinity Scalable Control Fabric(SCF)」の2系統となる。

 Zeppelin SoCダイの内部のSDFでは、中核コンポーネントである「SDF Plane(SDFプレーン)」に各ユニットが接続されている。SDFプレーンは、コア間のコヒーレンシトラヒックを提供する。

HotChipsでのInfinity Fabricの説明

 SDFは、キャッシュコヒーレンシのプロトコルに、従来のAMDのインターコネクト「Coherent HyperTransport」のプロトコルを拡張したものを使っている。AMDは、8月のチップカンファレンス「HotChips」で、Infinity Fabric/ZENアーキテクチャのキャッシュコヒーレントプロトコルは、7ステイトの「MDOEFSI」であることを明らかにしている。

 キャッシュコヒーレントプロトコルでは、「MESI(Modified(変更)/Exclusive(排他)/Shared(共有)/Invalid(無効))」がよく使われてきた。AMDは、これにOwned(所有)を加えた「MOESI」を採用してきた。Infinity Fabricでは、これにDirtyなどを加えた7ステイトのMDOEFSIとなり、より細分化されたプロトコルとなっている。プロトコル自体は、ダイ間やソケット間でも共通するとみられる。

HotChipsで示されたInfinity Data Fabricのキャッシュコヒーレントプロトコル

 SDFにおいて、CPUなどのコアは、「Cache-Coherent Master(CCM:キャッシュコヒーレントマスタ)」インターフェイスでSDFプレーンに接続される。DRAMメモリインターフェイスは、「Unified Memory Controller(UMC:ユニファイドメモリコントローラ)」を経由して接続される。I/O回りをバインドする「IO Complex(IOコンプレックス)」は、「IO Master/Slave (IOMS:IOマスタ/スレイブ)を使う。PCI ExpressやSATA、USBといったI/O系は、すべてSDFそのものではなく、IO Complexに接続される。IO Complex側は、片方向のIOコヒーレンシプロトコルとみられる。

Zeppelinのインターコネクト構成
Zeppelinのシステムブロック図
PDF版はこちら

FLITパケット化してSerDesに送り込む

 ZeppelinのSDFの全コンポーネントは、メモリと同期するクロックで動作する。これは、異なるクロックドメインをまたぐレイテンシを削減するためだ。ZeppelinはDDR4メモリをサポートし、標準では2,667Mtpsまでの転送レートをカバーする。DDR4メモリは128-bitチャネル(2つの64-bitチャネル)でメモリクロックの倍速でデータ転送を行なう。SDFのインターフェイス幅は基本は256-bit(32-byte)であることが、昨年(2017年)のGDC(Game Developers Conference)で明らかにされている。256-bit幅で1.33GHzで伝送しているとみられる。

 SDFには、ダイ間インターフェイスの「IFOP(Infinity Fabric On-Package)」と、パッケージ間インターフェイス「IFIS(Infinity Fabric Inter-Socket)」も接続されている。IFOPとIFISは、「Coherent AMD Socket Extender (CAKE)」コンポーネントを介して接続されている。IFOPとIFISは、どちらもInfinity Fabricと名前がつけられており、プロトコルレベルでは共通化されている。しかし、物理層の実装は異なっている。データは、SDFのトランスポート層(Transport Layer)から、CAKEによって、IFOPやIFISで伝送しやすいかたちにエンコードされる。

Scalable Data Fabricと各ユニットの接続関係

 CAKEは双方向のインターフェイスで、各CAKEサイクル毎に128-bitの「FLIT(フリット:Flow control unit)」にエンコードする。FLITにパケット化することによって、異なるタイプのSerDes(シリアライザ/デシリアライザ)にフィットできるようにする。FLITは、ダイ間のIFOP(Infinity Fabric On-Package)のSerDesと、パッケージ間のIFIS(Infinity Fabric Inter-Socket)のSerDes、それぞれによって伝送される。両インターフェイスは、物理的な伝送方式が異なり、SerDesも異なっている。

2pJ/bitの低エネルギー伝送が可能なダイ間インターフェイス

 AMDアーキテクチャで、異なるダイ間を接続するIFOP(Infinity Fabric On-Package)は、32-bit幅インターフェイスで、Zeppelinでは、ダイ上にIFOPインターフェイスが4個配置されている。IFOPの最大のポイントは、低電力かつ低レイテンシに最適化されていること。2pJ/bit(picoJoule/bit:ピコジュール/ビット)と、極めて低いエネルギーで伝送ができる。

 ちなみに、オンパッケージのインターフェイスでは1pJ/bit(picoJoule/bit:ピコジュール/ビット)以下のエネルギーが目標と言われることがある。IFOPは、それにかなり近づいている。配線がIFOPよりさらに短いIntelのeDRAMのOPIO(On Package I/O)は1pJ/bit台となっている。

 IFOPは、MCM(Multi-Chip Module)でオンパッケージの短い配線に最適化されている。低電圧振幅でシングルエンデッド信号方式を取り、同レベルの伝送のディファレンシャル(差動)信号と比べて50%の電力で伝送できるという。クロックはエンベデッドではなく、フォワーディングされている。これは、レイテンシを短縮し、電力消費を抑えるためだという。このほか、ゼロパワードライバステイトやデータビットインバージョンなどの電力低減技術が導入されている。

AMDのIFOPは、2pJ/bitと極めて低いエナジーでの伝送が可能

 IFOPのSerDesは、クロックあたり32-bitずつ伝送する。そのため、128-bitのCAKE FLITは4サイクルかけて伝送される。言い換えると、IFOPのSerDesは、Infinity Scalable Data Fabric(SDF)の4倍のクロックで伝送を行なう。IFOPのビットレイトは5.33Gbpsとなる。

 IFOPの片方向での伝送帯域は21.3GB/sec、双方向で42.6GB/secとなる。DRAM側は、1チャネルが64-bit(実際にはECCを含むので72-bit)で転送レートが2.667Gbps。DRAMは片方向なので、チャネルあたり片方向で21.3GB/secとなる。2チャネルで合計42.6GB/secだ。ZeppelinのSDF回りはすべてメモリクロックと同期しているため、DRAMからFIOPまで、帯域も合致し、クロック同期のロスもない。

ZeppelinでのDRAMからダイ間伝送までの経路
PDF版はこちら
EPYC発表時に説明されたIFOP

IFISとPCI Expressの両対応となっているシリアルインターフェイス

 Infinity Fabricのうち、パッケージ間を結ぶIFISは、パッケージ内のIFOPとは大きく異なるインターコネクトとなっている。パッケージ内のIFOPが短距離配線に最適化されているのに対して、ソケット間のIFISは基板上での一定距離の配線とCPUソケットが前提となっている。

 IFISの最大のポイントは、PCI ExpressとPHYが共通化されている点。同じPHYを、IFISにもPCI Expressにも使うことができる。ディファレンシャル(差動)信号のPCI Expressと共通であるため、IFISもディファレンシャル信号となっている。伝送エネルギーは約11pJ/b(ピコジュール/ビット)と、IFOPの約5倍程度。ただし、昨年のAMDはEPYC発表時には9pJ/bと説明しており、条件によって違いがある可能性がある。IFOPと比べると、電力コストが相対的に大きなインターフェイスだが、それでもかなり抑えている。

 PCI Expressと共通化されているIFISは、1リンクが16-bitのデータレーンの構成となっている。そのため、IFISは、CAKEクロックに対して8倍の、クロックあたり8トランフファとなっている。単純に言えば、IFISは、IFOPに対して半分のインターフェイス幅で2倍の速度のインターフェイスとなっている。単純計算では、データ帯域はIFOPにマッチするはずだが、実際にはインバンドCRCのオーバーヘッドがあるため、1リンクあたりの帯域は約8/9の32GB/secとなる。Zeppelinのダイには、16-bitレーンのIFISが2リンク搭載されている。

 Zeppelinの16-bitレーンのシリアルI/Oは、マルチプロトコルI/Oとして設計されている。IFIS、PCI Express、SATAにコンフィギュラブルとなっている。しかし、それぞれプロトコルが異なる。IFISはコヒーレントプロトコルでInfinity FabricのScalable Data Fabric(SDF)にCAKEで直結される。それに対して、PCI ExpressとSATAはそれぞれのプロトコル層でIOコンプレックスに接続される。

 そのため、Zeppelinでは、SDFプレーンとIOコンプレックスの双方からIFIS/PCI ExpressのPHYに接続する仕組みとなっている。具体的には、片方の16-bitレーンはCAKEを介するSDFプレーンへの接続と、PCI ExpressのIOコンプレックスへの接続の2系統がMUX(マルチプレクサ)を介して切り替えられる。MUXのオーバーヘッドは、チャネルクロックで1クロック分に過ぎないという。

ISSCCで示されたZeppelinのI/Oサブシステムの仕組み
HotChipsで示されたZeppelinのI/Oサブシステムの仕組み

 もう片方の16-bitレーンも同様の仕組みだが、もう1つSATAプロトコルも加わっている。16レーンのうち、8レーン分がSATAに転用可能となっている。こちら側の16-bitレーンもIFISプロトコル対応になっている。それはなぜかというと、4個のダイを配置した時に、片側のダイをローテイトするためにIFISで使うことになるためだ。

EPYCにおけるDRAMアクセスレイテンシ

 Zeppelinアーキテクチャは、このようにInfinity Fabricによってスケーラブルな設計となっている。4個のCPUコアのクラスタが2個接続されて1個のダイに収められ、4個のダイが接続されて1個のCPUパッケージに収められ、2個のCPUパッケージを接続してマルチソケット構成が可能となっている。ダイの中では、SDFによってCPUコンプレックス同士が接続され、ダイ間はIFOPによって接続され、ソケット間はIFISで接続されている。

 CPUは、ローカルのダイに接続されたDRAMにアクセスできるだけでなく、パッケージ内のほかのダイに接続されたDRAMや、ほかのパッケージのダイに接続されたDRAMにもアクセスができる。アクセスの経路とレイテンシは下の図のようになっている

ローカルのメモリアクセス
異なるダイやパッケージのメモリへのアクセス
ZeppelinアーキテクチャのEPYCでのDRAMアクセスの比較
PDF版はこちら