mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Simplify idle_loop() signature
We can detect the split point master also from within idle_loop, so we can call the function without parameters and remove an overloaded member hack in Thread class. Note that we don't need to take a lock around curSplitPoint when entering idle_loop() because if we are the master then curSplitPoint cannot change under our feet (because is_searching is set and so we cannot be reallocated), if we are a slave we enter idle_loop() only upon Thread creation and in that case is always splitPointsCnt == 0. This is true even in the very rare case that curSplitPoint != NULL, if we have been already allocated even before entering idle_loop(). No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
4b19430103
commit
dba1bc354a
3 changed files with 11 additions and 9 deletions
|
@ -1643,11 +1643,15 @@ void RootMove::insert_pv_in_tt(Position& pos) {
|
|||
}
|
||||
|
||||
|
||||
/// Thread::idle_loop() is where the thread is parked when it has no work to do.
|
||||
/// The parameter 'master_sp', if non-NULL, is a pointer to an active SplitPoint
|
||||
/// object for which the thread is the master.
|
||||
/// Thread::idle_loop() is where the thread is parked when it has no work to do
|
||||
|
||||
void Thread::idle_loop(SplitPoint* sp_master) {
|
||||
void Thread::idle_loop() {
|
||||
|
||||
// Pointer 'sp_master', if non-NULL, points to the active SplitPoint
|
||||
// object for which the thread is the master.
|
||||
const SplitPoint* sp_master = splitPointsCnt ? curSplitPoint : NULL;
|
||||
|
||||
assert(!sp_master || (sp_master->master == this && is_searching));
|
||||
|
||||
// If this thread is the master of a split point and all slaves have
|
||||
// finished their work at this split point, return from the idle loop.
|
||||
|
|
|
@ -365,12 +365,11 @@ Value ThreadPool::split(Position& pos, Stack* ss, Value alpha, Value beta,
|
|||
|
||||
// Everything is set up. The master thread enters the idle loop, from which
|
||||
// it will instantly launch a search, because its is_searching flag is set.
|
||||
// We pass the split point as a parameter to the idle loop, which means that
|
||||
// the thread will return from the idle loop when all slaves have finished
|
||||
// The thread will return from the idle loop when all slaves have finished
|
||||
// their work at this split point.
|
||||
if (slavesCnt || Fake)
|
||||
{
|
||||
master->idle_loop(sp);
|
||||
master->idle_loop();
|
||||
|
||||
// In helpful master concept a master can help only a sub-tree of its split
|
||||
// point, and because here is all finished is not possible master is booked.
|
||||
|
|
|
@ -76,8 +76,7 @@ public:
|
|||
void wake_up();
|
||||
bool cutoff_occurred() const;
|
||||
bool is_available_to(Thread* master) const;
|
||||
void idle_loop(SplitPoint* sp_master);
|
||||
void idle_loop() { idle_loop(NULL); } // Hack to allow storing in start_fn
|
||||
void idle_loop();
|
||||
void main_loop();
|
||||
void timer_loop();
|
||||
void wait_for_stop_or_ponderhit();
|
||||
|
|
Loading…
Add table
Reference in a new issue