マルチプロセッサ
複数のプロセッサ(CPU)で処理を分担して、性能を高める方式。ただし、プロセッサの間の調整などのオーバーヘッドがあるため、台数を増やしても性能は台数に比例して上がらず、ある値で頭打ちになる。
イマシルちゃんの解説
宿題を1人でやるより、友だちと分けてやったほうが早く終わるよね。
でも、10人、100人と増やしていくと、
「だれがどこをやる?」って相談したり、答えをまとめたりする時間がどんどん増えて、
思ったほど早くならないんだ。
人数を増やせば増やすほど速くなる、っていうわけじゃないんだよ。
より深い解説
種類
| 種類 | 内容 |
|---|---|
| 密結合マルチプロセッサ | 複数のプロセッサが、主記憶を共有する。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倍 |
並列にできない部分を減らすことが、台数を増やすことと同じくらい重要である。