X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=d59edbaeefcbf4be8ba40ea965156a21e0bf387a;hp=aafbf80f94aef804009883e41bbfc8d28b96c3b6;hb=2c237da54647bb7526f3512bea183eb44919cdda;hpb=ecd3218b6b24bb54509dbe6e9b24517b7df7390d diff --git a/src/search.cpp b/src/search.cpp index aafbf80f..d59edbae 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; } @@ -244,6 +244,7 @@ void MainThread::search() { Color us = rootPos.side_to_move(); Time.init(Limits, us, rootPos.game_ply()); + TT.new_search(); int contempt = Options["Contempt"] * PawnValueEg / 100; // From centipawns DrawValue[ us] = VALUE_DRAW - Value(contempt); @@ -334,7 +335,7 @@ void Thread::search() { MainThread* mainThread = (this == Threads.main() ? Threads.main() : nullptr); std::memset(ss-4, 0, 7 * sizeof(Stack)); - for(int i = 4; i > 0; i--) + for (int i = 4; i > 0; i--) (ss-i)->history = &this->counterMoveHistory[NO_PIECE][0]; // Use as sentinel bestValue = delta = alpha = -VALUE_INFINITE; @@ -347,7 +348,6 @@ void Thread::search() { EasyMove.clear(); mainThread->easyMovePlayed = mainThread->failedLow = false; mainThread->bestMoveChanges = 0; - TT.new_search(); } size_t multiPV = Options["MultiPV"]; @@ -784,9 +784,7 @@ namespace { && abs(beta) < VALUE_MATE_IN_MAX_PLY) { Value rbeta = std::min(beta + 200, VALUE_INFINITE); - Depth rdepth = depth - 4 * ONE_PLY; - assert(rdepth >= ONE_PLY); assert(is_ok((ss-1)->currentMove)); MovePicker mp(pos, ttMove, rbeta - ss->staticEval); @@ -797,8 +795,9 @@ namespace { ss->currentMove = move; ss->history = &thisThread->counterMoveHistory[pos.moved_piece(move)][to_sq(move)]; + assert(depth >= 5 * ONE_PLY); pos.do_move(move, st); - value = -search(pos, ss+1, -rbeta, -rbeta+1, rdepth, !cutNode, false); + value = -search(pos, ss+1, -rbeta, -rbeta+1, depth - 4 * ONE_PLY, !cutNode, false); pos.undo_move(move); if (value >= rbeta) return value; @@ -1257,6 +1256,9 @@ moves_loop: // When in check search starts from here { assert(is_ok(move)); + // Speculative prefetch as early as possible + prefetch(TT.first_entry(pos.key_after(move))); + givesCheck = type_of(move) == NORMAL && !pos.discovered_check_candidates() ? pos.check_squares(type_of(pos.piece_on(from_sq(move)))) & to_sq(move) : pos.gives_check(move); @@ -1298,9 +1300,6 @@ moves_loop: // When in check search starts from here && !pos.see_ge(move)) continue; - // Speculative prefetch as early as possible - prefetch(TT.first_entry(pos.key_after(move))); - // Check for legality just before making the move if (!pos.legal(move)) {