高性能システムを阻むメモリウォールの正体

現代の高性能システム、特に大規模なデータ分析や機械学習のワークロードでは、CPUコアがメモリからのデータ転送を待つ「メモリウォール」が深刻な問題となっています。筆者の経験からも、.parquet ファイルやカラムナデータベースを扱う際、最新のサーバープロセッサですら理論性能を発揮できない場面に度々遭遇するとのことです。(出典)

現代の超高速なCPUコアは、40年前のアーキテクチャ思考に囚われ、メモリを硬直的で直線的な一次元の配列として扱っているため、その真価を発揮できていません。

ソフトウェアが関連領域やカラムごとにデータをインテリジェントにクラスタリングするよう設計されているにもかかわらず、プロセッサはメモリを一次元的にしか扱えません。128コアが並行して分析ワークロードを実行するような状況では、この従来のメモリモデルは破綻し、キャッシュコヒーレンシの維持のために大量のブロードキャストスヌープクエリが発生し、内部インターコネクトが飽和してしまいます。これは、私が自宅でローカルLLMを動かす際にも感じることがあり、データ転送の遅延がパフォーマンスに直結する様子は身にしみています。

Rubik's Cube に例える「次元の平坦化」問題

従来のプロセッサが抱えるメモリ管理の問題は、「Rubik's Cube(ルービックキューブ)」に例えると非常に分かりやすいです。アプリケーションのデータが完全に解かれたルービックキューブだと想像してください。各面がテーブルのカラムや幾何学的な次元に対応しています。

しかし、従来のプロセッサはメモリを一次元のテープのように扱うため、このキューブを「平坦化」し、54個の色のついたマス目を一直線に並べてしまいます。これにより、以下のような非効率が発生します。

項目 従来のメモリ管理 Zオーダーアドレッシング(提案)
データ構造 一次元の線形配列 3次元の形状を保持
データ格納 Rubik's Cubeを平坦化して格納 Rubik's Cubeの形状を維持して格納
データアクセス 必要な部分を線形メモリ上で探し回る 3次元ブロックとして効率的にフェッチ
キャッシュ効率 低い(広範囲にアクセス) 高い(局所性を活用)
インターコネクト負荷 高い(大量のスヌープクエリ) 低い(効率的なデータ転送)

もしソフトウェアがキューブの特定の一面(例: 青い面)だけを分析する必要がある場合、CPUコアは、メモリライン上に散らばった青いマス目を不規則に探し回らなければなりません。これにより、チップのインターコネクトは「次の青いマス目はどこだ?」という何百万ものブロードキャストコヒーレンス要求で溢れかえり、プロセッサは大量の電力を熱として浪費することになります。(出典)

Zオーダーアドレッシングがもたらす革新

ここで提案されているのが、物理RAMアドレッシングを完全に放棄し、Zオーダー(モートンレイアウト)形式でメモリをネイティブに操作するという抜本的な変更です。Zオーダーアドレッシングでは、アドレスビットをチップの論理コア内で巧妙にインターリーブすることで、ハードウェアがRubik's Cubeの3D形状をネイティブに保持し、データを取り込む際に平坦化することを拒否します。

この新しいアーキテクチャでは、CPUが青い面を要求すると、キャッシュが三次元ブロック全体をはるかに効率的にフェッチできるようになります。

これにより、すべての隣接する青いデータがメモリ上で物理的に近くに配置され、キャッシュ効率が劇的に向上します。これは AMD の次世代 Epyc 9005「Turin」アーキテクチャ(16のCCXモジュールに128コアが対称的に分散)をベースラインモデルとして理論的に分析されており、並列コンピューティングの可能性を最大限に引き出すものとして期待されます。

Pythonでデータ分析を行う際も、Pandasなどでデータフレームを扱うことが多いため、メモリ上でのデータ配置がこれほどパフォーマンスに影響を与えるというのは非常に興味深いです。BigQueryも内部的にカラムナフォーマットを採用しているため、こういった低レベルの最適化がサービス全体のパフォーマンスを向上させる可能性も感じますね。

参考として、AMD GPUOpenでは、テトラヘドラルケージを用いることでBVH(Bounding Volume Hierarchy)のメモリ使用量を大幅に削減し、数億のアニメーションする三角形を持つ大規模な地形デモで、アクセラレーション構造のメモリ使用量を約1.7GBに抑え、3.3msで全てのBVHを更新している事例が紹介されています。(出典)これは、3次元空間構造を効率的に扱うアプローチの一例と言えるでしょう。

メモリと電力効率の未来

メモリの効率化は、単にパフォーマンス向上だけでなく、電力効率の改善にも直結します。Tom's Hardwareの記事では、Micronが512GB DDR5-9200メモリモジュールを発表したことに触れられています。

このモジュールは16Wの消費電力で、128GBモジュールを4つ使用するよりも60%省エネであると主張されています。(出典)

Zオーダーアドレッシングのような根本的なアーキテクチャの変更と、高密度かつ低消費電力のメモリ技術が組み合わさることで、今後のデータセンターや高性能コンピューティングは、さらに大きな進化を遂げるのではないでしょうか。特に、GCPなどのクラウド環境でコスト最適化を考える際、CPU利用率だけでなくメモリ使用量と消費電力のバランスは非常に重要になるため、こういった技術動向は常にチェックしていきたいところです。自宅のRTX 3090でLLMを動かす際も、メモリのボトルネックは常に感じているので、非常に期待が持てるニュースだと感じます。