mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 09:13:08 +00:00
Retire "Active reparenting"
After 6K games at 60" + 0.1 on QUAD with 4 threads this implementation fails to show a measurable increase, result is well within error bar. Perhaps with 8 or more threads resut is better but we don't have the hardware to test. So retire for now and in case re-add in the future if it proves good on big machines. The only good news is that we don't have a regression and implementation is stable and bug-free, so could be reused somewhere in the future. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
ce159b16b9
commit
be3b8f3ae9
3 changed files with 0 additions and 40 deletions
|
@ -1844,7 +1844,6 @@ void Thread::idle_loop(SplitPoint* sp_master) {
|
||||||
assert(is_searching);
|
assert(is_searching);
|
||||||
|
|
||||||
is_searching = false;
|
is_searching = false;
|
||||||
sp->allSlavesRunning = false;
|
|
||||||
sp->slavesMask &= ~(1ULL << idx);
|
sp->slavesMask &= ~(1ULL << idx);
|
||||||
sp->nodes += pos.nodes_searched();
|
sp->nodes += pos.nodes_searched();
|
||||||
|
|
||||||
|
@ -1860,43 +1859,6 @@ void Thread::idle_loop(SplitPoint* sp_master) {
|
||||||
// our feet by the sp master. Also accessing other Thread objects is
|
// our feet by the sp master. Also accessing other Thread objects is
|
||||||
// unsafe because if we are exiting there is a chance are already freed.
|
// unsafe because if we are exiting there is a chance are already freed.
|
||||||
lock_release(sp->lock);
|
lock_release(sp->lock);
|
||||||
|
|
||||||
// Try to reparent to the first split point, with still all slaves
|
|
||||||
// running, where we are available as a possible slave.
|
|
||||||
for (int i = 0; i < Threads.size(); i++)
|
|
||||||
{
|
|
||||||
Thread* th = &Threads[i];
|
|
||||||
int spCnt = th->splitPointsCnt;
|
|
||||||
SplitPoint* latest = &th->splitPoints[spCnt ? spCnt - 1 : 0];
|
|
||||||
|
|
||||||
if ( this->is_available_to(th)
|
|
||||||
&& spCnt > 0
|
|
||||||
&& !th->cutoff_occurred()
|
|
||||||
&& latest->allSlavesRunning
|
|
||||||
&& more_than_one(latest->slavesMask))
|
|
||||||
{
|
|
||||||
lock_grab(latest->lock);
|
|
||||||
lock_grab(Threads.splitLock);
|
|
||||||
|
|
||||||
// Retest all under lock protection, we are in the middle
|
|
||||||
// of a race storm here !
|
|
||||||
if ( this->is_available_to(th)
|
|
||||||
&& spCnt == th->splitPointsCnt
|
|
||||||
&& !th->cutoff_occurred()
|
|
||||||
&& latest->allSlavesRunning
|
|
||||||
&& more_than_one(latest->slavesMask))
|
|
||||||
{
|
|
||||||
latest->slavesMask |= 1ULL << idx;
|
|
||||||
curSplitPoint = latest;
|
|
||||||
is_searching = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
lock_release(Threads.splitLock);
|
|
||||||
lock_release(latest->lock);
|
|
||||||
|
|
||||||
break; // Exit anyhow, only one try (enough in 99% of cases)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -319,7 +319,6 @@ Value ThreadsManager::split(Position& pos, Stack* ss, Value alpha, Value beta,
|
||||||
sp->master = master;
|
sp->master = master;
|
||||||
sp->cutoff = false;
|
sp->cutoff = false;
|
||||||
sp->slavesMask = 1ULL << master->idx;
|
sp->slavesMask = 1ULL << master->idx;
|
||||||
sp->allSlavesRunning = true;
|
|
||||||
sp->depth = depth;
|
sp->depth = depth;
|
||||||
sp->bestMove = *bestMove;
|
sp->bestMove = *bestMove;
|
||||||
sp->threatMove = threatMove;
|
sp->threatMove = threatMove;
|
||||||
|
|
|
@ -57,7 +57,6 @@ struct SplitPoint {
|
||||||
volatile Move bestMove;
|
volatile Move bestMove;
|
||||||
volatile int moveCount;
|
volatile int moveCount;
|
||||||
volatile bool cutoff;
|
volatile bool cutoff;
|
||||||
volatile bool allSlavesRunning;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue