X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=f4e1da977990f18d2b77e988cbbc4c1c0798370e;hp=d0bbc9675c9618ff780cb51b3f89a8eb8abf31f6;hb=4b88bea4fcd5c4cb931610f97460615dd71ff35b;hpb=df50ea5dc635457dd34fd08c0d332889483f5e7f diff --git a/src/search.cpp b/src/search.cpp index d0bbc967..f4e1da97 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -2,7 +2,7 @@ Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad - Copyright (C) 2015-2018 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad + Copyright (C) 2015-2019 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -85,10 +85,10 @@ namespace { return d > 17 ? 0 : 29 * d * d + 138 * d - 134; } - // Add a small random component to draw evaluations to keep search dynamic + // Add a small random component to draw evaluations to keep search dynamic // and to avoid 3fold-blindness. Value value_draw(Depth depth, Thread* thisThread) { - return depth < 4 ? VALUE_DRAW + return depth < 4 ? VALUE_DRAW : VALUE_DRAW + Value(2 * (thisThread->nodes.load(std::memory_order_relaxed) % 2) - 1); } @@ -187,6 +187,7 @@ void Search::clear() { Time.availableNodes = 0; TT.clear(); Threads.clear(); + Tablebases::init(Options["SyzygyPath"]); // Free up mapped files } @@ -598,7 +599,7 @@ namespace { if ( Threads.stop.load(std::memory_order_relaxed) || pos.is_draw(ss->ply) || ss->ply >= MAX_PLY) - return (ss->ply >= MAX_PLY && !inCheck) ? evaluate(pos) + return (ss->ply >= MAX_PLY && !inCheck) ? evaluate(pos) : value_draw(depth, pos.this_thread()); // Step 3. Mate distance pruning. Even if we mate at the next move our score @@ -682,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); @@ -943,10 +948,8 @@ moves_loop: // When in check, search starts from here && pos.see_ge(move)) extension = ONE_PLY; - // Extension for king moves that change castling rights - if ( pos.can_castle(us) - && type_of(movedPiece) == KING - && depth < 12 * ONE_PLY) + else if ( pos.can_castle(us) // Extension for king moves that change castling rights + && type_of(movedPiece) == KING) extension = ONE_PLY; // Calculate new depth for this move