マルチコアへの流れは本当にあるのか?

実践 F# に以下のような記述がありました。いい機会なのでちょっと自分の考えを述べておきます。あ、書評とはある程度切り離して考えてください。きっかけは実践 F# ですが、常々思っていたことなので。実践 F# についてはこちらを参考にしてください。

今までは、一部のスーパーコンピュータと呼ばれるものを除いて、並列コンピューティングというのは一般的ではありませんでした。むしろ、1 台のコンピュータを効率よく複数の仕事で使うための技術 (マルチタスク) が進歩してきました。ところが、ここ数年のパーソナル・コンピュータは、複数の CPU コアを搭載しているのが当たり前になってきました。

実践 F# 関数型プログラミング入門 - はてなキーワード

この、「一般のパーソナルコンピュータでも並列コンピューティングが一般的になった」というような意見は、他の本や Web ページなどでもよく見かけます。その理由としてあげられることが多いのが、「マルチコア CPU が普及し、これからどんどんコア数が増えていく」というものです。でも、これって本当なんでしょうか?
確かにイマドキの普通の PC でシングルコアなんてほとんどないでしょう。ですが、だからと言ってコア数が順調に増えているでしょうか?
一般的な PC 向けのデュアルコア CPU は、2005 年に登場した Pentium D もしくは、同年に登場した Athlon64 X2 だと思います。
デュアルコア CPU が誕生してからもう 5 年以上経ったにもかかわらず、ミドルレンジモデル*1の PC はいまだにデュアルコア CPU ばかりを積んでいます。
これは CPU メーカーがさぼっていたのでしょうか?いやいや、そんなことはありません。
昔のデュアルコア CPU と、イマドキのデュアルコア CPU を比べてみましょう。

【プロセッサ】  5.5

AMD Athlon64 X2 4800+ の Windows7 エクスペリエンスインデックス スコア抜粋
プロセッサ: 1 秒当たりの計算 6.2
Intel Core i3-330M の Windows7 エクスペリエンスインデックス スコア抜粋

Athlon64 X2 4800+ (2.4GHz) といえば、AMD 製の PC 向けデュアルコア CPU 登場時のハイエンドモデルで、登場当時にこいつを搭載したメーカー製 PC は記憶にありません。
対する Core i3-330M (2.13GHz) は、ノート PC 向けのデュアルコア CPU で、現在のエントリ PC 以下の PC によく搭載されています。
当時を知る人にとっては結構ショックな結果ですよね・・・*2
ちなみに、2008 年 12 月ごろに買った Intel Core2 Duo P8400 (2.26GHz) だと、プロセッサのスコアは 5.9 となります。Core i-3 すげぇ・・・


このように、イマドキのデュアルコア CPU は「昔のデュアルコア CPU よりも同一クロックあたりの性能が高い」のです。
これは、CPU メーカーがいまだに単一コア性能を重視していることを表しているといっていいでしょう。
さらに言うと、Core i3-330M はかなりローエンド向けの CPU ですが、ミドルレンジ PC 向けのデュアルコア CPU はクロック周波数も 3GHz レベルのものも多くなっています。
つまり何が言いたいかというと、「コア数に関係ない部分で性能が向上している」ということです。


では、「なぜミドルレンジではコア数がそんなに増えていないのだろう」ということを考えてみましょう。
これは、本書中でも紹介されている「アムダールの法則」が原因だと推察することができます。
つまり、「一般的な用途のプログラムには並列化できるような処理の占める割合が少ないのではないか?」ということです。
もしくは、単純に「一般的な用途のプログラムでは、シングルスレッド性能を向上させた方が、マルチコア化するよりも性能向上するのではないか?」と言い換えることもできます。
つまり、「ミドルレンジでは今現時点で重要なのはまだシングルスレッド性能で、コアは 2 個あれば十分」と考えることができます。


とはいうものの、この話はあくまで現在のミドルレンジの話です。ハイエンドはもちろん事情が異なります。
それに、今後一般的な用途のプログラムでも並列化可能な処理が増えていくかもしれませんし、それよりも先に本当にシングルスレッド性能の向上に行き詰まり、メニーコア化するしかなくなるような状況になるかもしれませんよね。
いやまぁ個人的にはここらへんも結構懐疑的で、そもそも一般向けの CPU としては性能ってこれ以上追及する意味があんまりないような気がしてます。なので、今後は同一性能でより低消費電力・低発熱な CPU (を搭載した PC) が売れていくんじゃないかなぁ、なんて思ったりもしてますが。


それと、並列プログラミング重要じゃない、と言っているわけではないのでその辺は勘違いしないでください。
今やミドルレンジと言えど、デュアルコア CPU が当たり前の時代なのです。なので、一般向けのプログラムであろうと並列プログラミングしなくていい理由にはなりません。並列化できる処理の割合が大きいのであれば並列化することは重要でしょうし、デュアルコアであるかどうかにかかわらず応答性の改善が重要なことも多々あります。などなど。

*1:ハイエンドとローエンドの中間。つまり普通

*2:Pen D?もっとひどい。登場当時のハイエンドモデルである Pen D 840 (3.2GHz) のスコアが欲しかったけど、見つからなかったので 940 (3.2 GHz) のスコアを見てみると、http://hibari.2ch.net/test/read.cgi/jisaku/1287301985/ "PenDの945と940では4.9だった" だそうです