マルチプロセッシング(MP )とは、1 つのコンピュータシステム内で2 つ以上の中央処理装置(CPU)を使用することです。 [ 1 ] [ 2 ]この用語は、システムが複数のプロセッサをサポートする能力、またはタスクをプロセッサ間で割り当てる能力も指します。この基本的なテーマには多くのバリエーションがあり、マルチプロセッシングの定義は、主にプロセッサの定義方法に応じて、コンテキストによって異なる場合があります( 1 つのダイ上のマルチコア プロセッサ(複数のコア)、1 つのチップ キャリア(パッケージ)内の複数のダイ、1 つのコンピュータ ケース(システム ユニット)内の複数のパッケージなど)。
マルチプロセッサとは、メインメモリと周辺機器をそれぞれ共有してプログラムを同時に処理する、2 つ以上の CPU (プロセッサ: マルチプロセッサ) を備えたコンピュータ システムです。 [ 3 ] [ 4 ] 2009 年の教科書ではマルチプロセッサ システムも同様に定義されていますが、プロセッサは「システムのメモリとI/O機能の一部またはすべて」を共有する可能性があると指摘し、また、密結合システムを同義語として挙げています。[ 5 ]
オペレーティングシステムレベルでは、マルチプロセッシングは、システム内で複数の同時プロセスを実行することを指す場合があり、各プロセスは個別のCPUまたはコアで実行されます。これは、一度に1つのプロセスを実行することとは対照的です。[ 6 ] [ 7 ]この定義で使用される場合、マルチプロセッシングは、1つのプロセッサのみを使用するが、タスク間でタイムスライスで切り替えるマルチタスク(つまり、タイムシェアリングシステム)と対比されることがあります。対照的に、マルチプロセッシングは、複数のプロセッサを使用して複数のプロセスを真に並列実行することを意味します。[ 7 ]マルチプロセッシングは、1つのプロセスまたはタスクが同時に複数のプロセッサを使用することを意味するとは限りません。並列処理という用語は、一般的にその方法を示すために使用されます。[ 6 ]他の著者は、オペレーティングシステムの技術をマルチプログラミングと呼び、マルチプロセッシングという用語は、複数のプロセッサを持つハードウェアの側面に限定することを好みます。[ 2 ] [ 8 ]この記事の残りの部分では、マルチプロセッシングをこのハードウェアの意味のみで説明します。
フリンの分類法では、上述のように定義されたマルチプロセッサは、複数の命令、複数のデータ(MIMD) マシンです。[ 9 ] [ 10 ]「マルチプロセッサ」という用語は通常、すべてのプロセッサがメモリを共有する密結合システムを指すため、マルチプロセッサは、メッセージパッシングマルチコンピュータシステムも含む MIMD マシンのクラス全体ではありません。[ 9 ]
マルチプロセッシングシステムでは、すべてのCPUが同等の性能を持つ場合もあれば、一部のCPUが特定の用途のために予約されている場合もあります。ハードウェアとオペレーティングシステムソフトウェアの設計上の考慮事項の組み合わせによって、特定のシステムの対称性(または非対称性)が決まります。たとえば、ハードウェアまたはソフトウェアの考慮事項により、特定のCPUのみがすべてのハードウェア割り込みに応答する必要があり、システム内の他のすべての処理はCPU間で均等に分散される場合があります。また、カーネルモードコードの実行は割り当てられた1つのCPUのみに制限され、ユーザーモードコードは任意のプロセッサの組み合わせで実行される場合があります。このような制約を課すと、マルチプロセッシングシステムは設計が容易になることが多いですが、すべてのCPUが使用されるシステムよりも効率が劣る傾向があります。
すべてのCPUを均等に扱うシステムは、対称型マルチプロセッシング(SMP)システムと呼ばれます。すべてのCPUが均等ではないシステムでは、システムリソースは、非対称型マルチプロセッシング(ASMP)、非均一メモリアクセス(NUMA)マルチプロセッシング、クラスタ型マルチプロセッシングなど、さまざまな方法で分割されます。
マスター/スレーブ型マルチプロセッサシステムでは、マスターCPUがコンピュータを制御し、スレーブCPUは割り当てられたタスクを実行します。CPUは速度やアーキテクチャが大きく異なる場合があります。一部の(またはすべての)CPUが共通バスを共有する場合もあれば、それぞれが専用バス(専用リソース用)を持つ場合もあり、共通の通信経路を除いて完全に分離されている場合もあります。同様に、CPUは共通RAMを共有したり、他のプロセッサがアクセスできない専用RAMを持つこともできます。マスターとスレーブの役割は、CPUごとに変化する可能性があります。
メインフレームコンピュータのマスター/スレーブマルチプロセッサの初期の例としては、 Bull Gamma 60とBurroughs B5000が挙げられる。[ 11 ]
マイクロプロセッサのマスター/スレーブ マルチプロセッサ システムの初期の例としては、1982 年 2 月に発売されたTandy/Radio Shack TRS-80 Model 16デスクトップ コンピュータが挙げられます。このコンピュータは、Microsoft 版Unix (TRS-XENIX と呼ばれています)であるマルチ ユーザー/マルチ タスクのXenixオペレーティングシステムを実行していました。Model 16 には、 4 MHzで動作する8 ビットのZilog Z80 CPU と、 6 MHz で動作する16 ビットのMotorola 68000 CPU の 2 つのマイクロプロセッサが搭載されています。システムの起動時には、Z-80 がマスターとなり、Xenix の起動プロセスがスレーブ 68000 を初期化し、制御を 68000 に移します。その後、CPU の役割が入れ替わり、Z-80 はディスク、通信、プリンタ、ネットワーク、キーボード、統合モニタを含むすべての入出力(I/O) 操作を担当するスレーブ プロセッサとなり、オペレーティングシステムとアプリケーションは 68000 CPU 上で実行されます。 Z-80は他の作業にも使用できます。
1979年に発売された初期のTRS-80 Model IIもマルチプロセッサシステムであり、Z-80 CPUとキーボードにIntel 8021 [ 12 ]マイクロコントローラの両方を搭載している。8021により、Model IIは、1本の細くて柔軟なワイヤで接続された、取り外し可能な軽量キーボードを備えた最初のデスクトップコンピュータシステムとなり、専用マイクロコントローラを使用した最初のキーボードとなった可能性が高い。これらの特徴は、数年後にAppleとIBMによって模倣された。
マルチプロセッシングでは、プロセッサは、複数のコンテキストで単一の命令シーケンスを実行する(単一命令複数データ(SIMD)、ベクトル処理でよく使用される)、単一のコンテキストで複数の命令シーケンスを実行する(複数命令単一データまたはMISD、フェイルセーフシステムの冗長性に使用され、パイプラインプロセッサやハイパースレッディングの説明に適用されることもある)、または複数のコンテキストで複数の命令シーケンスを実行する(複数命令複数データまたはMIMD)ために使用できます。
密結合マルチプロセッサシステムは、バスレベルで接続された複数のCPUを備えています。これらのCPUは、中央共有メモリ(SMPまたはUMA)にアクセスしたり、ローカルメモリと共有メモリ(SM)の両方を含むメモリ階層(NUMA)に参加したりできます。IBM p690 Regattaは、ハイエンドSMPシステムの例です。Intel Xeonプロセッサは、ビジネスPCのマルチプロセッサ市場を席巻し、2004年にAMDのOpteronプロセッサシリーズがリリースされるまで、唯一の主要なx86オプションでした。どちらのプロセッサシリーズも独自のオンボードキャッシュを備えていましたが、共有メモリへのアクセスを提供していました。Xeonプロセッサは共通パイプを介して、Opteronプロセッサはシステムランダムアクセスメモリ(RAM)への独立した経路を介してアクセスしていました。
チップマルチプロセッサ(マルチコアコンピューティングとも呼ばれる)は、1つのチップ上に複数のプロセッサを搭載したもので、密結合型マルチプロセッシングの最も極端な形態と見なすことができる。複数のプロセッサを搭載したメインフレームシステムは、多くの場合、密結合型である。
疎結合型マルチプロセッサシステム(クラスタと呼ばれることが多い)は、複数の独立した比較的プロセッサ数の少ない汎用コンピュータを高速通信システム(ギガビットイーサネットが一般的)で相互接続した構成になっています。Linux Beowulfクラスタは、疎結合型システムの一例です。
密結合システムは疎結合システムよりも性能が優れ、物理的にも小型ですが、従来は初期投資額が大きく、減価償却が速い傾向がありました。一方、疎結合システムのノードは通常、安価な汎用コンピュータであり、クラスタから外された後も独立したマシンとして再利用できます。
消費電力も考慮すべき点です。密結合システムは、クラスターシステムに比べてエネルギー効率がはるかに高い傾向があります。これは、密結合システムでは、最初からコンポーネントが連携して動作するように設計することで、消費電力を大幅に削減できるのに対し、疎結合システムでは、必ずしもそのようなシステムでの使用を想定していないコンポーネントが使用されるためです。
疎結合システムは、異なるシステム上で異なるオペレーティングシステムまたはOSバージョンを実行できる能力を持つ。
複数のスレッドまたはプロセスからのデータをマージすると、競合解決、データの一貫性、バージョン管理、同期のためにかなりのオーバーヘッドが発生する可能性があります。 [ 13 ]