Use Movepick SEE value in search
authorMarco Costalba <mcostalba@gmail.com>
Fri, 9 Sep 2016 06:38:44 +0000 (08:38 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 9 Sep 2016 15:11:54 +0000 (17:11 +0200)
This halves the calls to the costly pos.see_sign(),
speed up is about 1-1.3%

Non functional change.

src/movepick.cpp
src/movepick.h
src/search.cpp

index 78765be..4971b30 100644 (file)
@@ -243,6 +243,11 @@ void MovePicker::generate_next_stage() {
   }
 }
 
+int MovePicker::see_sign() const
+{
+  return  stage == GOOD_CAPTURES ?  1
+        : stage == BAD_CAPTURES  ? -1 : 0;
+}
 
 /// next_move() is the most important method of the MovePicker class. It returns
 /// a new pseudo legal move every time it is called, until there are no more moves
index 8028d48..e69255e 100644 (file)
@@ -104,6 +104,7 @@ public:
   MovePicker(const Position&, Move, Depth, Search::Stack*);
 
   Move next_move();
+  int see_sign() const;
 
 private:
   template<GenType> void score();
index 6182d9c..1d930dd 100644 (file)
@@ -958,7 +958,8 @@ moves_loop: // When in check search starts from here
               }
           }
           else if (   depth < 3 * ONE_PLY
-                   && pos.see_sign(move) < VALUE_ZERO)
+                   && (     mp.see_sign() < 0
+                       || (!mp.see_sign() && pos.see_sign(move) < VALUE_ZERO)))
               continue;
       }