特別企画
ベールを脱いだAMDの32コアサーバーCPU「Naples」
2017年3月15日 06:00
AMDがNaplesサーバーCPUを第2四半期に投入
AMDが満を持して次世代サーバーCPU「Naples(ネイプルズ)」の概要を発表した。
今年(2017年)第2四半期中の発売を予定するNaplesは、ハイエンドのサーバーニーズに応える高性能サーバーCPUだ。CPUコアは、新開発の「ZEN(ゼン)」マイクロアーキテクチャに変わり、CPUコアあたりのクロックあたりの性能は52%も向上する。各CPUコアは2スレッドを並列実行可能だ。NaplesはZENコアを32コア搭載、64スレッドを並列実行できる。Naplesはマルチソケット対応であるため、2ソケット構成なら、64コア/128スレッドとなる。強力なメニイコアCPUだ。
AMDのNaplesはDDR4メモリインターフェイスを、CPUにダイレクトに統合する。メモリハブチップを使わないダイレクト接続であるため、メモリレイテンシと電力の面で有利となる。メモリチャネルは合計で8チャネルで、各チャネルごとに最大2DIMMで16DIMMをサポートする。16GB DIMMの場合はメモリ容量はトータル512GBとなる。不揮発性メモリDIMMのサポートは、まだ正式発表されていないが、対応すると見られる。
AMDのNaplesは1パッケージ当たりトータルで128レーンの高速I/Oも備える。高速I/OのPHY(物理層)はコンフィギュラブルで、異なるプロトコルのI/Oに使うことが可能だ。PCI Express Gen3、SATA、NVMeなどが可能で、ストレージデバイスをほかのPLXスイッチチップやI/Oハブチップなどを介さずに、直接CPUに接続できる。そのため、ローカルストレージのレイテンシも短い。これは、大量のワークセットをネットワークストレージからローカルの高速なストレージにコピーし高いIOPSでストレージ性能を上げるような構成に向いている。
さらに、Naplesの高速I/Oは、AMD独自のインターコネクトファブリック「インフィニティファブリック」にも利用可能だ。2ソケット構成の場合は、2個のNaplesの接続を64レーンのインフィニティファブリックで行う。ハードウェアでメモリの一貫性(コヒーレンシ)を取るファブリックだ。インフィニティファブリックを使う場合は、各CPUごとに64レーンがCPU間インターコネクトに使われ、残りの64レーンがその他のI/O接続に使われる。
また、AMDは、CPU以外のAMD製品の接続も視野に入れている。ただし、Intelのファブリックの「Omni-Path」のようなノード間インターコネクトは視野に入れていない。あくまでもコンピュートノード内でのAMDチップ同士の接続用ファブリックだ。
CPU負荷の高いワークロードではIntelのデュアルソケットXeonの2倍の性能
ちなみに、ZENではチップ内のインターコネクトもインフィニティファブリックとなっている。CPUコアのクラスタであるCCX同士の接続やメモリコントローラなどの接続は、チップ内のインフィニティファブリックで実現されている。
オフチップのファブリックとオンチップのファブリックは、物理的な実装は異なるが、プロトコルは共通している。そのため、チップ間の接続からのプロトコル変換などのオーバーヘッドも小さくなる。
また、AMDは公開していないが、パッケージ内でのダイ(半導体本体)同士の接続もインフィニティファブリックを使っている可能性が高い。
AMDは、Naplesはプラットフォームチップセットを必要としないSoC(System on a Chip)だと説明している。そのため、USBなどの低速I/Oも、Naplesに統合すると見られる。
IntelのデュアルソケットCPUの最高峰「Xeon E5-2699 v4(Broadwell-EP)」は22コアで44スレッド。DDR4メモリチャネル数はダイレクトでCPUあたり4チャネル。I/OレーンはPCI Express Gen 3で40レーンだ。
AMDのNaplesは、CPUコア数だけでなく、メモリチャネル、I/Oレーンで勝る。2ソケットシステムの場合、NaplesのI/Oレーンは2CPU合計で128となるが、それでもIntelデュアルソケットより多い。この構成でCPU負荷の高い地震動解析でベンチマークを取ると、同クロックならNaplesの方が2倍速く、クロックをIntelより50%弱高くした場合は2.5倍速くなるという。
AMD GPUと最適な組み合わせ
AMDは、かつてOpteronでサーバー市場に浸透した。しかし、Bulldozer(ブルドーザ、詳細は後述)系CPUコアの世代になってからは、サーバー市場での存在感が薄れてしまった。マルチソケットサーバーCPU製品も、32nmプロセス世代で止まり、CPUコア数も8モジュール16スレッドにとどまっていた。
28nmプロセスでは、PC向けAPU(Accelerated Processing Unit)だけが製造され、サーバー向けCPUは製造されなかった。そのため、プロセス微細化と多CPUコア化を進めるIntelのXeon系サーバーCPUには引き離されてしまっていた。
Naplesはそうした状況を根底から覆す可能性を持っている。Naplesは32コア64スレッドと、Intel Xeonに匹敵するメニイコア製品であり、製造プロセス技術は14nmプロセスとこれもIntelに並ぶ。
キャッシュ量はZENアーキテクチャでのCPUクラスタであるCCX(Core Complex)あたり、L2とL3の合計で10MB(ZENのL3はエクスクルーシブキャッシュであるためL2とL3の合計量のデータがキャッシュされる)。
NaplesがPC向けZENと同様のCCX構成である場合、CPU全体で80MBのキャッシュを備えることになる。ソケット間のトラフィックを抑えるのに十分なだけの量だ。また、新CPUコアZENは、スレッドあたりの性能でIntelの14nm世代のCPUコアに匹敵する。特に、従来のサーバー用途で重要となる整数演算性能で高い数値を示す。
加えてAMDは、高性能GPU製品「Radeon」ファミリを持っている。AMDはサーバー向けのGPU「Radeon Instinct」を投入し始めており、今年中盤には新GPUコア「Vega(ベガ)」ベースの製品も投入する。Vegaはディープラーニングワークロードをアクセラレートする機能を備えている。具体的には、ディープラーニングで多用されつつあるFP16(16-bit浮動小数点演算)では、1チップで25TFLOPS程度の性能を達成する見込みだ。
高性能のGPUの機能を生かすには、高性能のCPUが必要となるが、NaplesとRadeon Instinctは強力な組み合わせとなる。VegaベースのRadeon Instinctを4個とZENを組み合わせたGPUコンピューティングでは、1ノードでFP16時に100TFLOPSとなる計算だ。1ラックなら数PFLOPS以上のシステムが可能となる。
Naplesは128レーンの高速I/Oを備えているため、1個のNaplesにフル帯域で最大4個のGPUを直にPCI Express接続することができる。多数のGPUの接続にPLXスイッチなどが不要であるため、広帯域かつ低レイテンシなGPUコンピューティングシステムが可能だ。AMDプロセッサだけで、ビッグデータ解析やディープラーニングには最適なシステム構成が実現できる。
マルチスレッドアーキテクチャが従来と異なるZEN
なぜ、Naplesのパフォーマンスが高いのか。それは、CPUコアのマイクロアーキテクチャを完全に刷新したからだ。ZENでは、スレッドあたりの性能に対する考え方が、従来のAMDコアとまったく異なっている。
AMDの現行のCPUコアは、「Bulldozer」と呼ばれるマイクロアーキテクチャを採用している。Bulldozer系CPUコアの最大の特徴は、CPUコアを2個融合させたモジュールとしている点。「クラスタベースマルチスレッディング(Cluster-based Multithreading)」と呼ばれ、Intel CPUなどのマルチスレッディングとはまったく方式が異なっていた。
Bulldozerでは、2個のCPUコアのうち、共有しても性能の問題が少ない部分は共有リソースとし、共有すると性能への影響が大きい部分だけを、それぞれのスレッド専用リソースとしている。
具体的には、整数演算ユニットとデータキャッシュ、ロード/ストアなど整数演算にかかわる部分は、2つのスレッドそれぞれに個別のリソースが用意されてる。一方で、浮動小数点演算ユニットなどは使用頻度が低いと見なして共有リソースとしている。また、共有にしないと効率が悪い命令デコーダ(後半の世代では分離)なども共有となっている。
このように、Bulldozerでは、2個のCPUコアが融合しているが、整数演算では個別のリソースを保つ。利点は、デュアルコアに近いマルチスレッド性能を、少ないリソースの増加で得られる点にある。CPUあたりの実行スレッド数を高めることもできる。
しかし、Bulldozerには弱点もあった。それは、2個のCPUコアを融合させるために、1スレッドあたりの整数演算リソースを減らしたことだ。そのため、1スレッドあたりの性能は相対的に低く抑えられていた。
それに対して、今回のZENコアは、SMT(Simultaneous Multithreading)方式のマルチスレッディングを取る。これは、演算リソースの多いCPUコアを作り、コアのほとんどのリソースを2つのスレッドで共有する方式だ。2つのスレッドの命令を混在させて1個のCPUコアの中で並列に実行する。IntelのHyper-Threadingもこの方式を採っている。ZENでは一部のキューなどを除き、ほとんどのリソースを2つのスレッドで動的に共有している。
シングルスレッド性能もマルチスレッドスループットも高いZEN
SMTの利点は、シングルスレッドのピーク性能が高くなること。その反面、2つのビジーなスレッドを走らせた場合に、リソースの競合で性能が落ちる場合がある。しかし、そうしたケースでもSMTを切ることで、スレッドあたりの性能を高めることができる。シングルスレッドの性能も高めながら、マルチスレッドの性能を高めることができる汎用性の高い方式だ。
Bulldozerの取ったクラスタベースマルチスレッディングは、Oracle(旧Sun Microsystems)のSPARC Tシリーズなどに部分的に似通っている。スループットを重視したアーキテクチャであり、Bulldozerの場合はスレッドあたりのピーク性能はトレードオフとなっていた。それに対してZENは、再びスレッド当たりの性能の強化に立ち戻りながら、SMTによるマルチスレッド性能も確保している。これは、CPU負荷の高いタイプのサーバーワークロードでも性能を発揮できることを意味している。
実際、Bulldozerでは、スレッドあたりの整数演算ユニットは2個だったのに対して、ZENでは合計4個の整数演算ユニットを備える。Bulldozerでは、スレッドあたり2個の整数演算を並列に実行できるだけだったのが、ZENでは4個の整数演算を並列実行できる。2倍の演算数となる。SMT時でも、実行中のスレッドの片方がメモリアクセス待ちで止まっている場合は、もう片方のスレッドがリソースをフルに使うことができる。SMTを止めれば、シングルスレッド性能を安定して保つことも可能だ。
結果として、ZENは、シングルスレッド負荷の高いアプリケーションにも、マルチスレッドスループットが要求されるアプリケーションにも対応できるCPUとなった。
ニューラルネットワークハードウェアを内蔵
AMDはZENコアベースのデスクトップCPU「Ryzen 7」の発表時に、ZENではBulldozer世代の最後のCPUコア「Excavator(エキスカベータ)」よりも52%もIPC(Instruction-per-Clock)が向上したと説明している。同じクロックで動作させた場合でも、ZENはExcavatorより平均で52%も多くの命令を実行できる。それだけクロック当たりの性能が高く、パフォーマンスが高い。高いIPCの根源は、AMDがクラスタマルチスレッディングのBulldozerから、SMTのZENコアへと切り替えたことにある。
しかし、それだけでなく、ZENではマイクロアーキテクチャに新しい機能を多数加えた。CPUの実行効率に影響が大きい分岐予測にはニューラルネットワークベースの予測機能を採用、x86/x64命令で遅延と消費電力が大きい命令デコードをスキップする内部命令キャッシュを搭載、整数演算は4並列で2ロード(メモリからのデータ読み出し)と1ストア(メモリへのデータ書き込み)を同時実行可能、条件分岐命令を2つ同時に実行可能となっている。
機能的には、同世代のIntel CPUコアとほぼ同等だ。
現在の高性能CPUはパイプライン化されており、プログラムの連続した命令をパイプラインでどんどん実行する。問題は条件によってプログラムの流れが分岐する条件分岐命令だ。条件が成立するまで、分岐命令から後の命令の実行を停止すると、CPUは止まってばかりで性能が出なくなってしまう。そのため、条件分岐命令がどちらに分岐するのかを予測し、予測した先の命令を実行する「投機実行(Speculative Execution)」を行っている。
投機実行では、分岐の予測を間違えた場合に、実行していた命令結果をすべて破棄しなければならなくなる。そのため、分岐予測を高精度にする必要がある。分岐予測の精度が高ければ、CPUのパイプラインは円滑に動作し、性能が上がり、消費電力が下がる。電力効率が命となっている現在のCPUにとって、分岐予測は最も重要な技術だ。
ZENでは、この部分に、ニューラルネットワークを応用した分岐技術を導入した。過去の分岐それぞれに重みをつけて、分岐のパターンを解析する。複雑な分岐パターンにも対応が可能となる。同種の技術についての論文では、回路規模が大きい場合に、ニューラルネットワークによって予測精度が向上するとされている。ZENのCPUコアでは、分岐予測部分が極めて大きくなっており、精度が高いことが予想される。
ZENの高パフォーマンス&低電力の秘密
現在の高性能CPUは、読み込んだCPU命令を実行しやすい「内部命令(マイクロオペレーション:マイクロOP)」にいったん変換してから実行している。この命令変換を命令デコードと呼ぶ。
しかし、x86/x64 CPU命令は可変長であるため、命令デコードが非常に複雑で、デコードユニットの回路規模も大きい。そのため、命令デコードで数サイクルの無駄な遅延が生じ、電力も余計に消費してしまう。
そこで、ZENではデコードした内部命令「マイクロOP」をキャッシュすることで電力効率とパフォーマンスをアップさせた。x86/x64命令から変換されたマイクロOPは、実行されると同時にOPキャッシュに保存される。
そして、同じ命令が実行される時は、x86/x64命令ではなく、OPキャッシュに保存されたマイクロOPが読み出されて実行される。OPキャッシュにヒットする場合は、命令デコードがスキップされるため、遅延が短くなり、電力の消費が減る。
また、命令デコーダからは1サイクルに4個のマイクロOPしかキューに送られないが、OPキャッシュからは1サイクルに最大8個のマイクロOPが送られる。そのため、命令の並列度も高くなる。
ZENではマイクロOPは、命令の発行ステージで、さらに細かなマイクロOPに分解され、それぞれの実行ユニットに送られる。実行ユニットは、整数演算ユニットが4つでIntel CPUと同等だ。つまり、ZENはIntel Xeonと同様に1サイクルに4個の整数演算を実行できる。L1データキャッシュは32KBで、各CPUコアに512KBのL2キャッシュが付属する。
ZENは、アウトオブオーダ実行のウインドウが192命令で、整数物理レジスタが168、浮動小数点演算レジスタが160と、実行リソースも豊富となっている。その分、多くの命令をスケジューリングして並列実行しやすい。データをメモリから読み出したり書き込むロード/ストアユニットは、2つのロードと1つのストアを並列に実行できる。また、必要なデータを先読みするプリフェッチ機能や、ストアするデータをロードユニットに送る機能も強化した。こうした機能拡張により、ZENでは性能の向上とともに、消費電力の低減が実現されている。
CPUキャッシュアーキテクチャに工夫があるZENアーキテクチャ
ZENアーキテクチャでは、CPUコアは4個で1つのクラスタ「CCX(Core Complex)」にまとめられている。NaplesもCCX構成を取っていると見られる。CCXには8MBのL3キャッシュも統合されている。ZENのキャッシュはL2キャッシュに対してL1とOPキャッシュがインクルーシブキャッシュ、つまり、L1キャッシュとOPキャッシュに格納されている内容はL2キャッシュにも含まれている。
しかし、L3キャッシュはエクスクルーシブキャッシュで、L2キャッシュの内容とは重複しない。L3はヴィクテムキャッシュになっており、L2キャッシュから追い出されたメモリ内容をキャッシュする。
エクスクルーシブキャッシュは、キャッシュの有効利用とL2を大きくしやすいという利点がある。ZENの場合は、1個のCCXに搭載されている8MBのL3と2MBのL2が、それぞれ重複しないデータを格納している。そのため、合計10MBの内容を格納できる。また、L2キャッシュを相対的に大きくしても、ムダが少ない。そのため、ZENでは各コアに512KBと比較的大きめのL2を搭載している。
しかし、エクスクルーシブキャッシュには難点もある。キャッシュメモリの一貫性(コヒーレンシ)を取る場合、インクルーシブキャッシュの場合はL3キャッシュだけをスヌープ(探査)すればいい。そのため、スヌープのトラフィックが少ない。それに対してエクスクルーシブキャッシュでは、L3だけでなくL2までスヌープ(探査)しなければならないという不利がある。これは、電力と帯域のムダとなる。ワークセットの大きなサーバーワークロードでは、これは非常に不利になる。
この問題を軽減するため、ZENでは、L2キャッシュのタグ内容の一部のコピーをL3に格納することで、キャッシュスヌープのトラフィックを低減している。L3キャッシュをミスした場合は、L3上のL2タグのコピーを参照。そこでヒットしなければ、L2はスヌープしない。そのため、無駄なL2スヌープが発生せず、電力が抑えられる。
また、AMDはこれまでのサーバーCPUでも、ソケットの異なるCPU間でのスヌープをフィルタリングする機能を実装している。マルチソケットのNaplesでも、何らかのスヌープフィルタリングが実装されると見られる。
コア単位の電圧制御も導入の可能性が高い
デスクトップ版のZENであるRyzen 7は、2個のCCXを搭載し、合計8個のZEN CPUコアを搭載している。コードネーム「Summit Ridge(サミットリッジ)」と呼ばれるRyzen 7のダイは、CPUコアのほかに、DDR4メモリインターフェイスと、コンフィギュレーション可能な高速I/Oを積んでいる。
I/Oは、すでに説明したようにPCI Express Gen3やSATA、NVMe、インフィニティファブリック(Infinity Fabric)で利用可能だ。インフィニティファブリックでは、メモリの一貫性をハードウェアで保つことができる。
Naplesは、実際にはSummit Ridgeのダイを4個連結したマルチダイ製品だと推測される。8個のCPUコアを載せたダイをCPUパッケージ上でインフィニティファブリックで接続することで、CPU同士が低レイテンシかつ広帯域に接続されている可能性が高い。Summit Ridgeのダイ上では、I/Oの物理層と推測される部分がある程度広い面積を取っている。デスクトップPC向けではイネーブルにされていない高速I/Oが、Naplesでは使用されていると考えられる。
AMDのZEN系CPUのプロセス技術は、GLOBALFOUNDRIESの14nmプロセス「14LPP」。3Dトランジスタを使ったプロセス技術で、Intelの14nmプロセスに近いテクノロジだ。14LPPは高パフォーマンス化を図った2世代目の14nmプロセスで、Samsungからライセンスを受けている。14LPPでは、消費電力の増大の元であるリーク電流(Leakage)を大幅に抑えることができるため、従来のAMD CPUと比べてプロセス技術でも大きく進歩している。
また、AMDはデスクトップ版のZEN CPU Ryzenでは、CPUコアごとに駆動電圧を調整するオンパッケージボルテージレギュレータを導入した。各CPUコアのワークロードに応じて、CPUコアの駆動電圧を調整する。最適な電圧でCPUコアが動作するため、電力消費が最適化される。この機能は、メニイコアサーバーでは極めて有効であることから、Naplesにも採用されると推測される。
なお、同技術を導入するため、Ryzen 7ではCPUパッケージに「RDL(ReDistribution Layer)」を導入した。RDLは、iPhone 7のSoC(System on a Chip)に採用されて有名になった技術で、パッケージの配線抵抗を減らし消費電力を下げる。Naplesにも同技術が導入されている可能性は高い。