週刊アスキー

  • Facebookアイコン
  • Xアイコン
  • RSSフィード

NVIDIA独自コア「Olympus」の真価 Vera CPUが見せたIPC全振りの重厚構造とメモリー帯域依存

2026年10月12日 12時00分更新

独自技術「Spatial Multithreading」の狙いと
88コアを敷き詰めたダイ構造

 さてOlympusコアの特徴なのが、Spatial Multithreadingである。いわゆるマルチスレッドには実装がいろいろあるが、Hyper-ThreadingやZenコアのSMTなどの場合、基本的には同一プロセス空間の中で複数スレッドを動かして処理するのに効果的になりやすい構成である。

Olympusコアの特徴。Mid coreと言い始めたのは、Front endが分離のIn-Order、Mid coreが混合のIn-Order、Scheduler/Executeが混合のOut-of-Orderということなのかもしれない。それはともかくこの右の図、点線がExec/LoadStore/Memoryまで完全にきていて、これではSMTにする意味がない

 Fetchは共通なので、あるスレッドが属するプロセス空間のメモリーから、次のプログラムコードを取り込んでデコードに送ることになる。したがって、同一プロセスに属する2つのスレッドをSMTで動作させると、共通のメモリー空間にアクセスすることになるので効果が出やすい。

 一方で異なるプロセスに属するスレッド同士を組み合わせると、両方のプロセスのメモリー空間からプログラムコードを取り込むことになるので効率が悪い。これが上の画像にある左側の説明である。

 当たり前の話で、FetchはProcess AとProcess Bの両方のメモリーから同時にFetchを行なったりはしないから、1サイクルごとに異なるメモリー空間からそれぞれ取り込むことになる。これを受けてデコードもサイクルごとにProcess A/Bの命令を解釈するので、言っていることそのものは正しい。

 これに対してNVIDIAのSpatial Multithreadingは、Process A用とProcess B用でFetch/Decodeを分離している。これにより、効率的に2つのスレッドを実行できる(上の画像の右側)わけだ。

 実際に、従来型のSMTとOlympusのSpatial MultithreadingをSPECint2017 Rateを使って比較した場合、特にStreamなどでは性能が向上しているとされる。理屈はわからなくもないのだが、冷静に考えると話がおかしい。

 質疑応答の中でも、Spatial Multithreadingを非対称に分けられる(例えばThread AにDecode×2、Thread BにDecode×8)という話はなかったし、これを実現しようとするとFetchもそれに合わせて帯域を変えないといけないので、現実問題として均等(つまりThread A/BともにFetch/Decodeが5命令/サイクル)になるが、これは単純に性能が落ちるだけの話になる。

 あと、Thread A/Bがまったく異なるプロセスの場合には確かに性能が確保できるかもしれないが、逆に同じプロセスに属する2つのスレッドの場合、むしろデメリットになりかねない。同じメモリー空間に対して、Fetchは半分の帯域で2回読み出しをかけることになるからだ。

 そもそもSpatial Multithreadingの目的がやや疑問である。というのはx86なら単純にSMTを無効化すればいいだけだからだ。これはOlympusも同じで、単純にMulti-Threadingを辞めればいい。それができないのは、コア数が88個しかないからだろう。

 要するにSMTを使って見かけ上のコア数を増やさなければ競争力が確保できず、ところがそれをやると性能が落ちるケースがあるのでSpatial Multithreadingを実装した、という流れに思える。ただこれが帳尻として合っているかは微妙な感じがするのだが、それは後述する。

 さて、VeraはこのOlympusコアを88個搭載したCompute Dieと、LPDDR5Xを2ch(256bit)接続できるMemory Controller Die×4、それとPCIe/CXLを搭載したSystem I/O Dieから構成される。

System I/O Dieは6×PCIe 6.4 x16のみを搭載。NVLink C2CはCompute Dieの方に実装される。システム簡単化のためにNUMAの分割サポートはなし。ダイ内で1つのNUMAエリアを構成する

 このダイ部分をアップにしたのが下の画像だ。

これはNVIDIAのTech Blogにあったスライドからダイ部分を切り出し、輝度を上げたもの。縦横比は一致していると思うが、元がCGなのでどこまで正確かはわからない

 Memory Controller DieとSystem I/O Dieはほぼもう見ての通りで違和感はないが、問題はCompute Dieの方。左上にCore×2とSLC×2と思われる場所を示したが、コアの方は13×7=91個のブロックから構成される。この91個のブロックは、NVIDIA独自のネットワークで相互接続される構造だ。

この図ではCSNが2×2の4個で表現されているが、これはあくまでも簡略化した図で、実際には7×7の49個のCSNがあり、そこにOlympus Core×2とSLC×2、それとMemory/IO向けのブリッジが必要に応じてぶら下がる構造になる

 CPUコアについては3個を冗長コア扱いにして88コア構成になる。

 一方SLCの方だが、実は微妙に縦の高さがコアと一致していないのは2つ上の画像でも示した通り。したがって、縦方向が12個だとすると12×7=84で、うち2つを冗長ブロックとして2MB×82個=164MB、というあたりが正確なところな気もする。

この記事をシェアしよう

週刊アスキーの最新情報を購読しよう

本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事