ファーストインプレッションからちょっと間が空いてしまったが、Ryzen ThreadRipper(ThreadRipper)の詳細なレビューをお届けしたい。

前回レビューの掲載後に、ThreadRipperを取り巻く環境に変化があった。最も大きいものは価格変更で、発売から2週間足らずで1万円以上の値下げとなったにもあるように、1万円少々値下げになっている。

下がったとはいえまだ高いのだが、それでも値ごろ感が出たのは事実である。また、評価は行っていないが、8コアのRyzen ThreadRipper 1900Xも9月1日に発売した。これは筆者だけではないと思うのだが、「CPU性能はそこそこでいいから、I/O性能とかメモリ容量が高いマシンが欲しい」という人向きには、この1900Xが一番手ごろなのではないかと思う。もっとも試したのはあくまでも1950Xと1920Xのみなので、1900Xの話をここでしても仕方が無いのだが。

MCMでコストを下げたThreadRipper/EPIC

さて、これまでThreadRipperの内部構造について簡単に触れる程度に留まっていたが、この機会にきちんと紹介しておきたい。ThreadRipperとEPYCの内容が混じるが、ついでということでご容赦いただきたい。

2017年のHotChipsで、AMDはEPYC/ThreadRipperでMCM(multi-chip module:複数のチップを1つのパッケージに収めたもの)構造を採用した狙いについて紹介をした(Photo01)。これによると、MCM構造にすることで、ダイの面積そのものは合計で852平方mmと、モノリシックの場合よりも10%弱大きくなるが、ダイのコストそのものはむしろ4割下がるとしている。

Photo01:そりゃまぁ、700平方mm超えのダイは相当高くつくだろうというのは容易に想像できる

図1は、適当なサイズのウェハとダイを想定したものだが、左は小さなダイ、右はその4倍の面積のダイを製造した場合の比較である。左の小さなダイなら、1枚のウェハから77個のダイが取れるところ、4倍サイズのダイだと17個しかとれないことになる。左のウェハを使ってEPYCを作ると19個分のダイ+スペア1ダイが利用できるが、右のウェハだと17個分にしかならない。

しかもこれは欠陥が0の場合の話。実際にはウェハ上に欠陥があると、さらに差が広がる。実際のところ、仮にこの寸法で製造したとすれば、左のウェハはダイが70個位取れるのに対し、右のウェハだと10個取れるかどうかというあたりだと思われる。となると、EPYCを構成するのに左のウェハなら1枚あたり17個半作れるのに、右だと10個になる。これは適当なサイズでの試算ではあるが、ウェハが大きくなればなるほど原価が高騰する。

ダイ間をつなぐInfinityFabric

MCMの場合には当然コア同士を繋ぐ仕組みが必要となる。EPYC/ThreadRipperでは、これにInfinityFabricとなる。EPYCの場合はPhoto02のような構造である。それぞれのダイには4つのInfinityFabricのSerDesと2つのPCIe x16 PHY、それと2ch DDR4が1つずつ用意され、InfinityFabricを利用してダイ間を相互接続することになる。Photo02はEPYCの場合の相互接続例であり、ThreadRipperは図2のような構図になる。

Photo02:実際には4対のInfinite FabricのSerDesが搭載されており、このうち3つを使って接続する形となる

ちなみにPhoto02の脚注に書いたとおり、InfinityFabricのSerDesはダイあたり4対用意され、このうち3対がMCM上での接続に利用される。4対目はEPYC 2Sで使われるのか? というとそうではない。InfinityFabricのSerDesはMCM上の接続には十分だが、マザーボードを挟んでのSocket間通信には十分ではない。そのため、2 Socketの場合はPCIeのSerDesをInfinityFabricに切り替え、図3のような構成で接続することになる。

これを見込んで、それぞれのダイの内部はPhoto03のようになっており、実際のダイの構成(Photo04,05)と辻褄が合う。ここに搭載されているE12G PHYというのは12Gbpsまで利用できるEnterprise PHYで、PCI Express/WAFL/xGMI/SATA/Ethernet(SGMII/10GBASE-KR/1000BASE-KX)といった用途に利用可能である。

Photo04:これはRyzen 7発表に公開されたダイショット

Photo05:E12 PHYの所在。右上と左下に合計x16ずつ搭載され、これとは別に中央下にx12 PHYが存在する形だ

ここでWAFLは、実はNDAの壁に阻まれていて何を意味しているかわからないのだが、Photo03を見るとScalable Control Fabricの先にWAFL PCS(Physical Coding Sublayer)があるので、おそらくはControl Fabricの相互接続用と思われる。

一方Data FabricはxGMI PCS経由でE12G PHYを利用しており、このGMIは"Global Memory Interconnect"の意味であろう。頭に"x"が付いているのは"external"の意味と思われる。つまり図3(やPhoto02、図2)は厳密には不正確である。図3はあくまでもData Fabricの相互接続のみが記されており、これとは別にControl Fabric用の接続が別途あるものと思われる。

話をData Fabricに戻すと、Data Fabric同士はどう接続されるかについて公表されている(Photo06)。

Photo06:InifityFabricの一対の接続あたりの帯域はそう大きくは無いのだが、そもそもメモリバスが1chあたり21.3GB/secしかないから、無理に帯域を大きくとっても意味がないと考えている模様だ

Photo07:オンパッケージの接続は、バス幅を増やして信号速度そのものは落とすことで2pJ/bitという低い消費電力を実現しているとする

Photo08:ソケット間はさすがに消費電力が増え、9pJ/bitになっている

  • パッケージ上のData Fabricは、Single Endedの32bit幅で接続され、信号速度1.33Gbps(Photo07)。
  • パッケージ間のData Fabricは、Differentialの16bit幅で接続され、信号速度2.37Gbps(Photo08)。

明示されていないのだが、ここから考えるとx4 E12G PHYは16bit/Differential、もしくは32bit Single Endedでの通信をまとめたパッケージということになるようだ。ちなみにプロトコルあるいはエンコード方式については説明されていないが、Photo03を見る限りWAFL/GMIともにPCSが別に用意されている。おそらくPCI Expressとは異なるものになると思われる。信号速度が2.5Gbps未満であれば、PCIe Gen1と同程度で済むから、効率のよいエンコードが可能であろう。