1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 16:53:09 +00:00

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
This commit is contained in:
Marco Costalba 2012-11-04 10:21:40 +01:00
parent a87831230d
commit 37e9802411

View file

@ -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 if (ss->staticEval == VALUE_NONE || ss->evalMargin == VALUE_NONE) // Due to a race
ss->staticEval = bestValue = evaluate(pos, ss->evalMargin); 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 else
ss->staticEval = bestValue = evaluate(pos, ss->evalMargin); ss->staticEval = bestValue = evaluate(pos, ss->evalMargin);