From ef5cf6412cf451cdd49c9a09bdcac0f7e5cdb2f1 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Thu, 10 Aug 2023 20:38:47 +0200 Subject: [PATCH] Qsearch TT Bench: 1997745 --- src/search/search_thread.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/search/search_thread.h b/src/search/search_thread.h index d6990a3..7a51658 100644 --- a/src/search/search_thread.h +++ b/src/search/search_thread.h @@ -434,11 +434,20 @@ namespace search { template Score qsearch(Score alpha, Score beta) { + constexpr bool non_pv_node = node_type == NON_PV_NODE; if (!shared.is_searching) { return UNKNOWN_SCORE; } + std::optional entry = shared.tt.probe(board.get_hash()); + chess::Move hash_move = entry ? entry->hash_move : chess::NULL_MOVE; + + if (entry && non_pv_node && + (entry->flag == TT_EXACT || (entry->flag == TT_ALPHA && entry->eval <= alpha) || (entry->flag == TT_BETA && entry->eval >= beta))) { + return entry->eval; + } + Score static_eval = eval::evaluate(board, nnue); if (static_eval >= beta) @@ -446,14 +455,16 @@ namespace search { if (static_eval > alpha) alpha = static_eval; - MoveList move_list(board, chess::NULL_MOVE, chess::NULL_MOVE, history, 0); + MoveList move_list(board, hash_move, chess::NULL_MOVE, history, 0); while (!move_list.empty()) { chess::Move move = move_list.next_move(); if (alpha > -WORST_MATE && !see(board, move, 0)) continue; + shared.tt.prefetch(board.hash_after_move(move)); shared.node_count[id]++; + board.make_move(move, &nnue); Score score = -qsearch(-beta, -alpha); board.undo_move(move, &nnue);