X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=12cbffe020b25f7bf92921dc860e23e83eb3d919;hp=51d3ae8cba3910b48301adab0507316e09acb850;hb=77342126d8417469bd6a398cfc6c0594b1f02f82;hpb=27ba611a3da37423a3502e49beeebe11c9a11d8e diff --git a/src/search.cpp b/src/search.cpp index 51d3ae8c..12cbffe0 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -85,7 +85,7 @@ namespace { // History and stats update bonus, based on depth int stat_bonus(Depth depth) { - int d = depth / ONE_PLY ; + int d = depth / ONE_PLY; return d > 17 ? 0 : d * d + 2 * d - 2; } @@ -361,7 +361,7 @@ void Thread::search() { multiPV = std::min(multiPV, rootMoves.size()); // Iterative deepening loop until requested to stop or the target depth is reached - while ( (rootDepth += ONE_PLY) < DEPTH_MAX + while ( (rootDepth = rootDepth + ONE_PLY) < DEPTH_MAX && !Signals.stop && (!Limits.depth || Threads.main()->rootDepth / ONE_PLY <= Limits.depth)) { @@ -400,6 +400,9 @@ void Thread::search() { { bestValue = ::search(rootPos, ss, alpha, beta, rootDepth, false, false); + this->tbHits = rootPos.tb_hits(); + this->nodes = rootPos.nodes_searched(); + // Bring the best move to the front. It is critical that sorting // is done with a stable algorithm because all the values but the // first and eventually the new best one are set to -VALUE_INFINITE @@ -551,7 +554,7 @@ namespace { Depth extension, newDepth; Value bestValue, value, ttValue, eval; bool ttHit, inCheck, givesCheck, singularExtensionNode, improving; - bool captureOrPromotion, doFullDepthSearch, moveCountPruning, skipQuiets; + bool captureOrPromotion, doFullDepthSearch, moveCountPruning, skipQuiets, ttCapture; Piece moved_piece; int moveCount, quietCount; @@ -568,6 +571,9 @@ namespace { { thisThread->resetCalls = false; + thisThread->tbHits = pos.tb_hits(); + thisThread->nodes = pos.nodes_searched(); + // At low node count increase the checking rate to about 0.1% of nodes // otherwise use a default value. thisThread->callsCnt = Limits.nodes ? std::min(4096, int(Limits.nodes / 1024)) @@ -668,7 +674,7 @@ namespace { if (err != TB::ProbeState::FAIL) { - thisThread->tbHits++; + pos.increment_tbHits(); int drawScore = TB::UseRule50 ? 1 : 0; @@ -836,6 +842,7 @@ moves_loop: // When in check search starts from here && (tte->bound() & BOUND_LOWER) && tte->depth() >= depth - 3 * ONE_PLY; skipQuiets = false; + ttCapture = false; // Step 11. Loop through moves // Loop through all pseudo-legal moves until no moves remain or a beta cutoff occurs @@ -953,6 +960,9 @@ moves_loop: // When in check search starts from here ss->moveCount = --moveCount; continue; } + + if (move == ttMove && captureOrPromotion) + ttCapture = true; // Update the current move (this must be done after singular extension search) ss->currentMove = move; @@ -973,6 +983,11 @@ moves_loop: // When in check search starts from here r -= r ? ONE_PLY : DEPTH_ZERO; else { + + // Increase reduction if ttMove is a capture + if (ttCapture) + r += ONE_PLY; + // Increase reduction for cut nodes if (cutNode) r += 2 * ONE_PLY; @@ -1473,7 +1488,7 @@ moves_loop: // When in check search starts from here void check_time() { - static TimePoint lastInfoTime = now(); + static std::atomic lastInfoTime = { now() }; int elapsed = Time.elapsed(); TimePoint tick = Limits.startTime + elapsed;