From 37e9802411fa122eb140ada2edfc9df3be55dbb8 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 4 Nov 2012 10:21:40 +0100 Subject: [PATCH 1/1] 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 --- src/search.cpp | 5 +++++ 1 file changed, 5 insertions(+) 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); -- 2.39.2