mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-20 09:06:45 +08:00
Allow a slave to 'late join' another splitpoint
Instead of waiting to be allocated, actively search for another split point to join when finishes its search. Also modify split conditions. This patch has been tested with 7 threads SMP and passed both STC: LLR: 2.97 (-2.94,2.94) [-1.50,4.50] Total: 2885 W: 519 L: 410 D: 1956 And a reduced-LTC at 25+0.05 LLR: 2.95 (-2.94,2.94) [0.00,6.00] Total: 4401 W: 684 L: 566 D: 3151 Was then retested against regression in 3 thread case at standard LTC of 60+0.05: LLR: 2.96 (-2.94,2.94) [-4.00,0.00] Total: 40809 W: 5446 L: 5406 D: 29957 bench: 8802105
This commit is contained in:
committed by
Marco Costalba
parent
8f6a494ad7
commit
f6e98a924a
@@ -112,9 +112,9 @@ bool Thread::cutoff_occurred() const {
|
||||
// which are busy searching the split point at the top of slave's split point
|
||||
// stack (the "helpful master concept" in YBWC terminology).
|
||||
|
||||
bool Thread::available_to(const Thread* master) const {
|
||||
bool Thread::available_to(const Thread* master, bool latejoin) const {
|
||||
|
||||
if (searching)
|
||||
if (searching && !latejoin)
|
||||
return false;
|
||||
|
||||
// Make a local copy to be sure it doesn't become zero under our feet while
|
||||
@@ -239,7 +239,7 @@ void ThreadPool::read_uci_options() {
|
||||
Thread* ThreadPool::available_slave(const Thread* master) const {
|
||||
|
||||
for (const_iterator it = begin(); it != end(); ++it)
|
||||
if ((*it)->available_to(master))
|
||||
if ((*it)->available_to(master, false))
|
||||
return *it;
|
||||
|
||||
return NULL;
|
||||
@@ -292,6 +292,7 @@ void Thread::split(Position& pos, const Stack* ss, Value alpha, Value beta, Valu
|
||||
Threads.mutex.lock();
|
||||
sp.mutex.lock();
|
||||
|
||||
sp.allowLatejoin = true; // Only set this under lock protection
|
||||
++splitPointsSize;
|
||||
activeSplitPoint = &sp;
|
||||
activePosition = NULL;
|
||||
|
||||
Reference in New Issue
Block a user