従来の並列化と最近/これからの並列化の違い

一昔前の CPU の進化とはシングルスレッド性能を伸ばすことでした。
ソフト屋はこの進化にただ乗りし、ソフトをいったん作ればあとは何もしなくても、新しいハードでは速くなる、時間が経ってハードを買い換えてくれれば速くなるというおいしい状況でした。

Windows XP は発売当時、見た目だけハデにした重い OS と言われたのに、今では軽い OS として評価が高いのはハードの進化のおかげです。ハード進化の一翼が CPU のシングルスレッド性能の伸びでした。MS が Vista 発売にあわせて XP を軽くなるよう改良したわけではありません。

これをソフト屋がおいしい思いをしている、ただ飯を食ってるってことで、フリーランチと言います。


ところが今では CPU は進化の方向を変え、シングルスレッド性能の伸びはゆるやかになり、その代わりコア数が増えていく方向になりました。
これまでのようなソフトを書いていたのでは、ほっといても速くなりません。フリーランチに預かるには、コア数にあわせて速くなるようにプログラムを書く必要があります。


つまり、処理の並列化が必要で、それもこれまでのような一定数のスレッドを使うのではなく、コア数に応じて性能が伸びる仕組みが必要です。そうしなければ、ソフトは新しいハードでも速くならず、競争力がないソフトになってしまいます。数年後に軽いソフトとして評価が上がるということもないわけです。
可能な限りの処理を並列化してしまおうという方向です。
さらに最近は、並列にできない部分が処理のネックという意見も出てきました。そんなこと言われても困ってしまいますが…。


で、ソフト屋が並列に乗っかるにはどうすればいいかという模索が始まり、それが関数型言語だったり、TPL/PLINQ のようなライブラリだったりするというわけです。


いくつか聞いた話をあわせるとこんなところでしょうか。
たまにはこんなことを書いておくのもいいかなと思って書いてみました。