From cbcc581a86417ead9f75ae3a9556f97df63b22bf Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 31 Jul 2010 08:14:06 +0100 Subject: [PATCH] Use past SE information also for success cases If singular extension search was succesful in the past then skip another the SE search and extend of one ply. Another way to mitigate the cost of SE at the price of some more spurious extension, but on 90% of cases info is correct. Signed-off-by: Marco Costalba --- src/search.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index b1f64536..58feb77d 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -979,7 +979,7 @@ namespace { Move movesSearched[256]; EvalInfo ei; StateInfo st; - const TTEntry* tte; + const TTEntry *tte, *ttx; Key posKey; Move ttMove, move, excludedMove, threatMove; Depth ext, newDepth; @@ -1190,17 +1190,6 @@ namespace { && is_lower_bound(tte->type()) && tte->depth() >= depth - 3 * OnePly; - // Avoid to do an expensive singular extension search on nodes where - // such search had already failed in the past. - if ( !PvNode - && singularExtensionNode - && depth < SingularExtensionDepth[PvNode] + 5 * OnePly) - { - TTEntry* ttx = TT.retrieve(pos.get_exclusion_key()); - if (ttx && is_lower_bound(ttx->type())) - singularExtensionNode = false; - } - // Step 10. Loop through moves // Loop through all legal moves until no moves remain or a beta cutoff occurs while ( bestValue < beta @@ -1226,9 +1215,22 @@ namespace { && move == tte->move() && ext < OnePly) { + // Avoid to do an expensive singular extension search on nodes where + // such search have already been done in the past, so assume the last + // singular extension search result is still valid. + if ( !PvNode + && depth < SingularExtensionDepth[PvNode] + 5 * OnePly + && ((ttx = TT.retrieve(pos.get_exclusion_key())) != NULL)) + { + if (is_upper_bound(ttx->type())) + ext = OnePly; + + singularExtensionNode = false; + } + Value ttValue = value_from_tt(tte->value(), ply); - if (abs(ttValue) < VALUE_KNOWN_WIN) + if (singularExtensionNode && abs(ttValue) < VALUE_KNOWN_WIN) { Value b = ttValue - SingularExtensionMargin; ss->excludedMove = move; -- 2.39.2