mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-20 09:06:45 +08: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:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user