X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=3c638ca057f5e1c3c515498e005cecf88a111c8e;hp=94052ef5a482bacc44968c35be562c0eda4cf6e3;hb=5410424e3d036b43715c7989aa99e449cdcde18e;hpb=b40e45c1cc51bd228898314264d6d241478b23d8 diff --git a/src/search.cpp b/src/search.cpp index 94052ef5..3c638ca0 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -183,10 +183,13 @@ void Search::init() { } -/// Search::clear() resets search state to its initial value, to obtain reproducible results +/// Search::clear() resets search state to its initial value void Search::clear() { + Threads.main()->wait_for_search_finished(); + + Time.availableNodes = 0; TT.clear(); for (Thread* th : Threads) @@ -274,7 +277,7 @@ void MainThread::search() { // the UCI protocol states that we shouldn't print the best move before the // GUI sends a "stop" or "ponderhit" command. We therefore simply wait here // until the GUI sends one of those commands (which also raises Threads.stop). - if (!Threads.stop && (Limits.ponder || Limits.infinite)) + if (!Threads.stop && (Threads.ponder || Limits.infinite)) { Threads.stopOnPonderhit = true; wait(Threads.stop); @@ -496,7 +499,7 @@ void Thread::search() { { // If we are allowed to ponder do not stop the search now but // keep pondering until the GUI sends "ponderhit" or "stop". - if (Limits.ponder) + if (Threads.ponder) Threads.stopOnPonderhit = true; else Threads.stop = true; @@ -550,7 +553,7 @@ namespace { Value bestValue, value, ttValue, eval; bool ttHit, inCheck, givesCheck, singularExtensionNode, improving; bool captureOrPromotion, doFullDepthSearch, moveCountPruning, skipQuiets, ttCapture; - Piece moved_piece; + Piece movedPiece; int moveCount, quietCount; // Step 1. Initialize node @@ -848,7 +851,7 @@ moves_loop: // When in check search starts from here extension = DEPTH_ZERO; captureOrPromotion = pos.capture_or_promotion(move); - moved_piece = pos.moved_piece(move); + movedPiece = pos.moved_piece(move); givesCheck = type_of(move) == NORMAL && !pos.discovered_check_candidates() ? pos.check_squares(type_of(pos.piece_on(from_sq(move)))) & to_sq(move) @@ -906,8 +909,8 @@ moves_loop: // When in check search starts from here // Countermoves based pruning if ( lmrDepth < 3 - && (*contHist[0])[moved_piece][to_sq(move)] < CounterMovePruneThreshold - && (*contHist[1])[moved_piece][to_sq(move)] < CounterMovePruneThreshold) + && (*contHist[0])[movedPiece][to_sq(move)] < CounterMovePruneThreshold + && (*contHist[1])[movedPiece][to_sq(move)] < CounterMovePruneThreshold) continue; // Futility pruning: parent node @@ -942,7 +945,7 @@ moves_loop: // When in check search starts from here // Update the current move (this must be done after singular extension search) ss->currentMove = move; - ss->contHistory = &thisThread->contHistory[moved_piece][to_sq(move)]; + ss->contHistory = &thisThread->contHistory[movedPiece][to_sq(move)]; // Step 14. Make the move pos.do_move(move, st, givesCheck); @@ -975,9 +978,9 @@ moves_loop: // When in check search starts from here r -= 2 * ONE_PLY; ss->statScore = thisThread->mainHistory[~pos.side_to_move()][from_to(move)] - + (*contHist[0])[moved_piece][to_sq(move)] - + (*contHist[1])[moved_piece][to_sq(move)] - + (*contHist[3])[moved_piece][to_sq(move)] + + (*contHist[0])[movedPiece][to_sq(move)] + + (*contHist[1])[movedPiece][to_sq(move)] + + (*contHist[3])[movedPiece][to_sq(move)] - 4000; // Decrease/increase reduction by comparing opponent's stat score @@ -1486,7 +1489,7 @@ moves_loop: // When in check search starts from here } // An engine may not stop pondering until told so by the GUI - if (Limits.ponder) + if (Threads.ponder) return; if ( (Limits.use_time_management() && elapsed > Time.maximum() - 10)