From 6738b65be97af10e4b5b783dc8ad21ae0faf36a8 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Mon, 11 Apr 2011 09:03:34 +0200 Subject: [PATCH] Prefetch also material tables Prefetch both pawn and material tables in do_move() and prefetch always, not only after a pawn move or a capture. Speed up of 0,7% No functional change. Signed-off-by: Marco Costalba --- src/evaluate.cpp | 13 +++++-------- src/misc.h | 2 +- src/position.cpp | 4 +++- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index e9feba06..86b37e3b 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -269,16 +269,13 @@ namespace { } -//// -//// Functions -//// - - -/// Prefetches in pawn hash tables +/// prefetchTables() is called in do_move() to prefetch pawn and material +/// hash tables data that will be needed shortly after in evaluation. -void prefetchPawn(Key key, int threadID) { +void prefetchTables(Key pKey, Key mKey, int threadID) { - PawnTable[threadID]->prefetch(key); + PawnTable[threadID]->prefetch(pKey); + MaterialTable[threadID]->prefetch(mKey); } diff --git a/src/misc.h b/src/misc.h index 0c4bd644..6c451934 100644 --- a/src/misc.h +++ b/src/misc.h @@ -29,7 +29,7 @@ extern int get_system_time(); extern int cpu_count(); extern int input_available(); extern void prefetch(char* addr); -extern void prefetchPawn(Key, int); +extern void prefetchTables(Key pKey, Key mKey, int threadID); // Debug functions extern bool dbg_show_mean; diff --git a/src/position.cpp b/src/position.cpp index f4a098d9..abe7fde3 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -885,7 +885,6 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI // Update pawn hash key and prefetch in L1/L2 cache st->pawnKey ^= zobrist[us][PAWN][from] ^ zobrist[us][PAWN][to]; - prefetchPawn(st->pawnKey, threadID); // Set en passant square, only if moved pawn can be captured if ((to ^ from) == 16) @@ -938,6 +937,9 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI } } + // Prefetch pawn and material hash tables + prefetchTables(st->pawnKey, st->materialKey, threadID); + // Update incremental scores st->value += pst_delta(piece, from, to); -- 2.39.2