Skip to content

Commit

Permalink
Simplify nosleep logic
Browse files Browse the repository at this point in the history
Avoid redundant 'while' conditions. It is enough to
check them in the outer loop.

Quick tested for no regression 10K games at 4 threads
ELO: -1.32 +-3.9 (95%) LOS: 25.6%
Total: 10000 W: 1653 L: 1691 D: 6656

No functional change.
  • Loading branch information
mcostalba committed Mar 18, 2015
1 parent 2e8552d commit 9a6cfee
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 22 deletions.
36 changes: 17 additions & 19 deletions src/search.cpp
Expand Up @@ -278,10 +278,13 @@ void Search::think() {
}

for (Thread* th : Threads)
{
th->maxPly = 0;
th->notify_one(); // Wake up all the threads
}

Threads.timer->run = true;
Threads.timer->notify_one(); // Wake up the recurring timer
Threads.timer->notify_one(); // Start the recurring timer

id_loop(RootPos); // Let's start searching !

Expand Down Expand Up @@ -1591,25 +1594,8 @@ void Thread::idle_loop() {

assert(!this_sp || (this_sp->master == this && searching));

while ( !exit
&& !(this_sp && this_sp->slavesMask.none()))
while (!exit && !(this_sp && this_sp->slavesMask.none()))
{
// If there is nothing to do, sleep.
while( !exit
&& !(this_sp && this_sp->slavesMask.none())
&& !searching)
{
if ( !this_sp
&& !Threads.main()->thinking)
{
std::unique_lock<Mutex> lk(mutex);
while (!exit && !Threads.main()->thinking)
sleepCondition.wait(lk);
}
else
std::this_thread::yield();
}

// If this thread has been assigned work, launch a search
while (searching)
{
Expand Down Expand Up @@ -1715,6 +1701,18 @@ void Thread::idle_loop() {
sp->spinlock.release();
}
}

// If search is finished then sleep, otherwise just yield
if (!Threads.main()->thinking)
{
assert(!this_sp);

std::unique_lock<Mutex> lk(mutex);
while (!exit && !Threads.main()->thinking)
sleepCondition.wait(lk);
}
else
std::this_thread::yield(); // Wait for a new job or for our slaves to finish
}
}

Expand Down
4 changes: 1 addition & 3 deletions src/thread.cpp
Expand Up @@ -373,7 +373,5 @@ void ThreadPool::start_thinking(const Position& pos, const LimitsType& limits,
RootMoves.push_back(RootMove(m));

main()->thinking = true;

for (Thread* th : *this)
th->notify_one();
main()->notify_one(); // Wake up main thread: 'thinking' must be already set
}

0 comments on commit 9a6cfee

Please sign in to comment.