mirror of
https://github.com/official-stockfish/Stockfish.git
synced 2026-07-22 12:47:08 +00:00
Don't copy around DirtyThreats
The contents of DirtyThreats gets memcpyed twice for each call to do_move. (Return value optimization doesn't apply to the do_move function itself because it constructs a std::pair, so it gets copied; and the calls to reset also require a copy.) This patch inserts the dirty info in place. Sometimes the caller of do_move ignores the DirtyThreats info, so we pass in scratch objects. I found that stack-allocating these scratch objects was bad on Fishtest, so I begrudgingly put them in the Position struct. Both templating the do_move function on whether dirty threats are needed and putting a null-check branch for each use of dirty threats were slowdowns locally. Of course, nothing prevents a future attempt at cleaning this up. passed STC LLR: 2.96 (-2.94,2.94) <0.00,2.00> Total: 68448 W: 17770 L: 17418 D: 33260 Ptnml(0-2): 198, 7425, 18630, 7769, 202 https://tests.stockfishchess.org/tests/view/6914c01a7ca87818523318ba closes https://github.com/official-stockfish/Stockfish/pull/6414 No functional change
This commit is contained in:
committed by
Joost VandeVondele
parent
3ae7684714
commit
fa4f05d3ef
+4
-4
@@ -531,16 +531,16 @@ void Search::Worker::do_move(
|
||||
bool capture = pos.capture_stage(move);
|
||||
nodes.fetch_add(1, std::memory_order_relaxed);
|
||||
|
||||
DirtyBoardData dirtyBoardData = pos.do_move(move, st, givesCheck, &tt);
|
||||
accumulatorStack.push(dirtyBoardData);
|
||||
auto [dirtyPiece, dirtyThreats] = accumulatorStack.push();
|
||||
pos.do_move(move, st, givesCheck, dirtyPiece, dirtyThreats, &tt);
|
||||
|
||||
if (ss != nullptr)
|
||||
{
|
||||
ss->currentMove = move;
|
||||
ss->continuationHistory =
|
||||
&continuationHistory[ss->inCheck][capture][dirtyBoardData.dp.pc][move.to_sq()];
|
||||
&continuationHistory[ss->inCheck][capture][dirtyPiece.pc][move.to_sq()];
|
||||
ss->continuationCorrectionHistory =
|
||||
&continuationCorrectionHistory[dirtyBoardData.dp.pc][move.to_sq()];
|
||||
&continuationCorrectionHistory[dirtyPiece.pc][move.to_sq()];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user