NUMA

NUMA（Non-Uniform Memory Access、ヌマ）とは、共有メモリ型マルチプロセッサコンピュータシステムのアーキテクチャのひとつで、複数プロセッサが共有するメインメモリへのアクセスコストが、メモリ領域とプロセッサに依存して均一でないアーキテクチャである。
定義.
プロセッサとメモリの対（これをノードと呼ぶ）が複数存在し、それらをインターコネクト（その詳細は問わない）で接続したものを学術的にはNUMAの定義としている。ただし共有メモリ型であるので各プロセッサが全ノードのメモリを利用可能である必要があり、各ノードのメモリを全プロセッサに共通の物理アドレス空間にマップできることが要件となる。あるプロセッサから見て同一ノードのメモリを「ローカル」メモリ、他ノードのメモリを「リモート」メモリと呼ぶ。
一般的には
である。
小規模SMPシステムでは単一バス上にすべてのプロセッサとメモリが同居しているが、バスの特性として複数プロセッサによるメモリの同時アクセスができないことが挙げられる。あるプロセッサがメモリアクセスを行っている間他は待つしかない。この現象は同一バスに接続されるプロセッサが増えるにしたがって顕著となる。したがってSMPシステムの並列度を増してスケールアップしていく場合、単純に小規模SMPシステムの設計を拡張してバスに接続するプロセッサ数を増やしていったのでは、プロセッサはほとんどの時間をメモリアクセスの待ち時間に費やすことになってしまうであろう。また、単一バスに接続されるプロセッサが増えるということはバス信号線の物理的長さの増大を意味し、それはバスクロック向上の阻害要因となってしまう（信号線路上を伝わる電気信号の速さは有限であるため）。
これを解決するため、メモリを複数バンクに分割しプロセッサとメモリバンク間をクロスバースイッチなどで結ぶ手法（メモリインターリーブ）も実際に取られているが、この手法ではローカルバスと比較して常に大きな遅延でアクセスすることになってしまう（このようなアーキテクチャは、NUMAの定義でノードを構成するプロセッサとメモリをプロセッサノードとメモリノードにデカップリングしたUMAアーキテクチャの一形態である）。
また、メモリ側をマルチポートとすることも考えられるが、同時アクセスによる遅延を防ぐためポートを増やすとそれだけインターコネクトのための信号線が増えるためコスト増大を招いてしまう。
NUMA浸透の背景.
ソフトウェアの動作を詳しく観察すると、ほとんどのメモリアクセスはある特定の領域に集中している（「参照の局所性」）。オペレーティングシステムが適切にメモリを割り当てることによって、プロセッサが頻繁に参照する必要のあるデータをアクセスコストの低いメモリに配置し、アクセスコストの高いメモリには頻繁に参照しないデータを配置することができる。
それによって、実際には不均一なメモリアクセスコストを持つアーキテクチャのシステム(実際のSMP的システム)でも理想的なSMPシステムに近い性能を発揮することができる。この点に着目したのがNUMAアーキテクチャである。
NUMAの特徴をまとめると、バスを共有するプロセッサ数を抑えることでバスの輻輳を防ぎ、バスクロックの向上を容易にする。その一方で、共有メモリ型のマルチプロセッサシステムであるのでNUMAシステムはソフトウェア的には（少なくともユーザアプリケーションからは）通常のSMPシステムと同等に見え、したがってSMPシステム用に開発されたアプリケーションがそのまま稼動する。ただし、オペレーティングシステムがNUMAを意識したメモリ管理を行わない場合は性能劣化が避けられない。
歴史.
初期のNUMAシステムは、4ウェイ程度の小規模なSMPシステム（これを「ビルディング・ブロック」などと呼ぶ）を比較的高速・低レイテンシのインターコネクトによって接続して構成されていた。
現在、主流のCPUにおいては、チップレベルでNUMAアーキテクチャを取り入れているものが多い。(インテルのItanium、Nehalem系などや、AMDのOpteronプロセッサなど)
これらのプロセッサではメモリバスがプロセッサチップと直結しており、メモリと組み合わせて単一のNUMAノードを構成し、リモートメモリアクセスを行うためのチップ間高速インターコネクトポートがオンチップで実装されている。
NUMAに対してメモリアクセスコストの均一性を保ったまま大規模SMPシステムを構築するアーキテクチャを、特にNUMAと区別するためUMA（Uniform Memory Access）と呼ぶことがある。
NUMAを採用した独自大型サーバを製造販売している会社としてはSGI、IBM、HP、富士通(富士通シーメンス)、NEC、サンマイクロシステム、Crayなどがある。