アムダールの法則
プログラム内の並列できない部分の割合で、並列化による性能向上の限界が決まる $ 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}}
table:_
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倍にしかならない
さらに悪いことに、これはコア数を増やすごとに嬉しさの度合いが減っていく
ここが、アムダールの法則の主張mrsekut.icon
コアを10個にしても、10倍にならず5.3倍の性能にしかならない
無限個のコアで並列処理をしても、たったの10倍にしかならない
具体例