mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-20 00:56:39 +08:00
Remember when TT value equals static evaluation value
When the stored TT value equals the static value set a proper flag so to not call evaluation() if we hit the same position again but use the stored TT value instead. This is another trick to avoid calling costly evaluation() in qsearch. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
@@ -1455,7 +1455,7 @@ namespace {
|
||||
if (isCheck)
|
||||
staticValue = -VALUE_INFINITE;
|
||||
|
||||
else if (tte && tte->type() == VALUE_TYPE_EVAL)
|
||||
else if (tte && (tte->type() == VALUE_TYPE_EVAL || tte->staticValue()))
|
||||
{
|
||||
// Use the cached evaluation score if possible
|
||||
assert(tte->value() == evaluate(pos, ei, threadID));
|
||||
@@ -1569,10 +1569,21 @@ namespace {
|
||||
if (!pvNode)
|
||||
{
|
||||
Depth d = (depth == Depth(0) ? Depth(0) : Depth(-1));
|
||||
Value v = value_to_tt(bestValue, ply);
|
||||
TTEntry* e;
|
||||
if (bestValue < beta)
|
||||
TT.store(pos, value_to_tt(bestValue, ply), d, MOVE_NONE, VALUE_TYPE_UPPER);
|
||||
e = TT.store(pos, v, d, MOVE_NONE, VALUE_TYPE_UPPER);
|
||||
else
|
||||
TT.store(pos, value_to_tt(bestValue, ply), d, MOVE_NONE, VALUE_TYPE_LOWER);
|
||||
e = TT.store(pos, v, d, MOVE_NONE, VALUE_TYPE_LOWER);
|
||||
|
||||
assert(e && e == TT.retrieve(pos));
|
||||
assert(!e->staticValue());
|
||||
|
||||
// If the just stored value happens to be equal to the static evaluation
|
||||
// score then set the flag, so to avoid calling evaluation() next time we
|
||||
// hit this position.
|
||||
if (staticValue == v && !ei.futilityMargin)
|
||||
e->setStaticValue();
|
||||
}
|
||||
|
||||
// Update killers only for good check moves
|
||||
|
||||
Reference in New Issue
Block a user