TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

ビットボードの高速化

ここの記事に、_BitScanForward64を使う場合、ヒットしたビットを0にするのに、

n &= n - 1;

とするとよいと書かれていたので試してみた。

現在、ビットを0にするのに、

_bittestandreset64(&n, i);

を使用している。

記事では、下記のように1をシフトして演算した場合との比較なので、_bittestandreset64を使う場合は差はないと予測した。

n ^= 1 << i;


測定結果、わずかながら高速化する箇所があった。

19路、10000プレイアウトの1手目で、平均1219msから1188msになった。
約2.6%の高速化である。

何か所か_bittestandreset64を使っている箇所があったので、それぞれの場所で試してみたが、箇所によっては効果がないか逆に遅くなる箇所があった。

_bittestandreset64を使う場合は、それほど気にする必要はないようだ。