Rename and move under ThreadsManager class.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
do pos.undo_move(pv[--ply]); while (ply);
}
do pos.undo_move(pv[--ply]); while (ply);
}
-} // namespace
-
-
-// Little helper used by idle_loop() to check that all the slave threads of a
-// split point have finished searching.
-
-static bool all_slaves_finished(SplitPoint* sp) {
- for (int i = 0; i < Threads.size(); i++)
- if (sp->is_slave[i])
- return false;
-
- return true;
-}
// Thread::idle_loop() is where the thread is parked when it has no work to do.
// Thread::idle_loop() is where the thread is parked when it has no work to do.
lock_grab(&sleepLock);
// If we are master and all slaves have finished don't go to sleep
lock_grab(&sleepLock);
// If we are master and all slaves have finished don't go to sleep
- if (sp && all_slaves_finished(sp))
+ if (sp && Threads.split_point_finished(sp))
{
lock_release(&sleepLock);
break;
{
lock_release(&sleepLock);
break;
// 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.
// 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.
- if (sp && all_slaves_finished(sp))
+ if (sp && Threads.split_point_finished(sp))
{
// Because sp->is_slave[] is reset under lock protection,
// be sure sp->lock has been released before to return.
{
// Because sp->is_slave[] is reset under lock protection,
// be sure sp->lock has been released before to return.
+// split_point_finished() checks if all the slave threads of a given split
+// point have finished searching.
+
+bool ThreadsManager::split_point_finished(SplitPoint* sp) const {
+
+ for (int i = 0; i < activeThreads; i++)
+ if (sp->is_slave[i])
+ return false;
+
+ return true;
+}
+
+
// split() does the actual work of distributing the work at a node between
// several available threads. If it does not succeed in splitting the
// node (because no idle threads are available, or because we have no unused
// split() does the actual work of distributing the work at a node between
// several available threads. If it does not succeed in splitting the
// node (because no idle threads are available, or because we have no unused
void set_size(int cnt);
void read_uci_options();
bool available_slave_exists(int master) const;
void set_size(int cnt);
void read_uci_options();
bool available_slave_exists(int master) const;
+ bool split_point_finished(SplitPoint* sp) const;
void getline(std::string& cmd);
void start_listener();
void getline(std::string& cmd);
void start_listener();