From: Joost VandeVondele Date: Mon, 4 Jun 2018 08:31:25 +0000 (+0200) Subject: Force time check on TB probe in search. X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=4b88bea4fcd5c4cb931610f97460615dd71ff35b;p=fairystockfish.git Force time check on TB probe in search. Because of aggressive time management and optimistic assumptions about move overhead, it's still very easy to get Stockfish to forfeit on time when we hit an endgame and have Syzygy EGTB on a spinning drive. The latency from serving a few thousand EGTB probes (~10ms each), of which there can currently be up to 4000 outstanding before a time check, will easily overwhelm the default Move Overhead of 30ms. This problem was first raised by Gian-Carlo Pascutto and some solutions and improvements were discussed in the following pull requests: https://github.com/official-stockfish/Stockfish/pull/1471 https://github.com/official-stockfish/Stockfish/pull/1623 https://github.com/official-stockfish/Stockfish/pull/1783 This patch is a minimal change proposed by Marco Costalba to lower the impact of the bug. We now force a check of the clock right after each tablebase read. No functional change. --- diff --git a/src/search.cpp b/src/search.cpp index 08bf90f..f4e1da9 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -683,6 +683,10 @@ namespace { TB::ProbeState err; TB::WDLScore wdl = Tablebases::probe_wdl(pos, &err); + // Force check of time on the next occasion + if (thisThread == Threads.main()) + static_cast(thisThread)->callsCnt = 0; + if (err != TB::ProbeState::FAIL) { thisThread->tbHits.fetch_add(1, std::memory_order_relaxed);