最大250Wレンジの32コアRyzen ThreadripperのTDP AMDは、ハイエンドデスクトップCPU(HEDT:High-End Desktop)市場に、32コアのRyzen Threadripperを投入する。12nmプロセスのZEN+コアをベースにしている。第2世代のRyzen Threadripperによって、AMDはデスクトップに最大32コアまでの製品ラインナップを揃える。2016年前半までは、HEDTのCPUコア数は1桁台だったのが、一気に膨れ上がる。 32コアのRyzen Threadripperの動作周波数とTDPは、この製品の最大の疑問点だ。第1世代のRyzen Threadripperでは、16コア版は基本クロックが3.4GHz、ブーストクロックが4GHz、TDPは180Wだった。単純に倍増させると360Wになるが、さすがにそれは難しい。 実際、AMDは、現行のRyzen Threadripperのクーリングソリューションは250Wまで対応できるとヒントを出している。そのため、32コアRyzen Threadripperも、最大でも250W止まりであることが予想される。AMDとしては、実際の製品版のテストで、プラットフォーム側が250Wでパスできるのなら、250Wで投入する可能性が高い。 ちなみに、EPYCの32コア版はTDPが180Wで、ベースが2.2GHz、ブースト時は最大で3.2GHzだ。動作周波数は、このケースではTDPによって制約されている。そのため、TDPが250Wまで引き上げられるなら、動作周波数はさらに上げられるだろう。ブースト周波数は、ピーク周波数で動作するコア数が限られるため、上げやすい。ベース周波数がどこまで引き上げることができるかがポイントとなる。 好材料の1つは、製造プロセスが12nmになっていること。初代のRyzen Threadripperは14nm LPPプロセスだった。AMDは12nmでも14nmプロセスと同じセルハイトのスタンダードセルライブラリを使っているため、12nmになってもダイサイズはシュリンクされない。しかし、12nmは14nmに対して、プロセス自体がチューンされているため、性能/電力の特性は、初代のRyzen Threadripperより向上する。ちなみに、GLOBALFOUNDRIESは、12nmプロセスの技術詳細を来週の「VLSI Symposia」で発表する予定となっている。 AMDはRyzenについては、同じ動作周波数でも14nmに対して12nmプロセスでは、平均で駆動電圧が50mV下がると説明している。これはアベレージの数字であり、選別品の特性はさらに良好になっている可能性がある。また、コアアーキテクチャのパフォーマンス向上も図られている。そのため、AMDは、12nmのZEN+のRyzen 7 2700は、14nmのZENの1700より、同等の電力時に16%もパフォーマンスがアップするとしている。似たような対比は、ZEN+ベースのRyzen Threadripperについても当てはまるはずだ。 ちなみに、性能については、AMDは12nmのZEN+でキャッシュアクセスレイテンシを短縮している。Ryzen Threadripperについても、同様のキャッシュアクセスの高速化が図られている。 AMDはRyzen 2000番台で、ブースト制御の向上を図った。CPUコアのブースト制御が「Precision Boost 2」となり、ブーストされるCPUコア数が可変となった。同じフィーチャは第2世代Ryzen Threadripperにも搭載されるという。16コアの現行Ryzen Threadripperでは、CPUコアブーストは、16コアすべてのオールコアブーストと、4コアのピークのブーストの2モードだった。 しかし、Precision Boost 2では、中間のコア数のブーストがサポートされる。32コアのRyzen Threadripperの場合は、おそらく31コアから9コアまでの段階的なブーストがサポートされると推測される。よりなめらかなブーストが実現される。 ちなみに、ZENでは、デジタルLDO(Low Drop-Out)タイプの電圧レギュレータによるコア単位の電圧制御を行なっている。CPUコア毎に個別の電圧供給を行ない、チップ全体での電力消費の低減を図っている。オンボードのプラットフォームボルテージレギュレータ(VRM)から、CPUコアの最も高いVIDで入力されたコア電圧RVDDを、各コア毎に個別のVDDに落とし込む。CPU毎に最適な電圧となるため、電力効率が向上する。

マルチダイを前提に設計されているAMDのCPU AMDがRyzen Threadripperのコア数を引き上げることができるのは、CPU設計において、マルチダイのアーキテクチャを取っているからだ。1種類のCPUダイの組み合わせによって、CPUコア数の異なる複数の製品系列を産み出す。AMDは、自社製品を複数のダイの複合にして行くビジョンを持っており、Ryzen Threadripperでは、その強味が活かされている。32コアまでの製品を、低い開発コストと低い製造コストで提供する。 初代のZENのCPUは、「Zeppelin(ゼッペリン)」と呼ばれるダイをベースにしていた。ZEN+世代でも、ダイアーキテクチャの基本は変わらない。Zeppelinダイは、8個のCPUコア、2チャネルのDDR4、32レーンのPCI Express/高速I/Oを載せている。また、CPUパッケージ上でZeppelinダイ同士を接続するインターフェイス「IFOP(Infinity Fabric On-Package)」も備える。IFOPが、Ryzen Threadripperのカギとなる技術で、基本アーキテクチャはZEN+世代も同様となる。 Zeppelinのダイでは、IFOPが4個、ダイ上に分散して配置されている。4個のダイを並べた時に、それぞれのダイ上のIFOPの間の距離がうまく最短になるように配置されている。パッケージ上でダイのうち2個は180度回転させて配置するようになっている。Zeppelinダイの長辺に2個隣接して並んでいるIFOPは、4ダイを並べた時に内側にくるIFOPだ。 この2個のIFOPのうち、ダイ中央側になるインターフェイスは、斜めのクロスするダイ接続に使われる。もう1つは、横に並んだダイとの接続に使われる。一方、逆サイドの長辺に配置されている2個のIFOPは、外側から回り込む配線に使われる。 上のEPYCの配線の例を見ると、外側になる2つのIFOPは、DRAMインターフェイスの両側に配置されており、DRAMの配線を邪魔しないように配線できるようになっている。EPYCではパッケージの2層を使って、IFOPの配線をすべてと、左上と右下のダイの各2チャネルのDRAMインターフェイスの配線が実装されている。見てもわかる通り、4個のIFOPのうち3個だけが使われている。これは、DRAMの配線を避けてダイ同士を接続するためで、IFOPは1個が無効になるが、配線がずっと容易になっている。 EPYCでは、PCI Express/IFISと残りの4チャネルのDRAMインターフェイスは、別な2配線層に配置される。PCI Express/IFISはダイの対角に配置されているため、これも見事にDRAMの配線を避けている。 32コア4ダイのRyzen Threadripperでも、IFOPの配線は上のEPYCと同様になる。4個のIFOPのうち3個を使って4ダイが接続される。ただし、DRAMチャネルと高速I/Oが半分となるので、パッケージ基板の配線はずっと楽になるはずだ。IFOP配線は、クロスする配線があるのでどうしても2層必要になる。しかし、PCI Expressは短い方の配線だけで済むはずで、最もやっかいなDRAMにいたっては、2層分の配線が不要になる。全体に、EPYCよりかなりパッケージ配線は楽になるはずだ。

Ryzen Threadripperではメモリ帯域とダイ間帯域をマッチ IFOPは、Ryzen ThreadripperとEPYCで共通する技術で、マルチダイアーキテクチャの要だ。Ryzen ThreadripperとEPYCでIFOPの帯域が異なるのは、Zeppelinアーキテクチャでは、Infinity FabricやIFOP、IFISはDRAMに同期して動作するためだ。同期させることで、データ転送のレイテンシを最小にし、バッファ類を最小にしている。 EPYCはターゲットのメモリ転送レートが2,667Mbps、それに対してRyzen Threadripperは3,200Mbpsもターゲットに含めている。そのため、IFOPの双方向のデータ帯域のピークはEPYCで42.6GB/sで、Ryzen Threadripperで51.2GB/sとなる。 Zeppelinのダイ内部のInfinity Scalable Data Fabric(SDF)からは、「Coherent AMD Socket Extender (CAKE)」インターフェイスを介して、IFOPやIFISのSerDesとデータが交換される。CAKEは各サイクル毎に128-bitの「FLIT(フリット:Flow control unit)」にエンコードして、異なるタイプのI/Oにフィットさせる。IFOPは、CAKEクロックの4倍のレートでデータ転送を行うことで、32-bit幅のインターフェイスで128-bit FLITを転送している。 Ryzen Threadripperでは、2ダイの間でのメモリ転送がフル帯域でできるように構成されている。上の図のようになっている。ちなみに、以前の記事でこの図を掲載していたが、数字を間違えており、これが正しい。 IFOPは、1つのリンクが片方向転送の32-bitリンクのペアで構成されている。1リンクは、Ryzen Threadripperの場合は片方向が計算上25.6GB/sとなる。第1世代Ryzen Threadripperの場合は、2リンクIFOPでダイが接続されているため、片方向51.2GB/sとなる。一方、DRAM側は、DDR4 3200の場合は、3,200Mbps転送でx64のインターフェイスが2つ。両メモリチャネルともメモリリードなら、2つのx64で合計51.2GB/sとなる。つまり、2チャネルのDDR4のメモリリードを、そのままの帯域でもう片方のダイの転送ができる。 とはいえ、ダイをまたいだDRAMアクセスにはレイテンシが生じる。AMDは、同じダイに接続されたDRAMをニアメモリ(Near Memory)、別なダイに接続されたDRAMをファーメモリ(Far Memory)と呼んでいる。第1世代のRyzen Threadripperでは、ニアメモリアクセスは78ns、ファーメモリアクセスは133nsとされていた。

Ryzen Threadripperのメモリアクセスモードと32コア構成 メモリアクセスレイテンシの問題を軽減するため、初代Ryzen Threadripperは2つのメモリアクセスモードを備えている。1つは、「UMA (Uniform Memory Access)」または「Distributed Mode(ディストリビューテッドモード)」とAMDが呼ぶモード。もう1つは、「NUMA (Non-uniform Memory Access)」または「Local Mode(ローカルモード)」とAMDが呼ぶモードだ。 UMA/Distributedモードでは、メモリアクセスはインターリービングで4チャネルに同時に分散アクセスする。アプリケーションが4メモリチャネルのメモリ帯域をフルに活かすことができるが、半分のアクセスはレイテンシが長くなる。 一方、NUMA/Localモードでは、メモリアクセスはそのアプリケーションが走っているCPUコアのダイに接続されているメモリチャネルが優先される。NUMA/Localモードでは、基本のメモリアクセスは2チャネルとなるため、アプリケーションあたりのメモリ帯域は半減する。しかし、メモリアクセスのレイテンシが短縮されるため、一部のゲームなどでは性能が上がる。 DRAMレイテンシとメモリアクセスモードを考えると、AMDは4ダイ32コアのRyzen Threadripperで、各ダイごとにDRAMインターフェイスを1つずつ有効にする方が合理的だ。4つのダイそれぞれにDRAMインターフェイスがある場合は、どのCPUコアも、ニアメモリを持つため、メモリレイテンシを最短にできるからだ。 しかし、その場合は問題もいくつかある。まず、DRAMアクセスがニアメモリは1チャネル単位になる。ファーメモリは3チャネルで、収まりが悪い構成となる。また、ニアメモリの帯域は1チャネル分に制約される。トータルのメモリ帯域のうち4分の1の帯域となってしまう。短レイテンシの利点があると言っても、不利は大きい。 このように、32コアRyzen Threadripperは、1ダイにつき1メモリチャネルが合理的な構成だが、その場合は、問題も生じる。とくに必要なスレッド数はそれほど多くはないが、メモリアクセスレイテンシが重要となるアプリケーションの場合は、32コアRyzen Threadripperの方が不利になりかねない。例えば、メインは8コアしか使わないアプリの場合は、32コアRyzen Threadripperの方が16コア版より、ローカルメモリ帯域とレイテンシで不利となってしまう。 そう考えると、DRAMチャネルを有効にしたダイを2つに限定する構成も想定できる。その場合は、CPUコアは4個のダイに分散しているが、16個のCPUコアは同じダイ上にDRAMが2チャネル接続されており、残りの16コアはDRAMアクセスは必ず隣のダイにアクセスしなければならない。ゲームを中心に考えるならこの構成の方が向いているケースもありそうだが、CPUコアとメモリの関係はより複雑になる。 Ryzen Threadripperでは、ゲームモード時にはメモリアクセスがNUMA/Localモード、クリエータモードではメモリアクセスがUMA/Distributedモードとなっていた。32コア版Ryzen Threadripperは、想定される4ダイに分散したメモリの場合は、どちらかというと、後者のクリエータモード向けの色彩が強くなる。