期待のネット新技術
NVIDIAが大型化するGPUのため採用した「Scale-up Network」とは何か?
Scale-up Network(1)
2026年7月7日 06:00
今月から何回かに分けて、新しいトレンドとして定着しつつあるScale-up Networkについて説明したいと思う。この連載の中では、2025年10月公開「Silicon Opticsの現状(7)」でNVLinkの現状を紹介したことで、間接的に説明した格好になる。
余談だが、この時に説明した内容は、2026年3月の「NVIDIA GTC 2026」で見事な手のひら返しが行われて、NVLink 8から光ベースになる(厳密に言えば電気と光のHybridになると思われる)ことが発表された。それは次回以降に説明することにして、まずはそのNVLinkから始まったScale-up Networkというものの説明をしたいと思う。
Scale-upとScale-out
今回取り上げるScale-upと対比されるのがScale-outであるが、実はNetworkの世界ではあまり馴染みがない。というか、これまではScale-upが伝統的に使われてきた感がある。そもそも"Scale-up"、Cambridge Dictionary(https://dictionary.cambridge.org/ja/dictionary/english/scale-up)によれば"to increase the size, amount, or importance of something, usually an organization or process"で、別にComputerやNetworkに限らずごく一般的に使われてきた単語である。
反対に、Scale-outの方はCambridge Dictionaryに登録がない。筆者の記憶が正しければ、これは世の中にCloud Serviceというものが出来た前後での造語であったと思う。使い分けを端的に整理すれば、性能を引き上げるのに対して、
- マシン1台あたりの性能を引き上げる = Scale-up
- マシンの性能を変えずに台数を増やす = Scale-out
となった。
余談だが、これ以前は例えば小規模なNetworkを大規模なものにすることをやはりScale-upという言い方で示すことがあった。ただ実際には小規模なものを大規模に拡充するよりは、小規模なものとは別に大規模なものを構築してそちらに機材を移設というパターンの方が多かったためか、余りScale-upという用語は煩雑に使われることはなかった気もする。
ではComputerというか主にServerでどう使い分けたか? というと、前述のようにServerの性能を更に引き上げるのがScale-up、Serverそのものの性能は変えずに台数を増やすのがScale-outである。ただScale-upで性能を上げると言ってもCPUの性能そのものを急速に引き上げるのは当然無理なので、CPUの数を増やすという形で対応することになる。
一方のScale-outもServerの台数を増やすということなので、CPUの数が増えることになる。では何が違うのか? というとMemory Access方法である。
一般にScale-upの場合、複数のCPUが同一のメモリを共有する形になる。最近のCPUはMemory I/Fを搭載しているので、物理的にはMemoryは各CPUにそれぞれ接続されているわけだが、Scale-up Serverの場合内部のInterconnectを通し、全てのCPUがそれぞれのCPUに接続されたMemoryを参照し、アクセスすることが可能である。
これは例えば、大規模なデータを処理するようなプログラムには最適であって、例えばCPUあたり2TBのMemoryを接続できれば、CPU 2つで4TB、4つなら8TB、8つなら16TBのMemoryを利用可能ということになる。これは基幹業務のデータベース(銀行や証券、大規模リテールストアチェーンの在庫管理、etc...)には欠かせない特性であり、こうした用途では現在もScale-up Serverが利用されている。
言い換えれば、こうした特定の用途以外ではほぼScale-outにシフトしてしまっているのが現状だ。例えばAMD、2000年前半にサーバー向けにラインアップしていたOpteronは最大8 CPUのScale-up構成が可能だったが、2017年から発売を開始したEPYCは1ないし2 CPUのみで、それ以上の構成はラインアップしていない。
これはIntelも同じで、かつては8 Socketが可能なXeonをラインアップしていたが、第5世代Xeon Scalable以降は1ないし2 CPU構成のみがラインアップされている。勿論AMDにしてもIntelにしても、1個のCPUに搭載されるCPU Coreの数が爆増しているから性能的にはScale-upに近いものはあるのだが、それでも基本はScale-outの方向を志向しており、現状Scale-upのサーバーを提供しているのはIBMのZシリーズとかPOWERシリーズ程度となっている。
Cache Coherencyに関する課題
何でScale-upが廃れつつあるのか? といえば、Cache Coherency(マルチプロセッサにおける複数のキャッシュの一貫性)を維持するためのオーバーヘッドが非常に大きいためである。
そもそも「キャッシュの一貫性」とは何か? 多くのCPUが共有でMemoryにアクセスできるということは、どのCPUでも書き換えができてしまうということだ。すると、あるCPUがMemoryからデータを読み出して処理を行っている最中に、別のCPUによって元のデータが書き換えられてしまうということが起こりえる。
ところが元のCPUはそんなことを知らないから、処理が終わって結果をメモリに書き出すが、それは古いデータに基づくものになるから、不整合が発生し、しかもそれをCPUは気づかないという事態に陥る。
これを防ぐための仕組みがCache Coherencyである。全てのCPUはMemoryからデータを読み出す際に、一旦自身のCacheにそれを保持しておく(というか、一度MemoryからCacheにデータがコピーされ、このコピーされたCacheの内容をCPUが読み出すというのが実情に近い)。この際にMemoryの一部に"Memoryの領域の内容はどのCPUにコピーされたか"を記録しておく(この領域をTag RAMと呼ぶ)。
そして、別のCPUがそのMemory領域を書き換えようとした場合、MemoryからCPUに対して「この領域は書き換えられたので、Cacheの内容は無効になる」と通知を行う。これを受けたCPUはCacheを更新すると共に、現在その領域を使っている処理があった場合、それを無効化する(必要ならやり直す)という処理を行うことで、「キャッシュの一貫性」を保つ仕組みである。
この仕組みはCache Snoopingと呼ばれており、CPUとMemoryを接続するInterconnectを利用して、このCache Snoopingが実施される(この際に利用されるSnooping Protocolはさまざまなものが考案されており、構成に応じて使い分けられている)。
さて話が戻るが、このSnoopingはCPUの数が増えれば増えるほど、急速にオーバーヘッドが増えるという特徴がある。というのはこのSnoopingの頻度は(Snoopingの主体をCPU側に置くのか、Memory Controller側に置くのかで多少実装の差はあるが)、CPUの数の2乗にほぼ比例する形で増えるからだ。
ちょっと試算してみよう。仮にSnoopingのオーバーヘッドが0.1%だとする。CPUが1個なら当然0である。CPUが2つだと、双方のCPUからSnoopingが行われる可能性があるから、2×0.1=0.2%。3つだと、3つのCPUから(自分以外の2つの)CPUにSnoopingを行う可能性があるから3×2×0.1=0.6%となる。同じ調子で計算してゆくと、下表のように、32 CPUになるとほぼ全てがSnoopingで埋まってしまう計算であり、全然スケーラブルに性能を伸ばせなくなることが分かる。
| CPU数 | オーバーヘッド |
| 1 | 0.0% |
| 2 | 0.2% |
| 3 | 0.6% |
| 4 | 1.2% |
| 6 | 3.0% |
| 8 | 5.6% |
| 12 | 13.2% |
| 16 | 24.0% |
| 24 | 55.2% |
| 32 | 99.2% |
NUMAからcc-NUMAへ
こうした、全てのCPUがメモリを共有する方式をUMA(Unified Memory Architecture)と呼ぶが、4 CPUくらいならともかく、8 CPUになると性能へのインパクトが大きすぎる。そこでNUMA(Non Uniform Memory Access)と呼ばれる方式が採用され始めた。これは物理的には従来のScale-upとほぼ同じ構成だが、お互いのCPUがMemoryを共有しない(のでSnoopingも原理的に発生しない)もので、ただこれはシステム的に見るとScale-upというよりはScale-outに近い。
折衷案として考え出されたのがcc-NUMA(Cache-Coherent NUMA)である。つまりMemoryの一部だけは共有とする(のでここはSnoopingが発生する)が、残りは非共有(NUMA)として扱うという仕組みだ。
これだと、他のCPUとのデータ共有が必要なデータを格納したMemoryのみがSnoopingの対象となり、殆どの部分はSnoopingが発生しない。どの程度の領域をSnoopingの対象とするか、は動作させるアプリケーションや環境などで変化させることで、性能面でのメリットとオーバーヘッドに起因するデメリットを上手くバランスさせようという仕組みである。
最近のCPUは大体このcc-NUMAを利用可能になっている構成が殆どであり、中には1つのCPUの中を複数のNUMA領域に分割できるという製品すらある。
GPUにおけるCache CoherencyとScale-up Network
さて、ここまでは延々とCPUの話をしてきたわけだが、実はGPUでも同じようなニーズが出てきた。1枚のCPUに搭載できるメモリの量は限られているから、AIなどで大規模なネットワークを動かそうとしても、メモリに乗りきらないという事態が発生しつつあったためだ。
そこでNVIDIAは、複数のGPUのMemoryを相互に接続したNVLink経由でアクセスできるようにする仕組みをV100世代のNVLinkで実装した(図01)。
元々NVLinkというInterconnectは、IBMのPOWERプロセッサー(正確にはPOWER9)とCache Coherentを保つ形でデータ転送を行うために開発されたものである。
2014年、DOE(米エネルギー省)がLLNL(ローレンス・リバモア国立研究所)他の施設に100~200PFlops級のスーパーコンピュータを導入する計画を発表し、IBMはここでNVIDIA及び(当時はまだNVIDIAには買収されていなかった)Mellanoxと組んでSummit及びSierraというシステムを導入する提案を行い、2018年に納入された。
このSummitとSierraはどちらもPOWER9プロセッサーとV100 GPUを組み合わせた構成だが、ここで利用されたのがCAPI(Coherent Accelerator Processor Interface)と呼ばれる、Cache Coherentなプロトコル(これはIBMが仕様を策定)であり、NVLinkはこれに準ずる形で実装された。
なので、Summit/SierraではCPUとGPUがお互いのMemoryをアクセスできるし、図01の構成ならGPU0とGPU1は自身及びお互いのHBM2 Memoryを自由にアクセスできる構成になっている。
NVIDIAはこれを大きく拡張した。NVLinkは当初、間にSwitchなど挟まないPeer-to-Peer構成で登場したが、同時に同社はNVSwitchと呼ばれるNVLink専用Switchを発表。これにより最大16のV100 GPUがNVLink Network経由でCache Coherentを保つ形でMemory共有が可能になった(図02)。従来Networkは、Memoryとは直接の関係がない形で実装されていたが、NVLinkはSnoopingのプロトコルを実装する形で、Memory共有を行わせることが可能になった。これがScale-up Networkの始まりという訳だ。

