mirror of
https://github.com/opelly27/Stockfish.git
synced 2026-05-20 14:27:45 +00:00
Do not copy master position in split()
A pointer is enough because after a split point has been setup master and slaves thread end up calling sp_search() or sp_search_pv() and here a full copy of split point position is done again, note that even master does another copy (of itself) and this is done before any do_move() call so that master Position is never updated between split() and sp_search(). Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
+4
-9
@@ -1813,8 +1813,7 @@ namespace {
|
||||
assert(threadID >= 0 && threadID < ActiveThreads);
|
||||
assert(ActiveThreads > 1);
|
||||
|
||||
Position pos;
|
||||
pos.fast_copy(sp->pos);
|
||||
Position pos(*sp->pos);
|
||||
CheckInfo ci(pos);
|
||||
SearchStack* ss = sp->sstack[threadID];
|
||||
Value value = -VALUE_INFINITE;
|
||||
@@ -1956,8 +1955,7 @@ namespace {
|
||||
assert(threadID >= 0 && threadID < ActiveThreads);
|
||||
assert(ActiveThreads > 1);
|
||||
|
||||
Position pos;
|
||||
pos.fast_copy(sp->pos);
|
||||
Position pos(*sp->pos);
|
||||
CheckInfo ci(pos);
|
||||
SearchStack* ss = sp->sstack[threadID];
|
||||
Value value = -VALUE_INFINITE;
|
||||
@@ -2969,7 +2967,7 @@ namespace {
|
||||
splitPoint = SplitPointStack[master] + Threads[master].activeSplitPoints;
|
||||
Threads[master].activeSplitPoints++;
|
||||
|
||||
// Initialize the split point object and copy current position
|
||||
// Initialize the split point object
|
||||
splitPoint->parent = Threads[master].splitPoint;
|
||||
splitPoint->finished = false;
|
||||
splitPoint->ply = ply;
|
||||
@@ -2983,14 +2981,11 @@ namespace {
|
||||
splitPoint->mp = mp;
|
||||
splitPoint->moves = *moves;
|
||||
splitPoint->cpus = 1;
|
||||
splitPoint->pos.fast_copy(p);
|
||||
splitPoint->pos = &p;
|
||||
splitPoint->parentSstack = sstck;
|
||||
for (i = 0; i < ActiveThreads; i++)
|
||||
splitPoint->slaves[i] = 0;
|
||||
|
||||
// Detach splitPoint Position from the master one
|
||||
splitPoint->pos.detach();
|
||||
|
||||
// Copy the tail of current search stack to the master thread
|
||||
memcpy(splitPoint->sstack[master] + ply - 1, sstck + ply - 1, 3 * sizeof(SearchStack));
|
||||
Threads[master].splitPoint = splitPoint;
|
||||
|
||||
Reference in New Issue
Block a user