マルチプロセッサとは(全体像)
マルチプロセッサは、1台のコンピュータに複数のCPUを載せて、仕事を手分けして並列に処理する設計のこと。CPU同士がメモリをどう使うかで、大きく2種類に分かれる。
- SMP(対称型) … 全CPUが同じ共有メモリに等しくアクセスする。
- NUMA(非一様) … 各CPUに自分用の局所メモリを持たせ、他のCPUのメモリへは遠回りでアクセスする。
身近にたとえると、SMPは会議室で全員が共通の資料を見る(みんな同じ距離)、NUMAは各自の机に手元資料があり、他人の机へ行くのは遠回り(近い順に使うと速い)。
詳しく:SMP/NUMAとマルチコアとの関係だけ覚えれば戦える
ここが記事の心臓部。まずSMPとNUMAを対比しよう。
SMPとNUMA
| 方式 | メモリ | 向き | たとえ |
|---|---|---|---|
| SMP | 全CPUが共有メモリに等しくアクセス | 小規模(〜8コア程度) | 会議室の共通資料 |
| NUMA | 各CPUに局所メモリ。他のメモリは遠くて遅い | 大規模(サーバー・スパコン) | 各自の机+他人の机は遠回り |
ここで取り違えやすいのがNUMA。CPUがたくさんあって速そうに見えるが、他のCPUのメモリ(リモート)へのアクセスは遅い。だから、なるべく自分の手元(局所メモリ)を使うように工夫しないと、かえって遅くなる。「NUMA=必ず速い」ではない。
次に、よく混同されるマルチコアとの関係。
方式と実装の違い
| 用語 | 位置づけ |
|---|---|
| マルチプロセッサ | 設計の方式の総称(SMP/NUMA) |
| マルチコア | 1つのチップに複数のコアを載せる実装 |
つまり、マルチプロセッサは「方式」、マルチコアは「実装」で、層が違う。今のパソコンのCPUはほぼマルチコアで、その多くはSMP方式だ。「マルチコア=SMP」と単純にイコールにしないのがコツ、というわけだね。なお、複数CPUのキャッシュが食い違わないようにするキャッシュ一貫性の管理も課題になる。
わかりやすく言い換えると
要するに、ポイントは「メモリのつなぎ方(SMP/NUMA)」と「方式と実装の区別」だ。
①SMP … 全員が共通資料(共有メモリ)。小規模向き
②NUMA … 各自の手元資料(局所メモリ)。大規模向きだが、他人の机は遠くて遅い
③方式と実装 … マルチプロセッサは方式、マルチコアは実装(別の層)
「NUMAは必ず速い、ではない」「マルチコア=SMPではない」だけは取り違えやすい。
試験のツボ
🔴 一番出る:SMPとNUMAの違い
①SMPは全CPUが共有メモリに等しくアクセス(小規模)
②NUMAは各CPUに局所メモリ(大規模・他のメモリは遠い)
🔴 次に出る:NUMAは必ず速いではない
①他のCPUのメモリ(リモート)は遅い
②局所メモリを使う工夫をしないと、かえって遅くなる
🟡 押さえると安定:方式と実装
①マルチプロセッサは方式(SMP/NUMA)
②マルチコアは1チップに複数コアを載せる実装
よくある間違い
①「NUMAはコアが多いから必ず速い」→ ✗ 他のCPUのメモリ(リモート)は遅い。局所メモリを使う工夫が必要。
②「マルチコアはSMPと同じもの」→ ✗ マルチコアは実装、SMPは方式で、層が違う。
③「SMPは各CPUに別々の局所メモリを持たせる方式」→ ✗ それはNUMA。SMPは全CPUが共有メモリに等しくアクセスする。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(SMPとNUMA)
SMPとNUMAに関する次の記述のうち、正しいものはどれか。
- SMPは各CPUに局所メモリを持たせ、NUMAは全CPUが共有メモリに等しくアクセスする
- SMPもNUMAもまったく同じ方式で、メモリへのつなぎ方に違いはないものとされている
- SMPは全CPUが共有メモリに等しくアクセス、NUMAは各CPUに局所メモリを持たせる
- SMPもNUMAも単一CPUの方式で、複数CPUにはいっさい使われないものとされている
解答は 3 である。
SMPは全CPUが共有メモリに等しくアクセス、NUMAは各CPUに局所メモリを持たせるのだ。会議室の共通資料と各自の机の関係なるぞ。
選択肢1はSMPとNUMAが逆。選択肢2の「同じ方式」、選択肢4の「単一CPU」も誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | SMPとNUMAが逆 |
| 2 | ✗ | つなぎ方が違う |
| 3 | ✓ | SMP=共有・NUMA=局所 |
| 4 | ✗ | 複数CPUの方式 |
オリジナル問題2(NUMAは必ず速いではない)
NUMAに関する次の記述のうち、正しいものはどれか。
- NUMAはコアが多いので、どんな使い方をしても必ずSMPより速くなるものとされている
- NUMAは他のCPUのメモリ(リモート)が遅いので、局所メモリを使う工夫が必要である
- NUMAは局所メモリを持たず、すべてのCPUが共有メモリだけを使う方式とされている
- NUMAはメモリをいっさい使わず、すべての計算をCPU内部だけで行うものとされている
解答は 2 である。
NUMAは他のCPUのメモリ(リモート)が遅く、局所メモリを使う工夫が必要なのだ。「NUMA=必ず速い」ではないなるぞ。
選択肢1の「必ず速い」、選択肢3の「局所メモリを持たない」、選択肢4の「メモリを使わない」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | リモートは遅い |
| 2 | ✓ | リモートは遅く局所最適化が必要 |
| 3 | ✗ | 局所メモリを持つ |
| 4 | ✗ | メモリを使う |
オリジナル問題3(方式と実装)
マルチプロセッサとマルチコアの関係に関する次の記述のうち、正しいものはどれか。
- マルチプロセッサは方式の総称、マルチコアは1チップに複数コアを載せる実装である
- マルチプロセッサは実装、マルチコアは方式という、役割が逆の関係になっている
- マルチプロセッサもマルチコアもまったく同じ言葉で、区別はいっさいないものとされる
- マルチコアは単一コアの別名で、コアは1つしか載せられないものとされているものだ
解答は 1 である。
マルチプロセッサは方式の総称(SMP/NUMA)、マルチコアは1チップに複数コアを載せる実装なのだ。層が違うものなるぞ。
選択肢2の「役割が逆」、選択肢3の「同じ言葉」、選択肢4の「単一コアの別名」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 方式の総称と実装で層が違う |
| 2 | ✗ | 方式と実装が逆 |
| 3 | ✗ | 層が違う別の概念 |
| 4 | ✗ | 複数コアを載せる |
まとめ
押さえどころ
- 🔴 SMPとNUMA = SMPは共有メモリに等しくアクセス(小規模)、NUMAは局所メモリ(大規模・他は遠い)。
- 🔴 NUMAは必ず速いではない = 他のCPUのメモリは遅い。局所メモリを使う工夫が必要。
- 🟡 方式と実装 = マルチプロセッサは方式、マルチコアは1チップに複数コアを載せる実装。
次に学ぶ
執筆: SikakuQuest編集部