From 4b88bea4fcd5c4cb931610f97460615dd71ff35b Mon Sep 17 00:00:00 2001 From: Joost VandeVondele Date: Mon, 4 Jun 2018 10:31:25 +0200 Subject: [PATCH] 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. --- src/search.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/search.cpp b/src/search.cpp index 08bf90f8..f4e1da97 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); -- 2.39.2