From: Marco Costalba Date: Sat, 19 Nov 2011 10:30:32 +0000 (+0100) Subject: Don't check for early stop when StopOnPonderhit is set X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=3fc08f8ab60d98216ac62e1dad11c4bac95a0141 Don't check for early stop when StopOnPonderhit is set If we are pondering we will stop the search only when GUI sends "ponderhit" or "stop" commands or when we reach maximum depth. In all the other cases we continue to search so there is no need to verify for available time. Also better clarify why wait_for_stop_or_ponderhit() before to exit in some cases. No functional change. Signed-off-by: Marco Costalba --- diff --git a/src/search.cpp b/src/search.cpp index 702adc53..061ba5ee 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -162,7 +162,7 @@ namespace { int MultiPV, UCIMultiPV, MultiPVIdx; // Time management variables - bool StopOnPonderhit, FirstRootMove, StopRequest, QuitRequest, AspirationFailLow; + volatile bool StopOnPonderhit, FirstRootMove, StopRequest, QuitRequest, AspirationFailLow; TimeManager TimeMgr; SearchLimits Limits; @@ -465,9 +465,10 @@ bool think(Position& pos, const SearchLimits& limits, Move searchMoves[]) { pos.undo_move(bestMove); // Return from think() with unchanged position } - // If we are pondering or in infinite search, we shouldn't print the best move + // When we reach max depth we arrive here even without a StopRequest, but if + // we are pondering or in infinite search, we shouldn't print the best move // before we are told to do so. - if (Limits.ponder || Limits.infinite) + if (!StopRequest && (Limits.ponder || Limits.infinite)) wait_for_stop_or_ponderhit(); // Could be MOVE_NONE when searching on a stalemate position @@ -648,8 +649,8 @@ namespace { if (depth > 2 && bestMoveChanges[depth]) bestMoveNeverChanged = false; - // Check for some early stop condition - if (!StopRequest && Limits.useTimeManagement()) + // Do we have time for the next iteration? Can we stop searching now? + if (!StopRequest && !StopOnPonderhit && Limits.useTimeManagement()) { // Take in account some extra time if the best move has changed if (depth > 4 && depth < 50) @@ -678,7 +679,7 @@ namespace { } // If we are allowed to ponder do not stop the search now but keep pondering - if (StopRequest && Limits.ponder) + if (StopRequest && Limits.ponder) // FIXME Limits.ponder is racy { StopRequest = false; StopOnPonderhit = true;