mirror of
https://github.com/opelly27/Stockfish.git
synced 2026-05-20 09:47:46 +00:00
Reduce lock contention in idle_loop
Release split point lock before to wake up master thread. This seems to increase speed in case "sleeping threads" are used: After 7792 games with 4 threads at very fast TC (2"+0.05) Mod vs Orig 1722 - 1627 - 4443 ELO +4 (+- 5.1) No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
+8
-7
@@ -1873,6 +1873,7 @@ void Thread::idle_loop(SplitPoint* sp_master) {
|
||||
|
||||
Stack ss[MAX_PLY_PLUS_2];
|
||||
Position pos(*sp->pos, threadID);
|
||||
int master = sp->master;
|
||||
|
||||
memcpy(ss, sp->ss - 1, 4 * sizeof(Stack));
|
||||
(ss+1)->sp = sp;
|
||||
@@ -1894,17 +1895,17 @@ void Thread::idle_loop(SplitPoint* sp_master) {
|
||||
sp->slavesMask &= ~(1ULL << threadID);
|
||||
sp->nodes += pos.nodes_searched();
|
||||
|
||||
// Wake up master thread so to allow it to return from the idle loop in
|
||||
// case we are the last slave of the split point.
|
||||
if ( Threads.use_sleeping_threads()
|
||||
&& threadID != sp->master
|
||||
&& !Threads[sp->master].is_searching)
|
||||
Threads[sp->master].wake_up();
|
||||
|
||||
// After releasing the lock we cannot access anymore any SplitPoint
|
||||
// related data in a reliably way becuase it could have been released
|
||||
// under our feet by the sp master.
|
||||
lock_release(sp->lock);
|
||||
|
||||
// Wake up master thread so to allow it to return from the idle loop in
|
||||
// case we are the last slave of the split point.
|
||||
if ( Threads.use_sleeping_threads()
|
||||
&& threadID != master
|
||||
&& !Threads[master].is_searching)
|
||||
Threads[master].wake_up();
|
||||
}
|
||||
}
|
||||
// In helpful master concept a master can help only a sub-tree of its split
|
||||
|
||||
Reference in New Issue
Block a user