![曖昧さ回避](https://upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Disambig_gray.svg/25px-Disambig_gray.svg.png) |
この項目では、コンピュータシステムの一部について説明しています。「Numa」という名義を用いているLOOP CHILDの元メンバーについては「沼能友樹」をご覧ください。 |
NUMA(英: Non-Uniform Memory Access)とは、共有メモリ型マルチプロセッサコンピュータシステムのアーキテクチャのひとつで、複数プロセッサが共有するメインメモリへのアクセスコストが、メモリ領域とプロセッサに依存して均一でないアーキテクチャである。日本語では「不均一メモリアクセス」や「不均等メモリアクセス」と訳される[1][2]。
プロセッサとメモリの対(これをノードと呼ぶ)が複数存在し、それらをインターコネクト(その詳細は問わない)で接続したものを学術的にはNUMAの定義としている。ただし共有メモリ型であるので各プロセッサが全ノードのメモリを利用可能である必要があり、各ノードのメモリを全プロセッサに共通の物理アドレス空間にマップできることが要件となる。あるプロセッサから見て同一ノードのメモリを「ローカル」メモリ、他ノードのメモリを「リモート」メモリと呼ぶ。
一般的には
- ローカルメモリのアクセス遅延時間 < リモートメモリのアクセス遅延時間
である。
小規模の対称型マルチプロセッシング (SMP) システムでは単一バス上にすべてのプロセッサとメモリが同居しているが、バスの特性として複数プロセッサによるメモリの同時アクセスができないことが挙げられる。あるプロセッサがメモリアクセスを行っている間、他のプロセッサは待つしかない。この現象は同一バスに接続されるプロセッサが増えるにしたがって顕著となる。したがってSMPシステムの並列度を増してスケールアップしていく場合、単純に小規模SMPシステムの設計を拡張してバスに接続するプロセッサ数を増やしていったのでは、プロセッサはほとんどの時間をメモリアクセスの待ち時間に費やすことになってしまうであろう。また、単一バスに接続されるプロセッサが増えるということはバス信号線の物理的長さの増大を意味し、それはバスクロック向上の阻害要因となってしまう(信号線路上を伝わる電気信号の速さは有限であるため)。
これを解決するため、メモリを複数バンクに分割しプロセッサとメモリバンク間をクロスバースイッチなどで結ぶ手法(メモリインターリーブ)も実際に取られているが、この手法ではローカルバスと比較して常に大きな遅延でアクセスすることになってしまう(このようなアーキテクチャは、NUMAの定義でノードを構成するプロセッサとメモリをプロセッサノードとメモリノードにデカップリングしたUMAアーキテクチャの一形態である)。
また、メモリ側をマルチポートとすることも考えられるが、同時アクセスによる遅延を防ぐためポートを増やすとそれだけインターコネクトのための信号線が増えるためコスト増大を招いてしまう。
ソフトウェアの動作を詳しく観察すると、ほとんどのメモリアクセスはある特定の領域に集中している(参照の局所性)。オペレーティングシステムが適切にメモリを割り当てることによって、プロセッサが頻繁に参照する必要のあるデータをアクセスコストの低いメモリに配置し、アクセスコストの高いメモリには頻繁に参照しないデータを配置することができる。
それによって、実際には不均一なメモリアクセスコストを持つアーキテクチャのシステム(実際のSMP的システム)でも理想的なSMPシステムに近い性能を発揮することができる。この点に着目したのがNUMAアーキテクチャである。
NUMAの特徴をまとめると、バスを共有するプロセッサ数を抑えることでバスの輻輳を防ぎ、バスクロックの向上を容易にする。その一方で、共有メモリ型のマルチプロセッサシステムであるのでNUMAシステムはソフトウェア的には(少なくともユーザアプリケーションからは)通常のSMPシステムと同等に見え、したがってSMPシステム用に開発されたアプリケーションがそのまま稼動する。ただし、オペレーティングシステムがNUMAを意識したメモリ管理を行わない場合は性能劣化が避けられない。
![](https://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Outdated.svg/40px-Outdated.svg.png) | この節は更新が必要とされています。
この 節には 古い 情報が 掲載されています。 編集の 際に 新しい 情報を 記事に 反映させてください。 反映後、このタグは 除去してください。 (2023年11月) |
初期[いつ?]のNUMAシステムは、4ウェイ程度の小規模なSMPシステム(これを「ビルディング・ブロック」などと呼ぶ)を比較的高速・低レイテンシのインターコネクトによって接続して構成されていた。
現在[いつ?]、主流のCPUにおいては、チップレベルでNUMAアーキテクチャを取り入れているものが多い(インテルのItanium、Nehalem系などや、AMDのOpteronプロセッサなど)。
これらのプロセッサではメモリバスがプロセッサチップと直結しており、メモリと組み合わせて単一のNUMAノードを構成し、リモートメモリアクセスを行うためのチップ間高速インターコネクトポートがオンチップで実装されている。
NUMAに対して、メモリアクセスコストの均一性を保ったまま大規模SMPシステムを構築するアーキテクチャを、特にNUMAと区別するためUMA(Uniform Memory Access)と呼ぶことがある[注釈 1]。
NUMAを採用した独自大型サーバを製造販売している会社としては、SGI[いつ?]、IBM、HP、富士通(富士通シーメンス)、NEC、サンマイクロシステム[いつ?]、Crayなどがある。