データ系と制御系の2つのファブリック AMDは、新CPU「Ryzen」から、チップ内外のインターコネクトファブリックを一新した。「Infinity Fabric」と呼ばれる新ファブリックによって、Ryzen以降のAMDチップでは、スケーラブルなデータ転送やきめ細かな制御が可能になるという。 Infinity Fabricは、実際には2つの異なるファブリックで構成されている。データ転送を行なう「Infinity Scalable Data Fabric(SDF)」と、制御系の信号を伝達する「Infinity Scalable Control Fabric(SCF)」の2系統だ。データ転送のInfinity SDFがチップのデータの流れを司る血管系なら、制御系のInfinity SCFはチップの神経系にあたる。この2つのファブリックによって、AMDの新チップ群は効率的に設計されるようになった。AMDのMark Papermaster氏(SVP & CTO, AMD)は次のように説明する。 「CPUなどの設計では、マイクロアーキテクチャも重要だが、配管(plumbing)、つまりどう接続するかが非常に重要となる。チップの設計では、配管は2つの意味を持つ。データとコントロールだ。その2つについて、一貫した要素で配管する、これがInfinity Fabricの思想だ。 Infinity Fabricは2つのピースから成り立っている。データファブリックと、コントロールファブリックの2つだ。データファブリックは、多数のエンジンを接続しても高いスケーラビリティのデータ転送が得られるように作った。コントロールファブリックは、異なるSoCにまたがってスケールする一貫した制御システムを実現する。そのため、どちらもスケーラブルファブリックと呼んでいる。異なるSoCでは、デスクトップ版Ryzenだけでなく、サーバーのNaples、モバイル版Ryzen、さらにディスクリートグラフィックスのVega、これらに渡って、共通したファブリックを提供する。デスクトップ版Ryzen以降のAMDのSoCは、共通したInfinity Fabricの基盤の上に作られるようになる」。 AMDの製品では、Ryzen以降のCPU、APU(Accelerated Processing Unit)、GPUはいずれもInfinity Fabricベースとなる。GPUでは、次世代のVegaからInfinity Fabricを採用する。2017年の製品で言えば、デスクトップRyzen(Summit Ridge)、サーバーCPU「Naples」、APU「Ryzen Mobile(Raven Ridge)」、ディスクリートGPUファミリ「Vega」の全てがInfinity Fabricとなる。 Infinity Fabricは、データとコントロールともに、AMDのIPのためのファブリックだ。AMD外のベンダーに対してオープンにする規格ではない。あくまでも、AMDが社内で使うために開発したファブリックだ。ただし、他社のIPをInfinity Fabricに取りこむことが容易になる仕様となっているという。

CPUとディスクリートGPU間も含めたソケット間接続もInfinity Fabric Infinity FabricのデータファブリックSDFは、オンダイ(On-Die)とダイ間の2つの異なる系統がある。オンダイファブリックは、チップのダイの中で、CPUコアやGPUコアなどの各ユニットやメモリコントローラを接続する。オフダイのファブリックは、チップパッケージ上でのダイ同士の接続や、チップソケット間の接続を行なう。どちらもInfinity Fabricなのは、プロトコル層が共通化されているからだ。論理層のプロトコルが共通化されているため、オンダイとオフダイの接続でプロトコル変換のオーバーヘッドが必要ないと見られる。 「Infinity Fabricは、1つにはオンダイのインターコネクトの拡張だ。しかし、その一方でソケット間もサポートする。ソケットでは、CPUとCPUの間、CPUとGPUの間、CPUと他のアクセラレータの間をInfinity Fabricで接続する。 データファブリックでフォーカスしたのは、AMDのIPのスケーラビリティだ。プロトコル的には、所定のノード数まで高効率で性能がスケールアップできるように設計した。具体的には、データファブリックは64コアまで良好にスケーリングできる。1ソケット内だけでなく、2ソケット間でも、ほとんどリニアな比率で延びる」とPapermaster氏は説明する。 Infinity Fabricはスケーラブルなプロトコルになっており、オフダイを含めて、少なくとも64コアまでの高い効率のスケーラビリティを持つとされている。もちろん、実装上もスケーラビリティを実現できる広帯域なファブリックになっているはずだ。 また、ここでCPUとGPUのコヒーレント接続もInfinity Fabricと明言していることも重要だ。2015年の12月の時点では、AMDはCPUとGPUの間は、業界標準のアクセラレータインターコネクトで接続するだろうと説明していた。現在は、その部分もオフチップのInfinity Fabricに変わっている。ちなみに、NVIDIAはIBM Power CPUとNVIDIA GPUをNVLinkで接続できるようにした。 Infinity SDFのプロトコル層は、AMDの以前のインターコネクトである「Coherent HyperTransport」をスタート地点としている。ただし、大きく変えており、HyperTransportと互換性があるわけではない。 「メモリコヒーレンシについてはHyperTransportをベースにしたが、Infinity Fabricは論理層も拡張している。ノウハウのスタート地点がHyperTransportだっただけで、論理層は異なる。我々は、HyperTransportとの互換性を維持する必要がないからだ。後方互換を保たなければならない理由がないため、プロトコルを自由に変更できる。また、我々はいかなる外部のスペックにも合わせる必要がない」(Papermaster氏)。

物理的な実装は製品によって大きく異なるSDF Infinity FabricのSDFは、論理層が共通化されたファブリックで、ダイの内部とダイ同士をそれぞれ接続する。ただし、実装自体はオンダイと、ダイ間では全く異なる。また、オンダイのSDFの実装も、各製品によって大きく異なるコンフィギュレーションになっているという。オンダイSDFであっても、製品毎に要求される仕様が大きく異なるからだ。 「データファブリックは非常に注意深く実装されている。実証されたプロトコル定義、適正な帯域、そして管理されたレイテンシ。プロトコル、帯域、レイテンシの3つを重視して設計した。また、プロトコルは共通だが、実装はそれぞれの製品で異なっている。 データファブリックはコンフィギュラブルである必要がある。我々はInfinity Scalable Data Fabric(SDF)と呼んでいるが、Scalableと呼ぶ理由は、コンフィギュラブルだからだ。SDFは、プロトコルはHyperTransportの資産をある程度利用しているが、実装は、非常にフレキシブルにコンフィギュレーションできるようにした。 例えば、今年(2017年)後半のモバイル版Ryzenでは、データファブリックのコンフィギュレーションは、デスクトップ版Ryzenとは大きく異なる。しかし、依然としてInfinity Fabricで、共通したアーキテクチャとなっている。つまり、SDFでは、異なる製品間で共通したアーキテクチャを採用しているが、個々の製品ごとに、ユニークなコンフィギュレーションと、物理的な最適化、レイテンシの最適化などがなされている。データファブリックは固定されたハードマクロではなく、各SoC毎に最適化できる形となっている」(Papermaster氏)。 CPUを8コア搭載したデスクトップ版Ryzenと、CPUコアとGPUコアを搭載するAPUであるモバイル版Ryzenでは、SDFに要求される仕様が異なる。データハングリーなGPUコアは広帯域な内部ファブリックを必要とする。AMDの従来のAPUでは、この問題を解決するため、CPUコアからメモリへのアクセスのバスと、GPUコアからメモリへのアクセスのバスを分離していた。これが、CPUコアとGPUコアの間での連携を取りにくくする一因となっていた。AMDは、Infinity SDFでは、一貫したアプローチでこの問題を解決すると見られる。そのために、CPU版のRyzenとAPU版のRyzenでは、内部のSDFの実装が大きく異なると見られる。 Infinity FabricのSDFについては、オンダイのファブリックの実装仕様自体はAMDの内部に留めて外部には出さない。しかし、SDFのインターフェイスによって、サードパーティのIPをSDFに接続することができるようにすることは可能だという。 「Infinity Fabricの内部実装自体は、AMD外には提供しない。これは、あくまでもAMDのIPだ。しかし、我々のファブリックに、他社IPを標準的な方法でアタッチできるようにするため、(インターフェイスは)ライセンスがしやすいように作ってある」(Papermaster氏)。 一方、ダイ間/ソケット間のInfinity Scalable Data Fabricの物理的な実装については、現在のサーバー版Naplesを見る限り、PCI Express Gen3と共通化された物理層をコンフィギュレートして使う仕様となっている。Naplesは32コアのサーバーCPUだが、各CPUパッケージ毎に128レーンの高速なI/Oリンクを備えている。このI/Oリンクは、PCI Express Gen3、SATA、NVMe、そしてInfinity Fabricに使うことができる。そして、2ソケットの場合は、2個のNaplesの接続を64レーンのインフィニティファブリックで行なう。残りの64レーンがそのほかのI/O接続に使われる。 そもそも、Naples自体が4個のダイを接続したマルチダイの製品だと推測される。そのため、パッケージ内では各ダイが高速I/Oを使ったInfinity Fabricで接続されており、残りの高速I/Oがパッケージ外のI/OとInfinity Fabricに使われていると推測される。