From: Marco Costalba Date: Sun, 4 Nov 2012 09:21:40 +0000 (+0100) Subject: Skip evaluate() call after a null move X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=37e9802411fa122eb140ada2edfc9df3be55dbb8;hp=a87831230d72b8f849acdef011cee8c835bcf9db Skip evaluate() call after a null move Reuse the evaluation of the parent with inverted sign and set margin to zero (this is an hack!). This is done only in qsearch where almost 15% of calls are from a null move. In normal search the number of nodes where (ss-1)->currentMove == MOVE_NULL is almost zero and so there is no need of using this trick. The big advantage of this patch is a speed-up due to skipped evaluate() calls, that are very costly. Functionality is of course affected and we will need to proper test it later. For now we just register a 3-4% speed up. Suggested by Hongzhi Cheng. bench: 5051328 --- diff --git a/src/search.cpp b/src/search.cpp index 253311ae..075aa9b4 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1154,6 +1154,11 @@ split_point_start: // At split points actual search starts from here if (ss->staticEval == VALUE_NONE || ss->evalMargin == VALUE_NONE) // Due to a race ss->staticEval = bestValue = evaluate(pos, ss->evalMargin); } + else if ((ss-1)->currentMove == MOVE_NULL) + { + ss->staticEval = bestValue = -(ss-1)->staticEval; + ss->evalMargin = VALUE_ZERO; // Hack, we really don't know the value + } else ss->staticEval = bestValue = evaluate(pos, ss->evalMargin);