ネタ元 →
性能向上は難しい──アムダールの法則 アムダールの法則(Amdahl's Law):
性能向上 P = 1/(F+(1-F)/N)
F : 並列化できない部分の割合
N : コア数
なぜにこんな式が導き出せるかっちゅーとですね。
処理全体が10個のブロックでできてるとしましょう。
どのブロックも処理時間は同じってことで、
全体の処理時間は↓こんだけ。
□□□□□□□□□□
このうちF(たとえば4割)が並列化できない黒ブロックとすると
■■■■□□□□□□
ですね。全体が1なら■の割合がF, □の割合が(1-F)です。
んでもって□の部分(1-F)をN個のコアで分担します。N=2 なら
■■■■□□□
□□□
短くなった分早く終わる、つまり性能向上と。
この長さは ■部の長さ + □部の長さ = F + (1-F)/N
性能は処理時間の逆数だから
P = 1/(F+(1-F)/N)
っちゅーわけっす。
Core2Duo/Quadとかi7とかPhenomとか、マルチコアCPUがアッタリマエになっちゃいました。
CPUクロックが頭打ちになっちまっただから数で稼ごうってわけすね。
水圧上げるのがキツくなればパイプ太くして水量増やすってゆー、わかりやすぅい♪
マルチコアでどんだけ性能上がるんや? の目安に「アムダールの法則」ちうのがあります。
アムダールの法則(Amdahl's Law):
性能向上 P = 1/(F+(1-F)/N)
F : 並列化できない部分の割合
N : コア数
式を変形すると: P = N/((N-1)F+1) となります。
・F=0つまりアタマからケツまで並列化できれば P = N となり、
コアの数だけ速くなる。そらそーだ。
・F=1つまり並列化できる部分がまったくなければ P = 1となり、
コアをいくら積もうが無駄無駄ムダァ! と。
さらに上式をFについて解くと: F = (N-P)/((N-1)P) となります。
・dual-core: N =2 とおくと F = (2-P)/P
スピード5割増を狙うなら F = (2-1.5)/1.5 = 1/3
全体の7割以上が並列化されないと5割増は期待できんてことになります。
・quad-core:N=4ならば F = (4-P)/3P
同じく5割増なら F = (4-1.5)/4.5 = 5/9。
半分くらいは並列化できにゃならんですな。
んなわけで、並列化できない部分が多いといっくらコア積んでも
効果薄いてゆーアッタリマエの結果が導かれるわけっす。
性能阻害要因は"並列化できない部分"だけでなく、
メモリアクセス、コア間通信、粒度(スレッドのオーバヘッド)、負荷のバラツキ
なんかがあって、実際のパフォーマンスはさらに悪くなりますです。
※ 4月わんくま東京勉強会「数学Day」の伏線か?