0 はじめに

 今回は,何かを効率化するときに「どこから手をつければよいのか」考える手がかりとなる「アムダールの法則」についての記事です。

1 アムダールの法則とは

 アムダールの法則(アムダールのほうそく、英語: Amdahl’s law)は、ある計算機システムとその対象とする計算についてのモデルにおいて、その計算機の並列度を上げた場合に、並列化できない部分の存在、特にその割合が「ボトルネック」となることを示した法則である。コンピュータ・アーキテクトジーン・アムダールが主張したものであり、アムダールの主張(アムダールのしゅちょう、英語: Amdahl’s argument)という呼称もある[1](wikipediaより。)

2 具体的にいうとどういうことなの?

 複数のプロセッサを使い並列計算によってプログラムの高速化を図る場合、そのプログラムの中で逐次的に実行しなければならない部分の時間によって、高速化が制限される。例えば、1プロセッサでは20時間かかる問題があり、そのプログラムの1時間かかる部分が並列処理できないとする。この場合、19時間ぶん(95%)は並列処理できるが、どれだけプロセッサを追加したとしても、最小実行時間は並列処理できない部分にかかる1時間(5%)より短くならない。(wikipediaより。)

 Wikipediaには,上のような記載がありますが,これだとちょっとわかりづらいですよね。そこで,少しちがったケースを検討してみましょう。

 全体で20時間かかる仕事があり,大まかに作業A(15時間かかる)と作業B(5時間かかる)とに分けられることとします。また,作業Bは作業Aが完了しない限りとりかかることができないものとします。
 この場合に,作業Aに最新の機械や暇な人をどんどん投入して作業効率を10倍にしたとします。すると,作業Aは1.5時間で完了することになりますが,作業Bの処理時間はかわらないので,仕事の完了にかかる時間は6.5時間となり,思ったほど改善しません。
 逆に,作業Bに最新の機械や暇な人をどんどん投入して作業効率が10倍にしたとします。すると,作業Bは0.5時間で完了することになりますが,今度は作業Aの処理時間がかわらないので,仕事の完了にかかる時間は15.5時間となり,あまり改善されません。

 このように,「全体の仕事の時間は効率化できない部分にかかる時間よりも短くならない」ので,「特に効率化できない部分の割合が大きいと,それがボトルネックになる」というのがアムダールの法則です。

3 アムダールの法則を踏まえた改善の順序

 このようなアムダールの法則を踏まえると,何かを効率化するときにどこから手をつければいいかについて,以下のような知見が得られます。

 割合の大きなもの(よくあるもの)からやれ!

 先ほどのケースだと,割合の大きい作業Aを効率化した方が全体の処理時間が短くなくなりましたよね?一部しか効率化しかできないのであれば,割合の大きい作業(場所)から手をつけていくのがもっとも効率的な改善につながります。

効率化の程度よりも割合の方が大事!

 また,上記の知見の裏返しになりますが,「○%改善!」のような効率化の程度よりも,その作業が仕事全体に占める割合の方が重要になります。仮に,先ほどのケースで作業Bの処理時間を10000倍にできたとしても,割合の大きいAの作業を効率化できない限り,仕事の完了までにかかる時間は15時間をきることができません。
 とにかく「全体に占める割合の大きなものから効率化していくのが大事」ということですね。