リバーシ(終盤読み) その3


前回に引き続きリバーシの終盤読み。前回時点で約280秒→約94秒と改善しましたが、継続して改善してみます。

ビット数カウント、NTZカウントの組み込み関数化

盤面をビットボードで実装している関係でビット数カウント、NTZ (下位ビットから続く0の数)を数える、ということが必要になってくるのですが、これを組み込み関数化することで速度改善を図ります。

もともとのビット数カウント、NTZはこちら。

これを以下に変更。(このタイミングで関数名とか変えていたり、ヘッダ側に移動していたりするのでそのまま入れ替えできないですが)

あとは組み込み関数が使えるようにCMake側で「add_compile_options(-march=native)」を追加。

関数のテンプレート化

頻繁に呼び出している反転用のビットパターンの取得用の関数をテンプレート化することで速度改善を図りました。

元々はこちら。

それをこういう形に。当然呼び出し側もそれに合わせて変えてます。

この時点での処理速度等…

この時点での処理速度等ですが、以下です。

score internal leaf total time(sec) knps
この記事の対応前 38 299,002,385 113,304,014 412,306,399 93.848 4,393.34
この記事の対応後 38 299,002,385 113,304,014 412,306,399 52.535 7,848.22

ようやく1分切ってきました。

スポンサーリンク

フォローする

スポンサーリンク