Revert setting a flag when TT value equals static evaluation

Strangely enough it seems that optimization doesn't work.

After 760 games at 1+0: +155 -184 =421 -13 ELO

Probably the overhead, although small, for setting the flag
is not compensated by the saved evaluation call.

This could be due to the fact that after a TT value is stored,
if and when we hit the position again the stored TT value is
actually used as a cut-off so that we don't need to go on
with another search and evaluation is avoided in any case.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba
2009-03-31 14:57:44 +02:00
parent 2c0cd95ecf
commit 659c54582d
3 changed files with 8 additions and 23 deletions

View File

@@ -1455,7 +1455,7 @@ namespace {
if (isCheck)
staticValue = -VALUE_INFINITE;
else if (tte && (tte->type() == VALUE_TYPE_EVAL || tte->staticValue()))
else if (tte && tte->type() == VALUE_TYPE_EVAL)
{
// Use the cached evaluation score if possible
assert(tte->value() == evaluate(pos, ei, threadID));
@@ -1569,21 +1569,10 @@ namespace {
if (!pvNode)
{
Depth d = (depth == Depth(0) ? Depth(0) : Depth(-1));
Value v = value_to_tt(bestValue, ply);
TTEntry* e;
if (bestValue < beta)
e = TT.store(pos, v, d, MOVE_NONE, VALUE_TYPE_UPPER);
TT.store(pos, value_to_tt(bestValue, ply), d, MOVE_NONE, VALUE_TYPE_UPPER);
else
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();
TT.store(pos, value_to_tt(bestValue, ply), d, MOVE_NONE, VALUE_TYPE_LOWER);
}
// Update killers only for good check moves