SSEを用いたbsr/bsf命令の実現に向けて その1

今回からはbsr/bsf命令をSSEでどうするのか?という問題について考えていきます。


というのも、SSEの命令だけで完結しないとむしろ(SSEを使わないときより)遅くなるからです。
SSE命令だけで完結することはすこぶる大事です。


ただ、コンピューター将棋の場合は、bsr/bsfまでがSSE命令だけで行えても、そのあとが、(そのSSEで得られた演算結果と)汎用レジスタとの演算が必要になることが多く、なかなか難しいものがあります。xmmレジスタを直接メモリアドレッシングに使うことは出来ないので(?)、xmmレジスタに結果が代入できても、その結果を用いてテーブル参照をすることも出来ないわけでして、要するにそういう処理には向いていないということが言えそうです。


しかし、そのことと、bsr/bsfがSSE命令で出来るかどうかとはまた別の問題ですので、まずはbsr/bsfに相当する処理をSSEで行なえるかどうかについて書いていきます。将来的にSSE命令が拡張されて使いやすくなるかも知れませんし、これから書く手法が別の形で応用できるかも知れませんし。

このFirstOneにあたるのがSSEでうまい命令がないんですよね。そこで挫折したためできてません。Intelさんにはぜひxmmに対するbsr/bsf命令の実装を望みたいところです。


ボナッセ・コーポレーション(A級リーグ指し手1号)
http://aleag.cocolog-nifty.com/blog/2010/03/post-77d0.html


上の記事を見て知ったのですが、Bonanza 6.0のbitop.hはどうやらA級さんの功績のようです。私は2010年は別件でずっと白目を剥いているような状態でしたのでコンピューター将棋から離れており、あまり他の人のブログを読んでおりませんでした。


それでSSEを使ってbsr/bsf相当のことが出来るのかと言いますと、確かにそういう命令は存在しません。
ですが、bsr/bsf相当のことは出来ます。


つづく