1
0
Fork 0

Another attempt at evaluation shortcut

In this case we try a rather drastic
approach: we simply don't futility prune
in qsearch when arriving from a null move.

So we save evaluating and also save to mess
with eval margins at all because margin is used
only in futility.

Also accuracy should not be affected, actually it
improves because we don't prune anything anymore.

bench: 5404066
sf_3_base
Marco Costalba 2012-11-05 10:13:48 +01:00
parent a5b1f4774f
commit c581b7ea36
1 changed files with 9 additions and 2 deletions

View File

@ -1102,11 +1102,12 @@ split_point_start: // At split points actual search starts from here
Key posKey;
Move ttMove, move, bestMove;
Value bestValue, value, ttValue, futilityValue, futilityBase;
bool givesCheck, enoughMaterial, evasionPrunable;
bool givesCheck, enoughMaterial, evasionPrunable, fromNull;
Depth ttDepth;
ss->currentMove = bestMove = MOVE_NONE;
ss->ply = (ss-1)->ply + 1;
fromNull = (ss-1)->currentMove == MOVE_NULL;
// Check for an instant draw or maximum ply reached
if (pos.is_draw<false, false>() || ss->ply > MAX_PLY)
@ -1144,7 +1145,12 @@ split_point_start: // At split points actual search starts from here
}
else
{
if (tte)
if (fromNull)
{
ss->staticEval = bestValue = -(ss-1)->staticEval;
ss->evalMargin = VALUE_ZERO;
}
else if (tte)
{
assert(tte->static_value() != VALUE_NONE || Threads.size() > 1);
@ -1192,6 +1198,7 @@ split_point_start: // At split points actual search starts from here
if ( !PvNode
&& !InCheck
&& !givesCheck
&& !fromNull
&& move != ttMove
&& enoughMaterial
&& type_of(move) != PROMOTION