daruma3940の日記

理解や文章に間違い等あればどんなことでもご指摘お願いします

バグ修正なのじぇ

f:id:daruma3940:20160520223745p:plain

すごいバグを見つけたのじぇ。

今までずっとValue形は16bitだったのだけれどそれを32bitに変更するだけで初期局面の反復進化が2深くなったのじぇ。

int16_tをintにしただけwww修正にして4文字なのじぇww

f:id:daruma3940:20160521003616p:plain

なんで16bitから32bitに変えるだけでそんなに変わるの??

f:id:daruma3940:20160520223745p:plain

ビットオーバーフローが原因だと考えているのじぇ。

bitオーバーフローが起こって探索に用いるstatsが壊れていたり、詰みに近い評価値の時にmin(a+b,c)がおかしな値になってしまったりしていたようなのじぇ。

いやー置換表に格納する評価値は16bitなのでValueも16bitで用意しようと思ったのだけれど意外なところに盲点があったものなのじぇ~~

f:id:daruma3940:20160520223530p:plain

置換表ってなんなの?

f:id:daruma3940:20160709192554j:plain

置換表は一度訪れた局面をもう一度探索するのを防ぐために用意するテーブルのようなものだよっ!反復進化やアスピレーションサーチ(探索の範囲を前回の探索の値を中心にだんだん広げながら探索する方法)にとって必須の要素だねっ!

キャッシュに置換表要素を整列させる(置換表がキャッシュラインにまたがってしまうと遅くなるらしいので置換表のサイズはキャッシュラインのサイズで割ることのできるサイズでなければならない)ための関係で、置換表に格納する評価値を16bitにするつもりだったのでValueを16bitにしたみたいだねっ!

f:id:daruma3940:20160520223745p:plain

その通りなのじぇ。いやー神は細部に宿るとはよく言ったものなのじぇ....