ファーストインプレッションからちょっと間が空いてしまったが、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割下がるとしている。
図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の脚注に書いたとおり、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)といった用途に利用可能である。
Photo03:出典は"Processor Programming Reference (PPR) for AMD Family 17h Model 01h, Revision B1 Processors" |
ここで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しかないから、無理に帯域を大きくとっても意味がないと考えている模様だ |
- パッケージ上の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と同程度で済むから、効率のよいエンコードが可能であろう。