アムダールの法則と並列化の速度向上

プログラムのうち並列化できる部分の割合と、使うプロセッサ(コア)の数を入れると、全体がどれだけ速くなるかをアムダールの法則で計算します。問題の大きさを固定したときの限界と、プロセッサの数に合わせて問題を大きくするグスタフソンの法則の見方を、対数目盛のグラフで並べて比べられます。

条件

結果

速度向上率(アムダールの法則)
–
並列効率
–
速度向上の上限 1/(1−p)
–
スケールド速度向上(グスタフソンの法則)
–

細い破線は理想的な速度向上(N倍)、青い線はアムダールの法則、緑の線はグスタフソンの法則です。両軸とも対数目盛です。通信や同期、負荷の偏りによるオーバーヘッドは含めていないため、実際の速度向上はこれより小さくなるのが普通です。

アムダールの法則の式

1台のプロセッサでの実行時間を1とし、そのうち並列化できる部分の割合をpとします。プロセッサをN台使うと並列部分の時間は p/N に縮みますが、並列化できない逐次部分 (1 − p) はそのまま残ります。そのため速度向上率は S = 1/((1 − p) + p/N) です。Nをいくら大きくしても逐次部分は消えないので、上限は 1/(1 − p) になります。既定値の p = 95%、N = 16 では S ≈ 9.14倍で、上限は20倍です。わずか5%の逐次部分が、到達できる速さを決めてしまいます。

並列効率とグラフの読み方

並列効率は E = S/N で、プロセッサ1台あたりがどれだけ有効に働いているかを表します。既定値では 9.14 ÷ 16 ≈ 57.1% で、プロセッサの能力の4割以上は実質的に遊んでいることになります。グラフでは、Nが小さいうちは青い線が破線(理想のN倍)に沿っていますが、やがて離れて、上限に向かって水平になります。p = 95% のまま N = 64 にすると S ≈ 15.4倍で、効率は約24%まで下がります。効率が急に落ち始めるあたりが、コストに見合うプロセッサ数の目安です。

グスタフソンの法則との違い

アムダールの法則は、問題の大きさを固定してプロセッサを増やす「強いスケーリング」を考えます。これに対してグスタフソンの法則は、プロセッサを増やしたぶん問題を大きくして同じ時間で解く「弱いスケーリング」を考え、S = (1 − p) + p·N となります。シミュレーションの格子を細かくするように、問題を大きくすると並列部分だけが増えるため、ほぼNに比例した効果が得られます。ただし、この式のpはN台で実行したときの時間に占める割合で、アムダールの法則のpとは定義が違う点に注意してください。

実際の設計での使い方

実際のプログラムでは、スレッドの起動、データの通信、ロックやバリア同期の待ち、負荷の偏りなどが加わるため、速度向上はアムダールの法則の値よりさらに小さくなります。コアを増やすより先に逐次部分を減らすほうが効くことも多く、プロファイラで時間のかかる部分を確かめてから並列化するのが基本です。GPUでも、ホストとの間のデータ転送やカーネルの起動が逐次部分として効いてきます。チップ設計で少数の高性能なコアと多数の小さなコアを組み合わせるのも、逐次部分と並列部分の両方を速くするためです。

性能評価の問題を解く

処理全体の50%を占める部分を4倍速くした。全体の速度向上率はいくらか(アムダールの法則)。

  1. A2倍
  2. B1.6倍
  3. C4倍
答えと解説を見る

正解:B. 1.6倍

改善後の時間は、速くしない残りの50%(0.5)と、4倍速くした50%(0.5÷4=0.125)の合計で0.625になります。速度向上率は1÷0.625=1.6倍です。速くした部分をどれだけ速くしても、残りの50%はそのまま残るので、全体は最大でも2倍にしかなりません。全体を大きく速くするには、時間を多く占める部分を見つけて改善する必要があります。

アムダールの法則から得られる、性能の改善の進め方についての教訓として最も適切なものはどれか。

  1. A時間を多く使っている部分(よくある場合)を速くすることを優先する
  2. Bめったに実行されない部分から先に速くする
  3. Cどの部分を速くしても、全体への効果は同じである
答えと解説を見る

正解:A. 時間を多く使っている部分(よくある場合)を速くすることを優先する

全体の1%しか使っていない部分を無限に速くしても、全体は約1%しか速くなりません。一方、80%を使っている部分を2倍速くすれば、全体は約1.7倍になります。そのため、まずプロファイラなどで時間を多く使っている部分を見つけ、そこから改善するのが基本です。「よくある場合を速くせよ」は、コンピュータの設計でも繰り返し使われる原則です。

グスタフソンの法則が示す考え方として正しいものはどれか。

  1. Aプロセッサの数を増やすとき、扱う問題の大きさも増やせば、並列にできる部分の割合が増え、大きな速度向上が得られる
  2. Bプロセッサの数をいくら増やしても、速度向上は必ず2倍が上限になる
  3. C並列にできる部分は、問題の大きさに関係なく常に一定である
答えと解説を見る

正解:A. プロセッサの数を増やすとき、扱う問題の大きさも増やせば、並列にできる部分の割合が増え、大きな速度向上が得られる

アムダールの法則は、問題の大きさを変えずにプロセッサを増やす場合を考えるので、並列にできない部分が速度向上の上限を決めます。グスタフソンの法則は、プロセッサを増やしたら、同じ時間でより大きな問題を解くと考えます。シミュレーションの格子を細かくするなど、問題を大きくすると並列の部分が増え、逐次の部分の割合が小さくなるので、プロセッサの数にほぼ比例した効果が得られます。

8コアで並列に実行したところ、1コアのときより6倍速くなった。並列効率はいくらか。

  1. A75%
  2. B133%
  3. C48%
答えと解説を見る

正解:A. 75%

並列効率は、速度向上率をコアの数で割った値で、コアがどれだけ有効に使われているかを表します。6÷8=75%なので、理想(8倍)に対して4分の3の効果が得られています。残りの25%は、同期の待ち、仕事の偏り、通信、メモリ帯域の取り合いなどで失われています。コアを増やすほど並列効率は下がりがちなので、効率がどこまで保てるかを見て、使うコアの数を決めます。

よくある質問

90%を並列化できるプログラムは、最大で何倍速くなりますか?

アムダールの法則では、上限は 1/(1 − 0.9) = 10倍です。プロセッサを16台使っても 1/(0.1 + 0.9/16) = 6.4倍にとどまり、並列効率は40%です。残りの10%の逐次部分を減らさない限り、10倍を超えることはありません。

アムダールの法則とグスタフソンの法則は矛盾していませんか?

矛盾していません。アムダールの法則は問題の大きさを固定した強いスケーリング、グスタフソンの法則は問題をプロセッサの数に合わせて大きくする弱いスケーリングを扱っており、前提が違います。同じ問題を速く解きたいのか、同じ時間でより大きな問題を解きたいのかで、使う見方を選びます。

並列効率が100%を超えることはありますか?

あります。プロセッサを増やすと1台あたりのデータが減ってキャッシュに収まるようになり、メモリアクセスが速くなる場合などに、超線形(スーパーリニア)な速度向上が見られます。アムダールの法則は、こうした効果を含まないモデルです。

関連する用語

アムダールの法則 グスタフソンの法則 速度向上率 並列効率 強いスケーリング 弱いスケーリング

半導体の計算ツール

ダイ数・歩留まり計算ツールウエハ径・チップサイズ・欠陥密度から、ダイ数・歩留まり・良品1個のコストを計算露光の解像度・焦点深度の計算波長・NA・k1から、解像できる線幅と焦点深度、必要なパターン分割の回数を計算セットアップ・ホールドのタイミング計算クロック周期と遅延から、セットアップ・ホールドの余裕(スラック)と最大周波数を計算MOSFETの電流-電圧特性(ID–VDS)しきい値電圧やW/Lを変えて、ID–VDS特性と動作点(領域・ID・gm・ro)を確かめる問題セットを作る分野と問題数を選ぶだけで、授業や研修で配れるクイズのURLを発行接合温度(Tj)と熱抵抗の計算消費電力と熱抵抗から、チップの接合温度、最大接合温度までの余裕、使える最大電力を計算メモリ帯域幅の計算転送レートとバス幅から、DDR・LPDDR・GDDR・HBMのピーク帯域と実効帯域の目安を計算ADコンバータのSN比と有効ビット数(ENOB)分解能、クロックジッタ、オーバーサンプリングから、ADコンバータのSN比と有効ビット数を計算キャッシュのアドレス分割と平均メモリアクセス時間容量・ラインサイズ・連想度から、タグ・インデックス・オフセットのビット数と平均メモリアクセス時間を計算CMOS回路の消費電力(動的電力と静的電力)活動率・容量・電圧・周波数とリーク電流から、動的電力と静的電力、DVFSで電圧と周波数を下げたときの電力を計算PN接合の内蔵電位と空乏層幅不純物濃度と逆バイアス電圧から、PN接合の内蔵電位、空乏層幅、最大電界、接合容量を計算熱酸化の膜厚(Deal-Groveモデル)温度・時間・ドライ/ウェット・面方位から、Deal-Groveモデルでシリコン酸化膜の厚さと消費されるシリコンを計算LSIの配線のRC遅延配線の金属・幅・厚さ・間隔・比誘電率・長さから、配線の抵抗と容量、分布RC線路の遅延とドライバを含めた遅延を計算位相雑音からRMSジッタへの換算位相雑音のプロファイル(dBc/Hz)を積分して、クロックのRMS位相誤差とRMSジッタを計算PDNの目標インピーダンスとデカップリングコンデンサ電源電圧・許容リップル・電流の変化から目標インピーダンスを求め、デカップリングコンデンサの自己共振周波数と効く周波数範囲を計算