マンデルブロ集合描くの速くなったなあ

自分が最初に、マンデルブロ集合を描くプログラムを作ったときは、Pentium IIマシンでVisual Basicを使っていたので、遅かった。300x300とかの小さいやつでも1分近くかかる(当時は小さいと思わなかったけど)。

それから数年経って、Visual C++を少し使えるようになった。開発言語が変わっただけで10倍以上速くなったと思う。CPUも少し速くなっている。

更に数年後、Pentium Mを使うようになって3倍ほど速くなった。インラインアセンブラが使えるようになって、手動最適化で少し速くなり、更にSSE2で1.5倍の高速化。

そして数日前、また久しぶりに作ってみた。さすがにマンデルブロ集合熱も冷めていたのだが、実際見てみると思っていたより感動的だ。CPUは2倍以上速くなっているし、マルチスレッド化でも2倍弱、きっちり速くなる。更に、SSE4.1ともう少しの最適化で1割くらい速くなった。

64bitでのレジスタ増加、AVX、FMA、2倍のコア数とHTがあれば、あと4倍の高速化はカタいよね。マンデルブロ集合のプログラムを書くと、速さが正義であることを実感する。

これだけ速くなると、どんどん拡大できてしまうため、倍精度でも少し物足りない感じがする。いよいよ、速さを多倍長演算に振り向ける領域に入るのか(これは相当遅くなるだろうなあ)。高画質化という方向もある。色が連続的に変わるようにするとか、大きい画像を縮小して表示するとか。

昔は、単精度で1日かけて16色(?)の絵を作っていたらしい。1980年代の日経サイエンスで見た。グラデーションなしでも、2色を交互に配することできれいに描ける。