JavaScriptでライフゲームを高速化

ライフゲーム(軽量版)

以前書いたライフゲームは、DSi上のブラウザでも一応動いた。
しかし、非常に動作が遅かったため、今回は高速化を主眼にコーディングした。

複数のビットフィールドを持つ数値の並列演算というのが役に立った。
以前見たときには、(勉強する価値はあるが)自分が使うことはないと思っていたのだが、
まさかJavaScriptで使うことになるとは。
自分で使ったのは飽和(のアイデア)と比較で、ソースの69〜74行目。

多少複雑な処理になるが、一度に10個のセルについて計算できるため、圧倒的に速くなる。
最初は1セルに4bitを割り当てるつもりだったが、JavaScriptの整数演算は符号付き32bitで、
最上位ビットを含めた符号無し加算ができないので困った。
回避策はあるが、どうせきれいに書けないならと、1セル3bitにした。

32bitもの繰り上がりをこなす加算器のありがたさを少し感じることができた。
MMX(今風ならSSE2)は、そういう意味では規定サイズ以外の処理がしづらい。
意外と64bitマシンで力を発揮する手法かもしれない。