新Xeonで何が変わったか - 内部構造を解説

新Xeonで何が変わったか - 内部構造を解説

画像提供:マイナビニュース

●既存のSkylakeコアからの変更点
既報の通り、Intelは米国時間の7月11日にXeon Scalable Processor Familyを正式に発表、日本国内でも「Xeon Gold」シリーズの販売が開始された。製品ラインナップや特徴などはすでに紹介されているので割愛するとして、今回は内部構造に関してもう少し詳しく説明したい。

○CPUコア - Skylakeコアから何が変わったか

まずCPUコアについて。"Skylake-SP"というコード名の通り、基本となるのはSkylakeコアそのものである(Photo01)。実際このレベルで見る限り、差は全くない。

このスライドによると、元々のSkylake(Photo02)からの変更点は、以下の2カ所だけである。

L2が1MBに増量された
Port 5にFMAが追加された

ちなみに筆者は、Xeon Scalable Processor Familyと同じアーキテクチャを採用するハイエンドデスクトップ向けCPU「Core X」シリーズのレビューにて、グラフ67〜71の結果を基に「μop Cacheの容量が大幅に増やされた」と推定しているが、それを肯定する資料も否定する資料も含まれてはいない。

実のところIntel 64 and IA-32 Architecture Optimization Reference Manualを見ても、既存のμop Cache(Optimization Reference ManualではこれをDSB:Decoded Icacheと呼んでいる)のサイズが記載されておらず、このサイズはずっと公開しないポリシーなのかもしれない。

その他の拡張はPhoto03程度で、キャッシュ構造の変化に対応してか、キャッシュ管理命令2つと仮想化環境でのオーバーヘッド削減、あとはセキュリティ関連のみとなっている。

○AVX-512ユニットの追加と消費電力

そんなわけで大きな変更としてはAVXユニットの追加が挙げられる(Photo04)。元々AVX 512ユニットは既存のPort 0とPort 1を利用する形で搭載されているが、Skylake-SPではこの外側にさらにもう1つ、AVX-512ユニットを追加した。

ただ、外付けで演算ユニットを追加したといっても、その演算ユニットに対してデータを渡したり、演算結果を受け取ったりするのは既存のCPU Pipelineであるので、L1 D-CacheとPipelineの帯域を倍増させたというわけだ。

前述したレビュー(http://news.mynavi.jp/articles/2017/07/10/corex/015.html)のグラフ61(http://news.mynavi.jp/photo/articles/2017/07/10/corex/images/g061l.jpg)を見ると、Intel Core i9-7900XのL1の帯域は、Single Threadでもピークで330GB/sec近い。

この時点でAVX-512ユニットがどの辺の周波数で動いていたかにもよるが、例えば定格の3.3GHz駆動だとすると3.3GHz×128Bytes/cycle=422.4GB/secになるわけで、330GB/secということは2.93GHzあたりで駆動していたと考えられる。

この2つ目のAVX-512が動くと"消費電力が急増する"。これはIntelも間接的に認めている。Photo05はLINPACKをSSE 4.2/AVX/AVX2/AVX-512のそれぞれで実施した場合の性能と動作周波数、消費電力をまとめたものだが、このグラフを見ると消費電力は760W〜790W近辺に収まっており、一見してあまり消費電力が変わっていないように見える。

しかし、実際は動作周波数がSSE 4.2では3.1GHz駆動だったのが、AVX-512では2.1GHzまで下がっている。もし動作周波数を一定に保った場合にはどのくらいまで消費電力が増えるのか、ちょっと恐ろしいものがある。右の消費電力当たりのGFlopsは向上しているように見えるが、これは動作周波数を下げているから実現できているという話である。

ではAVX-512を使わなければ省電力なのか? というとこれも微妙なところ。CPUパイプラインとL1 D-Cacheのバス幅を倍増させたうえに、先のSandraのBandwidthを見るとL2も倍増に近いと思われる。こうした帯域の増加は、性能の向上にも貢献する一方で確実に消費電力も底上げしてしまう。このあたりが、Skylake-SPにおける消費電力の多さに繋がっているのではないかという気がする。

○キャッシュはNon-Inclusiveに

Xeon Scalable Processor Familyでは、キャッシュ周りが大きく変化した。筆者はSkylake-SPではキャッシュがExclusiveだと説明したが、実際にはNon-Inclusiveであった。何が違うかというと、Non-Inclusiveでは完全に排他でなく、場合によってはL1/L2とL3の間で共通するデータを持つ場合もあるということである(Photo06)。

どういうケースで発生するかを示したのがPhoto07になる。ある特定コアだけが使うデータであれば、L3にそれをコピーする必要は無いが、複数のコアから参照される場合に、完全にExclusiveにすると一旦L2からL3にWritebackする手間が掛かる(そしてそのコアは同じデータを再び参照する場合、もう一度L3からL2に取り込む必要がある)。Skylake-SPではこうした場合に、L2とL3に同じデータを保持することで、他のコアからのアクセスのLatencyを短縮するという仕組みの様だ。

ちなみにこの効用であるが、Broadwell-EPと比較した場合、MPI経由でのL3のアクセスは大差ないが、L2アクセスの時間が大幅に減る(Photo08,09)一方、あるLocalの1コアに着目した場合、Latencyそのものはほとんど変わらない(Photo10)とIntelは説明する。

まさかL3までのLatencyをcycleではなくns単位で出されると思わなかったので筆者のテストではSequentialだとcycleのみだが、In-Page Randomのこちらを見ていただくと、一応似た傾向にあることが分かる。もっともcycle数で見るとこちらの様に、もう少し差が広がっている。

●Interconnectが2次元Meshに - 何が変わる?
○Interconnectが2次元Meshに変わるも、構造的には差はない

次がInterconnectである。こちらとかでも触れたように、Skylake-SPではコア間の接続に二次元Meshが採用された。確かに従来のRing Bus+Shared Unitの構造に比べると、よりスケーラビリティがある……というか、マシに見える。

ただMeshといいながらも、Interconnectを良く見てみると、いわゆるPoint-to-PointのInterconnectではなく、それぞれが全部Ring Bus構造に描かれている気がする。その意味では、Ring Busの構造そのものに差は無く、トポロジーが変わったというべきなのかもしれない(Photo11)。

各々のコアだが、CHA(Distributed Caching and Home Agent)とLLC(L3 Cache)、さらにSnoop Filterまで搭載された形になる(Photo12)。このCHAは、要するにUPIなど経由でのリクエストを受けてLLCの中身を送り出したり、逆にデータを受け取ったりという作業を担うもので、これをコア毎に搭載しているとする。また説明を読む限りは、各コアのSnoop Filterの管理もCHAの仕事に含まれているようだ。

○一部の製品ではソケット当たり1.5TBの大容量メモリが搭載可能

メモリコントローラ(Photo13)は6chをサポート。3chずつ2つに分割されてMeshと繋がる構造になっている。製品名にMが付く一部のモデルは128GB DIMMをサポートしており、これを利用すると6ch×2枚×128GB=1536GBということで、ソケットあたり1.5TBものメモリが利用可能である。

ちなみにark.intel.comを参照すると、Xeon PlatinumのハイエンドであるXeon Platinum 8180はRecommended Customer Price(希望小売価格)が10,009ドル、同じスペックながら1.5TB Memoryを利用可能なXeon Platinum 8180Mは13,011ドルと、3,000ドルほど上乗せされているあたり、これはそれだけの価値のある機能だとIntelは考えている様だ。

気になるのは対応メモリがRDIMM/LRDIMM/3DS-LRDIMMのみでUDIMM(Unbuffered DIMM)が無いことだ。もちろんXeonの場合はUnbuffered DIMMのような低信頼性のメモリは使っていられないから、サポートから外しているというのは分かるが、単にサポートから外しているだけではなく、本当に動かないという話もあるようで、特にCore-XのMCCベースとなるCore i9-7920X以上のモデルで、いろいろと苦闘しているという話がマザーボードメーカーあたりからもれ伝わってきており、大変だなという気がする。

ちなみに説明にあるXPT prefetchとD2C/D2Kや、新しいメモリエラー対策であるADDDCについても詳細は不明である。このあたりはDatasheetが公開されるまでお預けになる
と思われる(現状は未公開)。

○内部を2つのクラスタに分割して使う「SNC」

ところで、これは以前から可能な技術ではあるのだが、内部を2つのクラスタに分割して使うCoD(Cluster-on-Die)が、Skylake-SPではSNC(Sub-NUMA Cluster)としてサポートされる(Photo14)。以前だと2つのRing Busを繋ぐShared Unitの部分で分割する形だったが、今回は水平方向のMeshを論理的に分割するという形を取るようだ。

ただし、ここで1つ疑問が生じる。論理的には水平方向のMeshは途中で分割されるのだが、物理的にはRingのままだから、あるCluster側のトラフィックがそのまま反対方向のClusterに流れ込むことも起こりうる。

おそらく、それぞれのコアにあるMesh Stopが流れてきたパケットのDomain No.を見て、自分のDomainと一致していなければ何もしない的な処理で対応していると思うのだが、トラフィックそのものとしては分割しても減らない訳で、このあたり悪影響を及ぼさないのだろうか?

メモリコントローラのBandwidthとLatencyのグラフがこちら(Photo15)だが、DDR4-2400の理論帯域が19.2GB/secなので、Xeon E5-2699v4(DDR4 4ch)の2Pだと15.36GB/secとなり、数字を見ると14GB/sec程度でているから効率91.1%でかなり高めである。

そのDDR4-2400を6ch使えるXeon Platinum 8180だと理論帯域が230.4GB/secで実測値が210GB/sec強だから、効率は91%前後でほぼ同等。DDR4-2666だと理論帯域256GB/secほどで、実測値は通常モードで235GB/secほどだからやはり91%ほどになる。

ところがSNC-2モードだと240GB/sec程になり、94%弱まで効率が上がっている。しかも同じ帯域ならSNC-2モードの方がLatencyも低め、というのはなかなか面白い。ちなみにCore→MemoryのLatencyの比較がこちら(Photo16)。全般的に、Latencyが増えないとは言わないまでも大きく変わりにくいのが特徴とは言えるかもしれない。

●Throughput Computingへ向けた製品に
○チップ間の接続はUPIに

次がUPIの話。UPIはUltra Path Interconnectの略だそうで、Bandwidthそのものは9.6GT/sec→10.4GT/secだからそれほど増えていないが、電力効率を最大21%向上させ、更にアイドル時電力を半減させたといったあたりが特徴とされる。

面白いのは2 UPIと3 UPIの両方の構成があることで、2 UPIだと最大4 Socket、3 UPIだと最大8 Socketが可能になるというあたりだろうか。昨今のトレンドを考えると、4 Socketとかこれを超える構成が必要とされるケースは極めて少なく、2 Socketで繋ぐ限りはどちらでも差はないのだが、UPIの本数によるラインナップの違いが、依然として残ることになる。

I/O周りは、3つのMesh Stopの下に3つのPCI Express x16のコントローラとDMI、それとCBDMAのコントローラがぶら下がる形になる。それぞれのMesh StopにPCIe x16が1つずつで、後はCBDMAとDMIがそれに付属する形だ。

構造自体は分からなくもないのだが、Root Complexが3つというのはServer Workloadとかには適切な一方、Desktop向けに例えばSLIなりCrossFireなりで複数のグラフィックスカードを繋ぐような用途だと、Mesh経由でRoot Complex同士の通信が煩雑に発生することになり、ちょっと不利ではあるかもしれない。

ところでPhoto18の下に、VMDがRoot Complex毎に搭載されるとあるが、その中身がPhoto19である。PCIe x16レーンを4本のx4レーンに分割し、各々のOn/Offが出来るほか、自身の配下にあるNVMeデバイスをPCIeデバイスではなくStorageデバイスとして見せかける機能を持つ。

これにより、NVMeデバイスをアクセスする際に、PCIe経由でリクエストを出すのではなく、普通にSATA/SASデバイスの様にソフトウェアから扱えるようになり、これを利用したRAIDなどが簡単に構築できるようになるというものだ。

次が省電力周りの話である。まず動作周波数制御であるが、Skylake-SPではより緩やかに動作周波数を下げる仕組みが入ったとする(Photo20)。もっともこれはAMDのZenコアの様に、倍率そのものを微細化した(Zenコアは25MHz単位)のではなく、あくまでもP0とP0nの落とし方を緩やかにした、というだけの違いの様だ。続くSpeed Shift Technology(Photo21)そのものはSkylake世代で入ったもので、今回も特に違いはない。

RASに関係する部分であるが、Intel RunSure Technology自身は以前から提供されている。今回の追加は、AEDCとLMCE、それとAdaptive DDDC+1の3項目であるが、詳細は明らかにされていない。メモリコントローラのところにあったXPT prefetchやD2C/D2K同様、Datasheetの公開が待たれるところだ。

○Omni-Path InterconnectをCPUに統合

最後がOmni-Path Interconnect絡みの話である。元々この世代からOmni-Path InterconnectをCPUに統合するという話はあったが、一部のSKUでこれをサポートすることになった。こちらの右下に"with integrated Intel Omni-Path Architecture Fabric"と書かれた枠に7製品がラインナップされているのがそれである。

図で見ると、PCIe x16レーンを一つ専用し、その先にQSFPモジュールを繋げて使う形で、さすがにSilicon Photonicsを内蔵するというわけには行かなかったようだ。またこれがPCIe x16をまるごと使うので、利用できるのはPCIe x16を4組持つHCCのXeon PlatinumとMCCのXeon Goldに限られているのは無理ないところか。

それはいいのだが、ここで突如として登場したのが"Skylake-F"である。この単語、ほかのスライドで一切出てこない。要するにSkylake-Fは"Skylake-SP+Omni Fabric"の意味だと思うのだが、以前(2015年頃)の報道ではSkylake-Fは25製品ほど登場するはずだった。さらにその後にはStorm Lakeと言われるMCM構成の製品が出るなんて話もあった。この話そのものは消えた様なのだが、コード名としてのSkylake-Fのみは残ったという事だろうか?

○Throughput Computingに振った製品に

ということでIntelの資料を元に、簡単にSkylake-SPの内部を紹介した。何というか、ベースであるSkylakeコアそのものはあまり変わっていないが、製品としての方向を大分Throughput Computingに振った感がある。

もちろんCloudだのBig Dataだののトレンドを考えるとこれは間違いではないと思うのだが、極端に製品の方向性が変わったなというのが率直な感想である。このあと市場でEPYCと競うことになる訳だが、既存のシェアをどこまで守りきれるのか、非常に興味あるところだ。
(大原雄介)

関連記事(外部サイト)