Micro-optimize perft
authorMarco Costalba <mcostalba@gmail.com>
Fri, 21 Jun 2013 07:10:03 +0000 (09:10 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 21 Jun 2013 07:10:03 +0000 (09:10 +0200)
Avoid to call perft function when we just need to count
moves, at leaf nodes.

Speed up of almost 2%

No functional change.

src/search.cpp

index de6c2542d27805a25069290134107ba91583b282..f4f411c56d18f266f110d69ba5d4aa0b8c9707ad 100644 (file)
@@ -155,21 +155,17 @@ void Search::init() {
 
 size_t Search::perft(Position& pos, Depth depth) {
 
-  // At the last ply just return the number of legal moves (leaf nodes)
-  if (depth == ONE_PLY)
-      return MoveList<LEGAL>(pos).size();
-
   StateInfo st;
   size_t cnt = 0;
   CheckInfo ci(pos);
+  const bool leaf = depth == 2 * ONE_PLY;
 
   for (MoveList<LEGAL> it(pos); *it; ++it)
   {
       pos.do_move(*it, st, ci, pos.move_gives_check(*it, ci));
-      cnt += perft(pos, depth - ONE_PLY);
+      cnt += leaf ? MoveList<LEGAL>(pos).size() : perft(pos, depth - ONE_PLY);
       pos.undo_move(*it);
   }
-
   return cnt;
 }