対称型マルチプロセッシング

対称型マルチプロセッシング（たいしょうがたマルチプロセッシング、、SMP）とは、物理メモリを共有して管理する「メモリ共有型並列コンピューティング（マルチプロセッシング）方式」のこと。

対義語は（、AMP）。

アーキテクチャ 
対称型マルチプロセッシングとは、特定のCPUに非対称的に割り付けられた処理に依存することなく、全てのCPUに対して対称的、均一的に処理が割り付けられた複数プロセッサによる並列処理方式のことを言う。1つのCPUが複数の均一コアを持つ場合や、インテルのハイパースレッディング・テクノロジーなどの同時マルチスレッディング (SMT) もSMPに含まれる。

オペレーティングシステム (OS) のカーネルとCPUキャッシュ同期機構により仮想化されたシステムメモリ、および各種資源を細かく管理するロック制御方式を持ち、ソフトウェア/ハードウェアレベルの割り込み処理を均一的にCPUに割付け、その処理単位に必要な資源をロックして処理を行う。そのため、サーバの外から見るとあたかもひとつのCPUにて動作するサーバのように見える。

ただしコンピュータが行う処理のリソースが競合するような場合は逐次処理（SMPから見て非対称）とならざるをえず並列最適化は難しい。実際、多くのSMP構成サーバにおいて、ハードウェア割り込みを特定のCPUに割り付けたり、起動処理では特定のマスタブートCPUによりIPL（初期プログラムローダ）がOSのカーネルをメモリ上に展開した後、スレーブCPUが組み込まれる形をとったりするなど、完全な対称形とはならない。

歴史 
当初、UNIXのSystem7やUNIVAC・IBMなどの汎用機にて試験的に構築/導入されたSMPだったが、汎用プロセッサの登場後、本格的な研究/開発が行われてきた。特に学術的な研究にUNIXが使用されたこともあり、UNIXのSVR4系などでの実装研究が進んでいた。

1990年代前半からMIPSのR4000シリーズ、SPARCシリーズといったマルチプロセッシングを前提としたRISCプロセッサが登場し、マルチプロセッサ処理を前提としたUNIX SVR4.2MPの国産UNIX（UX/4800、UXP/DSなど）および、サン・マイクロシステムズのSolarisなどでの採用が急速に進み、サーバにおける処理高速化手法の主流として汎用化していた。

しかし、安価な量産系サーバにおいては、CPU/メモリ間の接続はバス方式が主体であり、速度もそれほど速いものではなかったため、SMPの最大構成は8 CPU、実効性能で単一CPUの5倍程度に留まり続けた。

1980年代後半に高価な特殊サーバにて使用されていたCPU間/メモリ間のクロスバースイッチが量産サーバにも採用され、ギガビット単位での情報速度を確保できるようになって以降、32/64/128 CPUといった大規模SMP構成がとれるようになっている。

この頃のSMPのバスアーキテクチャは、NUMA (Non-Uniform Memory Access) と言う、複数プロセッサが共有するメインメモリへのアクセスコストが、メモリ領域とプロセッサに依存して均一でないアーキテクチャを採用したシステムが一般的となっている。

2006年現在、ほぼ全てのUnix系OS（商用UNIX、Linuxなど）および、Windows NT系OSでSMPは採用されている。また、パーソナルコンピュータ (PC) やスマートフォン／タブレットのような一般消費者向けデバイスも、登場当初はシングルコアCPUだったが、PCは2000年代に、スマートフォン／タブレットは2010年代に、2つ以上の物理コアやSMTによる論理コアを搭載したマルチコアCPUを採用するSMP環境が主流になった。なお、当初はすべてのコアが同一の動作クロック周波数すなわちピーク処理性能を持つ対称型マルチコアが主流だったが、のちにARMアーキテクチャおよびx86アーキテクチャにおいて、big.LITTLEのような動作クロック周波数の異なる2種類のコア（Pコア、Eコア）をそれぞれ複数搭載する異種CPUトポロジー構成も登場している。ただし、異種CPUトポロジーは負荷分散による電力効率向上を目的とした構成であり、完全なメモリ共有型かつ各コアのサポートする命令セットは同一であるため、分類としてはAMPではなくSMPになる。

耐障害性など 
商用UNIX向けの上位クラスのサーバや基幹系Windowsサーバの一部においては、ブートCPUを固定化せず、正常に動作するCPUの何れか（故障CPUが無い場合は固定的）によりIPLが実行され、ブート処理を行う。PCや簡易なSMP構成の場合、ブートCPUが固定されているのが普通である。

全てのSMP対応OS/サーバにおいては、起動時にCPU障害が見つかった場合には、異常CPUはシステムに組み込まれず、正常なCPUのみで動作することになる。
一方、商用UNIXで高機能基幹系サーバを使用する場合、OSとファームウェアレベルにてCPUやキャッシュの機能チェックが稼動時に定常的に行われ、特定レベル以上のCPU障害の場合に動的にCPUを切り離し、業務を継続する。
それ以外のサーバにおいては、NMI（Non-Maskable Interrupt、マスク不可割り込み）にてUNIX系の場合はカーネルパニックを引き起こし、Windowsの場合はブルースクリーンに移行することで、システムが異常停止してしまう。

Linuxにおいても、2.6カーネル以降、NUMA/ブートCPUの移動などを組み込んだ商用大規模サーバで使用することが可能であり、富士通のPrimeQuestや日本電気のNX7700i、IBMのPシリーズなどが提供されている。

脚注

注釈

出典

関連項目 
 並列コンピューティング
 NUMA
 マルチプロセッシング
 
 ヘテロジニアスマルチコア

外部リンク 
 NAG Fortran SMPライブラリ

CPU
並列コンピューティング
フリンの分類