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」の伏線か?