From 889fed448c280f2f559c03672faa521ea4dcc1f2 Mon Sep 17 00:00:00 2001 From: Shawn Xu Date: Tue, 21 Jan 2025 17:41:33 -0800 Subject: [PATCH] Better nonpawn indexing Improves indexing scheme, by noting that both sides are likely to access the same non_pawn_index nearby. LLR: 2.93 (-2.94,2.94) <0.00,2.00> Total: 75936 W: 19905 L: 19554 D: 36477 Ptnml(0-2): 190, 7863, 21554, 8128, 233 https://tests.stockfishchess.org/tests/view/67904d0cfc8c306ba6cea332 closes https://github.com/official-stockfish/Stockfish/pull/5816 No functional change Co-authored-by: Andrew Grant --- src/history.h | 7 ++++++- src/search.cpp | 8 ++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/history.h b/src/history.h index 15095cd0..4543fc55 100644 --- a/src/history.h +++ b/src/history.h @@ -138,7 +138,7 @@ enum CorrHistType { Pawn, // By color and pawn structure Major, // By color and positions of major pieces (Queen, Rook) and King Minor, // By color and positions of minor pieces (Knight, Bishop) and King - NonPawn, // By color and non-pawn material positions + NonPawn, // By Non-pawn material positions and color PieceTo, // By [piece][to] move Continuation, // Combined history of move pairs }; @@ -150,6 +150,11 @@ struct CorrHistTypedef { using type = Stats; }; +template<> +struct CorrHistTypedef { + using type = Stats; +}; + template<> struct CorrHistTypedef { using type = Stats; diff --git a/src/search.cpp b/src/search.cpp index 990cbae3..e11da912 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -89,8 +89,8 @@ int correction_value(const Worker& w, const Position& pos, const Stack* ss) { const auto pcv = w.pawnCorrectionHistory[us][pawn_structure_index(pos)]; const auto macv = w.majorPieceCorrectionHistory[us][major_piece_index(pos)]; const auto micv = w.minorPieceCorrectionHistory[us][minor_piece_index(pos)]; - const auto wnpcv = w.nonPawnCorrectionHistory[WHITE][us][non_pawn_index(pos)]; - const auto bnpcv = w.nonPawnCorrectionHistory[BLACK][us][non_pawn_index(pos)]; + const auto wnpcv = w.nonPawnCorrectionHistory[WHITE][non_pawn_index(pos)][us]; + const auto bnpcv = w.nonPawnCorrectionHistory[BLACK][non_pawn_index(pos)][us]; const auto cntcv = m.is_ok() ? (*(ss - 2)->continuationCorrectionHistory)[pos.piece_on(m.to_sq())][m.to_sq()] : 0; @@ -1442,9 +1442,9 @@ moves_loop: // When in check, search starts here << bonus * 114 / 128; thisThread->majorPieceCorrectionHistory[us][major_piece_index(pos)] << bonus * 163 / 128; thisThread->minorPieceCorrectionHistory[us][minor_piece_index(pos)] << bonus * 146 / 128; - thisThread->nonPawnCorrectionHistory[WHITE][us][non_pawn_index(pos)] + thisThread->nonPawnCorrectionHistory[WHITE][non_pawn_index(pos)][us] << bonus * nonPawnWeight / 128; - thisThread->nonPawnCorrectionHistory[BLACK][us][non_pawn_index(pos)] + thisThread->nonPawnCorrectionHistory[BLACK][non_pawn_index(pos)][us] << bonus * nonPawnWeight / 128; if (m.is_ok())