マルチプロセッサ
複数のプロセッサ(CPU)を使い、処理を分担して同時に進める方式。調整にかかるオーバーヘッドや分割できない処理があるため、台数に比例した高速化が得られるとは限らない。処理内容によっては性能向上が頭打ちになる。
イマシルちゃんの解説
マルチプロセッサは、複数のCPUで仕事を分担して同時に進める処理方式だよ。
例えば大量のデータを集計するとき、データを分けて別々のCPUに計算を任せられるんだ。
それぞれの結果を合わせれば、一つのCPUで順番に計算するより早く終えられることがあるよ。
ただし、前の計算結果を待たないと進められない部分は同時に処理できないの。
仕事の受け渡しや結果をまとめる作業にも時間がかかるんだ。
だからCPUの数だけでなく、仕事をどれだけうまく分けられるかが速さを左右するよ。
この解説はわかりやすかったですか?
より深い解説
種類
| 種類 | 内容 |
|---|---|
| 密結合マルチプロセッサ | 複数のプロセッサが、主記憶を共有する。1つのOSで制御する(マルチコアのCPUなど) |
| 疎結合マルチプロセッサ | プロセッサごとに主記憶とOSを持ち、通信でつながって処理を分担する(クラスタなど) |
オーバーヘッドを含む性能のモデル
1台の性能を1、台数を n、1台増やすごとに加わるオーバーヘッドの割合を a として、全体の性能 P を次のように表すモデルがある。
P = n ÷(1 +(n − 1)× a)
n を限りなく大きくすると、分母の 1 は無視でき、(n − 1)は n とほぼ同じになるので、
P ≒ n ÷(n × a)= 1 ÷ a
となり、性能は 1/a で頭打ちになる。
| a | n=2 | n=4 | n=16 | 上限(n → ∞) |
|---|---|---|---|---|
| 0.05 | 約1.90 | 約3.48 | 約9.14 | 20 |
| 0.2 | 約1.67 | 2.5 | 4.0 | 5 |
オーバーヘッドが大きいほど、台数を増やす効果は早く小さくなる。
アムダールの法則
プログラムのうち、並列に処理できる部分の割合(並列化率)を p、プロセッサの数を n とすると、全体の速さが何倍になるか(速度向上率)は、次の式で表される。
速度向上率 = 1 ÷((1 − p)+ p ÷ n)
n を限りなく大きくしても、並列にできない部分(1 − p)の時間は縮まらないため、速度向上率の上限は 1 ÷(1 − p) になる。
| 並列化率 p | n=4 | n=16 | 上限 |
|---|---|---|---|
| 0.5 | 1.6倍 | 約1.88倍 | 2倍 |
| 0.9 | 約3.08倍 | 6.4倍 | 10倍 |
並列にできない部分を減らすことが、台数を増やすことと同じくらい重要である。
役割の対称性と同時実行の場所
複数の処理装置を使う方式は、何を分担し、どこで並列にするかによって区別する。
| 考え方 | 主な着眼点 |
|---|---|
| 非対称型マルチプロセッシング | 特定の処理装置へOS処理などの役割を割り当てる |
| 対称型マルチプロセッシング(SMP) | 共通のOSの下で、複数の処理装置を基本的に対等に扱う |
| 同時マルチスレッディング(SMT) | 一つの物理コアの実行資源を複数のスレッドで利用する |
| グリッドコンピューティング | ネットワーク上の複数の計算機資源を協調させる |
論理プロセッサが増えることと、その数だけ独立した物理コアが増えることは同じではない。実行資源の共有や通信の費用を考え、どの階層の並列化を使っているかを見る。