Aperyのdebug無しビルドでbenchが通らない その2 [コンピュータ将棋]
前のエントリの続き
・Position::isOKで文句が出るのはKingが消える
というところからたどっていったところ以下のようになった
・そもそもKingが取られていた
前のやつにログを追記しておいたが、片方のKingが消えているのがisOKで問題有りとされる理由だった
そしてKingが消えたのは相手の効きのある場所に突っ込んでいっていた
・なぜ突っ込んでいくか
benchコマンドではスレッド数1なのでSplitなど並列関係の不具合ではない
最適化オプションを全部はずしたので最適化も関係ない
>問題のある手を無効化できていないはず
・inCheck
探索の中で王手がかかっている場合はinCheck状態になっている
そこから移動するときはEvasionの指し手生成が行われる
指し手生成では非合法手も生成されているので、その手がちゃんとした手かチェックしてダメな場合はその手は破棄する
ここで、問題の手が破棄されていなかったのを発見した
・合法手の判定
Kingのときだけ特殊処理が入っていて、相手の駒の効きが働いていないときだけ移動できる
(Kingではない場合は、一応捨てる手もありうるので合法手)
このときに効きがあるかどうかをビットボードで判定している
・問題点
ビットボードの中身を確認すると、本来立っていないといけないはずのビットが立っていなかった
・ビットを立てるタイミング
幾つかのテーブルはコンパイル時に決定されているはずだが、その値が0であることがわかった。
このため、銀、歩などの正面の効きが無くなっていた。
念のためUbuntuとかVisutal Studioのclangでも確認してみたが、ちゃんと値が入っていたので、mingwコンパイラのバグの可能性が高い。
テンプレートで定数を作る時の何かが起きてると思うのだが、テストコード書いてみたけど特に問題ないようでさっぱりわからなかった。
というわけでどうにもならなさそうなのでAperyいじりはしばらくお休み。
・Position::isOKで文句が出るのはKingが消える
というところからたどっていったところ以下のようになった
・そもそもKingが取られていた
前のやつにログを追記しておいたが、片方のKingが消えているのがisOKで問題有りとされる理由だった
そしてKingが消えたのは相手の効きのある場所に突っ込んでいっていた
・なぜ突っ込んでいくか
benchコマンドではスレッド数1なのでSplitなど並列関係の不具合ではない
最適化オプションを全部はずしたので最適化も関係ない
>問題のある手を無効化できていないはず
・inCheck
探索の中で王手がかかっている場合はinCheck状態になっている
そこから移動するときはEvasionの指し手生成が行われる
指し手生成では非合法手も生成されているので、その手がちゃんとした手かチェックしてダメな場合はその手は破棄する
ここで、問題の手が破棄されていなかったのを発見した
・合法手の判定
Kingのときだけ特殊処理が入っていて、相手の駒の効きが働いていないときだけ移動できる
(Kingではない場合は、一応捨てる手もありうるので合法手)
このときに効きがあるかどうかをビットボードで判定している
・問題点
ビットボードの中身を確認すると、本来立っていないといけないはずのビットが立っていなかった
・ビットを立てるタイミング
幾つかのテーブルはコンパイル時に決定されているはずだが、その値が0であることがわかった。
(gdb) p PawnAttack $3 = {{{p_ = {0, 0}}}, {{p_ = {0, 0}} }} (gdb) p InFrontMask $4 = {{{p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}}, {{ p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}, {p_ = {0, 0}}}}
このため、銀、歩などの正面の効きが無くなっていた。
念のためUbuntuとかVisutal Studioのclangでも確認してみたが、ちゃんと値が入っていたので、mingwコンパイラのバグの可能性が高い。
テンプレートで定数を作る時の何かが起きてると思うのだが、テストコード書いてみたけど特に問題ないようでさっぱりわからなかった。
というわけでどうにもならなさそうなのでAperyいじりはしばらくお休み。
コメント 0