アムダールの法則
プログラム内の並列できない部分の割合で、
並列化による性能向上の限界が決まる
S(N) = \frac{1}{H+(1-P) + \frac{P}{N}}
P: 並列化可能な実行時間の割合
1-P: 並列化が不可能な実行時間の割合
N: 利用可能なプロセッサの数
S(N): 性能向上率
数式上、省略されることもある
具体例を考える
プログラム内で並列化できる部分が90%の時
∴ S(N) = \frac{1}{0.1 + \frac{0.9}{N}}
_N | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ... | ∞ |
s(N) | 1 | 1.81 | 2.5 | 3.1 | 3.6 | 4.0 | 4.4 | 4.7 | 5.0 | 5.3 | ... | 10 |
これは何を言っているのかと言うと、
並列化するためにコアを2つにしても、性能が2倍になるわけではなく1.8倍にしかならない
さらに悪いことに、これはコア数を増やすごとに嬉しさの度合いが減っていく
ここが、アムダールの法則の主張

コアを10個にしても、10倍にならず5.3倍の性能にしかならない
無限個のコアで並列処理をしても、たったの10倍にしかならない
具体例