IT用語

アムダールの法則とは?一部だけ速くしても全体は速くならない理由をわかりやすく解説!

クマノくらげ

はじめに

コンピュータの性能向上や並列処理を学んでいると、アムダールの法則という言葉が出てくることがあります。

アムダールの法則は、簡単に言うと、

「処理の一部だけを高速化しても、全体の性能向上には限界がある」

という考え方です。

この記事では、アムダールの法則について、会話形式でわかりやすく解説します。

アムダールの法則って何?

コンピュータの処理を速くするときに、全体のうち高速化できる部分がどれくらいあるかが重要だという法則だよ。

速い部品を使えば、その分だけ全体も速くなるんじゃないの?

そこがポイント。実は、一部だけ速くしても、速くできない部分が残っていると全体の性能向上には限界があるんだ。

料理で考えるアムダールの法則

ちょっとカレー作りで例えてみようか。

カレー好きね。まぁいいけど。

カレーを作る作業には、野菜を切る、肉を炒める、煮込む、ご飯を炊く、盛り付ける、みたいな工程があるよね。

そうだねぇ。

このうち、野菜を切る作業だけをすごく速くしても、煮込む時間が変わらなければ、全体の時間はあまり短くならない。

確かに。煮込む時間が長ければ、そこが待ち時間になるね。

これがアムダールの法則の考え方だよ。

並列処理との関係

アムダールの法則は、どんな場面で使うの?

よく出てくるのは、並列処理の話だよ。

並列処理って、複数のCPUやコアで同時に処理すること?

そう。例えば、1人でやっていた作業を4人で分担すれば速くなりそうだよね。

うん。4倍速くなりそう。

でも実際には、すべての作業を4人で分担できるとは限らない。

1人でしかできない作業もあるってこと?

そう。分担できる作業は速くなるけど、分担できない作業はそのまま残る。だから、単純に4倍速くなるとは限らないんだ。

具体例で考えてみよう

次に数字で見てみよう。
例えば、ある処理全体のうち80%は高速化できるけど、残り20%は高速化できないとしよう。

80%も速くできるなら、かなり速くなりそう。

でも、どれだけ高速化しても、残り20%は必ず残るよね。

たしかに。

つまり理論上、全体の処理時間をゼロにはできない。高速化できない部分が、性能向上の上限を決めてしまうんだ。

速くできない部分がボトルネックになるんだね。

アムダールの法則の式

アムダールの法則は、次のような式で表されます。

性能向上率 = 1 ÷ { 高速化できない割合 + 高速化できる割合 ÷ 高速化倍率 }

例えば、

  • 高速化できる割合:80%
  • 高速化できない割合:20%
  • 高速化倍率:4倍

の場合、次のように考えます。

性能向上率 = 1 ÷ { 0.2 + 0.8 ÷ 4 }
          = 1 ÷ { 0.2 + 0.2 }
          = 1 ÷ 0.4
          = 2.5倍

80%を4倍速くしても、全体では2.5倍なんだ。

そう。部分的な高速化と、全体の高速化は同じではないんだ。

なぜ4倍にならないの?

80%を4倍速くしたら、もっと速くなりそうなのに。

高速化できない20%が残っているからだね。

つまり、その20%が足を引っ張るのか。

そう。全体の性能は、一番遅い部分や改善できない部分の影響を受けるんだ。

ボトルネックを見つけるのが大事なんだね。

アムダールの法則から分かること

アムダールの法則から分かる大事なポイントは、ただCPUを増やせばいいわけではないということだよ。

コア数を増やせば増やすほどその分早くなるモンだと思っていたよ。

もちろん速くなる場合もある。でも、処理の中に並列化できない部分が多いと、効果は限定的になる。

じゃあ、並列化できる処理を増やすことが重要なんだ。
みんなで分担してできる作業を増やすんだね。

そうそう。性能改善では、どこを高速化すれば全体に効くのかを考える必要があるんだ。

試験対策としてのポイント

情報処理技術者試験では、アムダールの法則は並列処理・性能向上・ボトルネックの文脈で出題されることがあります。

用語試験対策ポイント
アムダールの法則部分的な高速化による全体性能向上の限界を示す
並列処理複数のCPUやコアで同時に処理すること
ボトルネック全体性能を制限する遅い部分
高速化できない部分性能向上の上限を決める
性能向上率全体としてどれだけ速くなるか

試験では、部分的な高速化には限界がある、と覚えればいい?

そうだね。特に、並列化できない部分が残ると、コア数を増やしても性能向上には限界がある、という点を押さえよう。

アムダールの法則は必要?

それで結局このアムダールの法則ってやつはどういう時に使われるのさ。

そうだなぁ。例えばサーバーの性能が悪いとイライラするよね。でもお金があったとする。そんな時上層部が考えそうなことは?

そりゃ性能を良くしようとお金を出すよね。

お金がとーっても余っていたら?

なら、とーーーーーーってもいいCPUにしようとするよね。CPUを16倍にして、性能を16倍にしろとか言い出すんじゃないかな。

そういうときにエンジニアが上層部に説明するんだ。

我が社のサーバーの稼働状況を調べると、

CPU処理:20%
ディスク読み込み:80%

でした。つまり、CPUを増やしても早くなりません。

あぁ、別にアムダールの法則という言葉が印籠のように出てくるわけではないんだね。

そう、ボトルネックとなっているのはどこかを考えて、そこを改善しないと効果が出ないよっていう法則だね。

一番遅くなっているところを見つけないと、お金も時間も無駄になっちゃうもんね。

引越し業者になってアムダールの法則を活用

それじゃあちょっと引越し業者になってみようか。

何さ突然。

いいからいいから。
マンションの15階の部屋の荷物を運ぶとしよう。
どこがボトルネックだい?

流石に階段で運ばないからエレベーターだよね。

いいね。だから、荷物を運ぶ人を4人から32人に増やすと?

少なくともエレベーターは使えないね。

そうなんだよ。人数を増やしても全体は早くならないんだ。

じゃあボトルネックになっているエレベータを増やさないと速度は上がらないね。

そう、そんな感じ。ボトルネックを改善しないと効率は上がらないんだ。

まとめ

アムダールの法則とは、処理の一部を高速化しても、全体の性能向上には限界があることを示す法則です。

特に、並列処理では、並列化できない部分が残るため、CPUやコアを増やしても性能が比例して向上するとは限りません。

最後にポイントを整理します。

項目内容
用語アムダールの法則
意味部分的な高速化による全体性能向上の限界
関連分野並列処理、性能評価
重要ポイント高速化できない部分が全体性能を制限する
代表例CPUコア数を増やしても性能が比例しない
覚え方速くできない部分が残ると、全体の速さには限界がある

アムダールの法則は、一部だけ速くしても全体の速度には限界がある、という考え方なんだね。

アムダールの法則そのものはその理解でバッチリ。性能改善では、速くできる部分だけでなく、速くできない部分にも注目することが大切だよ。

ボトルネックになっている部分を見つけるんだね。

ABOUT ME
クマノくらげ
クマノくらげ
難しいIT用語やビジネス用語を、できるだけ身近な例えで解説するブログです。 「専門用語を見ると眠くなる人」でも読めるように、画像や会話形式を多めにしています。 AWS12冠達成済み。
記事URLをコピーしました