From: Marco Costalba Date: Wed, 18 Mar 2015 07:01:50 +0000 (+0100) Subject: Simplify nosleep logic X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=9a6cfee73bbad3051f888e6b8f8e88293763bf70;hp=2e8552db76092a7e4fa8f7278231d66e26a756d9 Simplify nosleep logic 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. --- diff --git a/src/search.cpp b/src/search.cpp index b08b687a..6ea5e3a2 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -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 ! @@ -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 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) { @@ -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 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 } } diff --git a/src/thread.cpp b/src/thread.cpp index 4b5d845b..b4958ea3 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -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 }