From 659c54582ddb1bbbf80f7022a80c027ab0bd4c42 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Tue, 31 Mar 2009 14:57:44 +0200 Subject: [PATCH 1/1] 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 --- src/search.cpp | 17 +++-------------- src/tt.cpp | 7 +++---- src/tt.h | 7 ++----- 3 files changed, 8 insertions(+), 23 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 022f3a9d..434587a8 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -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 diff --git a/src/tt.cpp b/src/tt.cpp index 82d967ca..8c5f3e34 100644 --- a/src/tt.cpp +++ b/src/tt.cpp @@ -104,7 +104,7 @@ void TranspositionTable::clear() { /// is bigger than the depth of t2. A TTEntry of type VALUE_TYPE_EVAL /// never replaces another entry for the same position. -TTEntry* TranspositionTable::store(const Position &pos, Value v, Depth d, +void TranspositionTable::store(const Position &pos, Value v, Depth d, Move m, ValueType type) { TTEntry *tte, *replace; @@ -116,13 +116,13 @@ TTEntry* TranspositionTable::store(const Position &pos, Value v, Depth d, // Do not overwrite position entry when VALUE_TYPE_EVAL if ( tte->key() && type == VALUE_TYPE_EVAL) - return NULL; + return; if (m == MOVE_NONE) m = tte->move(); *tte = TTEntry(pos.get_key(), v, type, d, m, generation); - return tte; + return; } else if (i == 0) // replace would be a no-op in this common case continue; @@ -136,7 +136,6 @@ TTEntry* TranspositionTable::store(const Position &pos, Value v, Depth d, } *replace = TTEntry(pos.get_key(), v, type, d, m, generation); writes++; - return replace; } diff --git a/src/tt.h b/src/tt.h index a820d94a..76ecad81 100644 --- a/src/tt.h +++ b/src/tt.h @@ -46,8 +46,7 @@ /// the 32 bits of the data field are so defined /// /// bit 0-16: move -/// bit 17: stored value equals static value -/// bit 18-19: not used +/// bit 17-19: not used /// bit 20-22: value type /// bit 23-31: generation @@ -62,8 +61,6 @@ public: Value value() const { return Value(value_); } ValueType type() const { return ValueType((data >> 20) & 7); } int generation() const { return (data >> 23); } - bool staticValue() const { return ((data >> 17) & 1); } - void setStaticValue() { data |= (1 << 17); } private: Key key_; @@ -83,7 +80,7 @@ public: ~TranspositionTable(); void set_size(unsigned mbSize); void clear(); - TTEntry* store(const Position &pos, Value v, Depth d, Move m, ValueType type); + void store(const Position &pos, Value v, Depth d, Move m, ValueType type); TTEntry* retrieve(const Position &pos) const; void new_search(); void insert_pv(const Position &pos, Move pv[]); -- 2.39.2