mirror of
https://github.com/official-stockfish/Stockfish.git
synced 2026-07-23 05:07:14 +00:00
prefetch the TT entry as soon as the move is known
Worker::do_move computes the successor hash key via the new Position::key_after(m) and prefetches the TT entry one full do_move earlier than the existing prefetch in Position::do_move. key_after does not model castling, en passant or promotion keys exactly; for rare moves the prefetch lands on an unused line. `key_after` has been around since 2014 (https://github.com/official-stockfish/Stockfish/commit/82d065b0) and was removed in (https://github.com/official-stockfish/Stockfish/pull/5770). Adding back `prefetch_key` helps in common, normal moves at the cost of extra compute. Speedup (PGO vs PGO, interleaved paired bench, n=48 pairs, Apple M2 Pro / apple-silicon): +0.69% [0.47, 0.91] Passed STC: https://tests.stockfishchess.org/tests/view/6a291f8d7c758d82accea17f LLR: 4.24 (-2.94,2.94) <0.00,2.00> Total: 473504 W: 121250 L: 120228 D: 232026 Ptnml(0-2): 1112, 51137, 131251, 52121, 1131 No functional change closes https://github.com/official-stockfish/Stockfish/pull/6911 No functional change
This commit is contained in:
committed by
Joost VandeVondele
parent
31e89adf70
commit
6f97594eda
@@ -634,6 +634,10 @@ void Search::Worker::do_move(Position& pos, const Move move, StateInfo& st, Stac
|
||||
|
||||
void Search::Worker::do_move(
|
||||
Position& pos, const Move move, StateInfo& st, const bool givesCheck, Stack* const ss) {
|
||||
// prefetch_key does not model castling, en passant or promotion keys
|
||||
// exactly; for rare moves the prefetch lands on an unused line.
|
||||
prefetch(tt.first_entry(pos.prefetch_key(move)));
|
||||
|
||||
bool capture = pos.capture_stage(move);
|
||||
++nodes;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user