単一ダイから製品を派生させるAMD AMDは、16コア/32スレッドのデスクトップCPU「Ryzen Threadripper」のアーキテクチャ概要を明らかにした。Threadripperは、AMDにとって3系統目のZenアーキテクチャコンフィギュレーションとなる。 下のブロック図のように、2個のダイ(半導体本体)をパッケージ内で接続した構成となっている。個々のダイは、Ryzen 7と同じで8コア。そのため、Threadripperは、Ryzen 7の8コア/16スレッドの2倍の16コア/32スレッド構成となっている。 Threadripperのソケットは新しい「sTR4」で、対応チップセットは「AMD X399」。DRAMインターフェイスはRyzenの2倍の4チャネル。PCI Expressにいたっては、gen3が60レーン、gen2が8レーンという膨大な数に上っている。 これは、ダイが2個である上に、Ryzen 7では無効化されている。一部のPCI ExpressレーンがThreadripperでは有効化されているためだ。本来、Ryzen 7のダイには、PCI Expressが64レーン搭載されている。 Threadripperのダイ(半導体本体)そのものは、「Zeppelin(ゼッペリン)」と呼ばれる、Ryzen 7(Summit Ridge:サミットリッジ)のダイと同じだ。AMDは、半導体マスクコストを下げるために、ダイバリエーションを極力抑えており、同ダイ(マスクリビジョンは異なる場合がある)で複数の製品を派生させる戦略を採っている。 現在のRyzen 7/5/3は同ダイであるし、EPYCファミリも同ダイだ。構造の違いは、ダイ数とダイ上で有効になっているコア数とキャッシュ量となる。ダイ間のインターコネクトは、ThreadripperとEPYCで構造が異なっている。

上位5%の高パフォーマンスダイを選別 ThreadripperとRyzen 7の違いは、ダイの個数だけではない。まず、ダイの選別が異なる。 半導体チップは、同じウェハから採れたダイ(半導体本体)でも、性能に差がある。低電圧でも高クロック動作するダイもあれば、高電圧をかけても動作クロックが低いダイもある。チップベンダーは、ばらつきのあるダイを選別して、製品SKUに振り分ける。同じ畑から採れた野菜を、できのいい品と、悪い品に選別して出荷するのと同様だ。 今回、AMDは、Threadripperの製品化に当たって、Ryzenのダイのうち最上位の5%をThreadripper用に選別したという。このパーセンテージは説明者によって異なり、2%という説明もあったが、実際のThreadripperの出荷数を考えれば2%もありうるかもしれない。高性能なダイは、電力に対してのパフォーマンス効率が高くなる。性能の高いダイを選別してThreadripperに仕立てたということは、個体差としてRyzen製品よりさらにパフォーマンス効率が高いことを意味している。また、オーバークロック耐性も高くなると予想される。 Threadripperの公式の動作周波数は、16コア/32スレッドのRyzen Threadripper 1950Xで、16コアがベース3.4GHz、ブーストクロックは4GHz。12コア/24スレッドのRyzen Threadripper 1920Xではベース3.5GHz、ブースト4GHz。8コア/16スレッドのRyzen Threadripper 1900Xで、ベースが3.8GHz、ブースト4GHz。選別ダイとはいえ、これだけのCPUコア数で、動作周波数を高く保つことができる点が、Zenマイクロアーキテクチャの利点だ。 AMDのZeppelinダイは、1,300以上のクリティカルパスモニタ(クリティカルパスのレプリカ回路)、48のパワーサプライモニタ、20のサーマルダイオード、9つのドループディテクタを搭載する。2個のZeppelinダイを使うThreadripperでは、センサー数は2倍となっている。 Threadripperでは、これらのセンサーを使ってきめ細かくCPUコアの動作周波数を操作する。 16コア/32スレッドのRyzen Threadripper 1950Xの場合、ベース3.4GHzで動作。4コアだけが動作する場合は、最高4GHzまでブーストできる。Ryzenでは2アクティブコアでブーストクロックだった。Threadripperでは、各ダイに2コアづつのブーストコアで、合計4コアをブーストできる。動作周波数はRyzen同様に25MHz刻みで制御される。

2個のダイに分散したDRAMインターフェイス ThreadripperのDRAMインターフェイスはDDR4が4チャネル。公式サポートのDRAMの転送レートはDRAMランクとDIMM枚数によってサポートが変わる。 デュアルランクDIMMを各チャネルに2枚づつ合計8 DIMMを挿した場合は、転送レートは1,866Mtpsに抑えられる。シングルランクDIMM 8枚で2,133Mtps、デュアルランクDIMM 4枚で2,400Mtps、シングルランクDIMM 4枚で2,667Mtpsとなる。2,667Mtps時の帯域は85.3GB/sとなる。 Threadripperでは、DRAMチャネルは4チャネルだが、2チャネルづつ2個のダイ(半導体本体)に分散されている。そのため、チャネルによってメモリアクセスレイテンシが異なる。 メモリアクセストランザクションを行なうCPUコアが乗っているダイのメモリコントローラに接続されたDRAMメモリ「ニアメモリ(near memory)」に対しては、78nsのレイテンシでのメモリアクセスが可能だ。それに対して、CPUコアのダイとは異なるダイに接続されたDRAMメモリ「ファーメモリ(far memory)」に対しては、133nsのメモリアクセスレイテンシがかかる。 もっとも、Threadripperのファーメモリアクセスレイテンシは、ダイ間通信があるにしては短い。これは、ダイツーダイのオンパッケージのインターコネクトを低レイテンシに設計しているためだ。

低レイテンシかつ広帯域のダイ間Infinity Fabric AMDの現在のCPUとGPUは、いずれもインターコネクトファブリックに「Infinity Fabric」を採用している。Infinity Fabricでは、データファブリックについては上位のプロトコル層に、AMDの旧来の「Coherent HyperTransport」を拡張したプロトコルを使っている。しかし、下位の物理実装は、各層に合わせたものとなっている。 まず、ダイの内部ではCPUクラスタとメモリコントローラ、I/Oコントローラの接続をInfinity Fabricで行なっている。オンダイでは256-bit幅の広いインターフェイスを使っている。 一方、ダイツーダイ接続は、1リンクが片方向32-bitで、転送レートを高めたパラレルインターフェイスを使っている。シンプルなシングルエンデッド信号でクロックフォワーディングのインターコネクトだ。パッケージ上では配線距離が短く基板の制御ができるため、配線間の干渉やクロックスキューを抑えることができるためだという。 シリアル伝送方式を取らないことで、エンコードのレイテンシを減らした。消費エナジーも2pj/bitと極めて低くなっている。ちなみに、Ryzenにもこのインターフェイスは搭載されているが、使われていない。 AMDは、高速インターフェイス間のFIFOバッファをできるかぎり減らすことでもレイテンシを短縮している。そもそもRyzenは、CPUコア以外のユニットをメモリクロックに同期する設計となっており、オンダイのInfinity Fabricやメモリコントローラもメモリクロック動作する。加えて、EPYCではダイ間のInfinity Fabricも、メモリクロックと同期して2倍の転送レートで動作する仕様となっている。Threadripperも同様だと見られる。 Threadripperのオンパッケージのダイ間のInfinity Fabricの帯域は双方向で最高102.22GB/sとなっている。EPYCでは、ダイ間Infinity Fabricとして、各ダイが片方向32-bitのリンクを3ペア備えている。3ペアのリンクで、4個のダイを相互接続している。Threadripperでは、ダイの数は2個と少ないため、2ペアを使って2ダイ間を接続していると推定される。2ペアでは、片方向64-bitのインターコネクトとなる。 EPYCでは、ダイ間Infinity Fabricの転送レートは、最大5.33Gtpsで、DDR4-2666と同期していた。1リンクのメモリ帯域は双方向合わせて42.6GB/s。それに対して、Threadripperのダイ間Infinity Fabricの帯域は最大102.2GB/s。インターフェイス幅が64-bitとすると計算上の転送レートは最大6.38Gtps。これは、DDR4-3200のデータ転送レートと同期する。

Threadripperの2つのメモリアクセスモード Threadripperは2つのメモリアクセスモードを持つ。1つは、「UMA (Uniform Memory Access)」または「Distributed Mode(ディストリビューテッドモード)」とAMDが呼ぶモード。もう1つは、「NUMA (Non-uniform Memory Access)」または「Local Mode(ローカルモード)」とAMDが呼ぶモードだ。違いは、4つのDRAMメモリチャネルへのアクセス制御となる。 UMA/Distributedモードでは、メモリアクセストランザクションがThreadripperの4個のDRAMチャネルに分散される。4チャネルはリニアに同等に扱われ、インターリービングで4チャネルに同時に分散アクセスする。そのため、アプリケーションが4メモリチャネルのメモリ帯域をフルに活かすことができる。 もっとも、現実には、接続されたダイによってメモリアクセスのレイテンシが異なるため、平均のメモリレイテンシは若干増える。レイテンシよりもメモリ帯域が重要となるアプリケーション向けだ。3D CGツールの「Maya」のようにワーキングセットの大きなアプリケーションで効果を発揮するという。 それに対して、NUMA/Localモードでは、メモリアクセスはそのアプリケーションが走っているCPUコアのダイ(半導体本体)に接続されている2つのDRAMメモリチャネルが優先される。基本的にはメモリアクセストランザクションは、ダイに直結された2つのDRAMチャネルだけで行なわれる。メモリのローカリティを利用し、メモリアクセスのレイテンシが短縮される。 NUMA/Localモードでは、基本のメモリアクセスは2チャネルとなるため、アプリケーションあたりのメモリ帯域は半減する。メモリ帯域よりもメモリレイテンシが重要となるアプリケーション向けだ。AMDによると、「Battlefield」シリーズのようなゲームは、NUMA/Localモードで性能が上がるという。 UMA/DistributedモードとNUMA/Localモードの間の切り替えは、動的に行なうことはできない。ブート時に選択する。平均のメモリアクセスレイテンシはベンチマークでは、DDR4-3200時に、UMA/Distributedモード時に86.9ns、NUMA/Localモード時に66.2nsと、UMA/Distributedモードのほうが3割ほど遅くなっている。 x86系CPUのマルチソケット構成でのメモリアクセスは、もともとUMA型だった。メモリコントローラを内蔵する1個のノースブリッジチップに、複数のディスクリートCPUが接続されていた。各CPUは、ノースブリッジに接続されたDRAMメモリを共有するUMAだった。 そこに、AMDがCPU側にDRAMコントローラを統合したOpteronを投入、そのさいに、CPUに接続されたニアメモリと、別なCPUに接続されたファーメモリの区別があるNUMA型のメモリアーキテクチャを持ち込んだ経緯がある。2個のダイを低レイテンシに接続したThreadripperでは、どちらのメモリアクセスモードも選択ができることになる。

メモリアクセスモードの切り替えとレガシー互換モード Threadripperでは、AMDのCPUセッティングコンソールソフトウェア「Ryzen Master」のThreadripperバージョンで細かなセッティングを行なうことができる。 Threadripper向けのセッティングとして、2つのモードボタンが用意されている。一部のレガシーゲームソフトのための「Legacy Compatibility Mode(レガシー互換モード)」のオン/オフと、「Memory Access Mode(メモリアクセスモード)」の切り替えだ。 レガシー互換モード(Legacy Compatibility Mode)をオンにすると、Threadripperのスレッド数が半分になる。レガシー互換モードは、高スレッド数を制御できないレガシゲーム向けモードで、CPUハードウェアスレッドのうち半分が無効にされる。 つまり、Threadripperの32スレッドのうち、16スレッドしか利用できないように制御される。基本的にはCPUコアが無効化される。ただし、このモードでも、4個のDRAMインターフェイスと64レーンのPCI Expressはすべて利用できる。 メモリアクセスモード(Memory Access Mode)セッティングでは、メモリアクセスを、UMA/DistributedモードとNUMA/Localモードのどちらかに切り替えることができる。デフォルトではUMA/Distributedとなっている。 Ryzen MasterのThreadripper用設定プロファイルとして「Game Mode(ゲームモード)」と「Creator Mode(クリエイターモード)」が提供されている。ゲームモード(Game Mode)では、CPUの動作モードはレガシー互換モードとなり、メモリアクセスはNUMA/Localとなる。CPUスレッド数が半減し、メモリアクセスは低レイテンシとなるプロファイルだ。 クリエイターモード(Creator Mode)は、ゲームモードの対極となるプロファイルだ。クリエイターモードでは、レガシー互換モードはオフとなり、メモリアクセスはUMA/Distributedとなる。CPUスレッド数とメモリ帯域がフルとなる。スレッド数とメモリ帯域が重要なアプリケーション向けのプロファイルだ。