Entry

プログラミングメモ - 遺伝的アルゴリズムと 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 持ってるし,ちとやってみるかな。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN