1
0
Fork 0

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 <mcostalba@gmail.com>
sf_2.3.1_base
Marco Costalba 2011-11-19 11:30:32 +01:00
parent c56a7ee803
commit 3fc08f8ab6
1 changed files with 7 additions and 6 deletions

View File

@ -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;