プログラミングメモ - 遺伝的アルゴリズムと SSE2 周りのメモ

2009/03/25

最近 GA はまじめにやってないんだけれども,モジュール作っちゃったから少し改良できないもんかとつらつら。とりあえず,x86 の拡張命令を使えば,ある程度は速くなるんでねいかっつことで,調べてます。……と,ゴニョゴニョやってたら,Intel のアプリケーションノートがあったのでメモ(参照:ストリーミングSIMD 拡張命令2(SSE2)を使用した遺伝的2 進アルゴリズムの一点交叉演算 バージョン2.0 [PDF])。

結果を見たところ,SSE2 DVEC の実装では,5.0 倍以上速くなっている。これはすごい。あたしがやってた GA のプログラムは探索空間がバカでかかったもんで,解を得るまでに平均して20秒近くかかっていました。SSE2 を使えば,単純に計算しても4秒弱で終わる計算になる。同じパソコンなのにねぇ……。

アプリケーションノートにもある通り,SSE2 は拡張命令用の特別なレジスタ(XMM: 128 bit)を使って,複数のデータをいっぺんに処理することができます。コード例では,16 bit の遺伝子を使って,いっぺんに8本の遺伝子を演算している。例ではなぜか遺伝子の数を8の倍数に制限していないんですけれど,これは8の倍数にすべきなんだろうな……。それにしても,ここまで効果があるもんなのか。TBB で並列化すれば,さらにパフォーマンスが期待できそうな感じがします。

せっかく ICC 持ってるし,ちとやってみるかな。

Site Navigation
SNS Accounts (@aian)

普段はここら辺に住んでいます.