From: Marco Costalba Date: Sun, 12 Feb 2012 13:07:21 +0000 (+0100) Subject: Don't wake up threads at the beginning of the search X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=b1768c115cf2bbe7ed6f89dc53a8db85b4442353 Don't wake up threads at the beginning of the search But only when needed, after a split point. This behaviour does not apply when useSleepingThreads is false, becuase in this case threads are not woken up at split points so must be already running. No functional change. Signed-off-by: Marco Costalba --- diff --git a/src/search.cpp b/src/search.cpp index 8adbfd92..5706b959 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -307,11 +307,7 @@ void Search::think() { << endl; } - for (int i = 0; i < Threads.size(); i++) - { - Threads[i].maxPly = 0; - Threads[i].wake_up(); - } + Threads.set_size(Options["Threads"]); // Set best timer interval to avoid lagging under time pressure. Timer is // used to check for remaining available thinking time. diff --git a/src/thread.cpp b/src/thread.cpp index 457a9278..3b87a724 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -171,16 +171,14 @@ bool Thread::is_available_to(int master) const { } -// read_uci_options() updates number of active threads and other parameters -// according to the UCI options values. It is called before to start a new search. +// read_uci_options() updates internal threads parameters from the corresponding +// UCI options. It is called before to start a new search. void ThreadsManager::read_uci_options() { maxThreadsPerSplitPoint = Options["Max Threads per Split Point"]; minimumSplitDepth = Options["Min Split Depth"] * ONE_PLY; useSleepingThreads = Options["Use Sleeping Threads"]; - - set_size(Options["Threads"]); } @@ -189,11 +187,11 @@ void ThreadsManager::read_uci_options() { void ThreadsManager::set_size(int cnt) { - assert(cnt > 0 && cnt <= MAX_THREADS); + assert(cnt > 0 && cnt < MAX_THREADS); activeThreads = cnt; - for (int i = 1; i < MAX_THREADS; i++) // Ignore main thread + for (int i = 0; i < MAX_THREADS; i++) if (i < activeThreads) { // Dynamically allocate pawn and material hash tables according to the @@ -201,8 +199,12 @@ void ThreadsManager::set_size(int cnt) { // possible threads if only few are used. threads[i].pawnTable.init(); threads[i].materialTable.init(); + threads[i].maxPly = 0; threads[i].do_sleep = false; + + if (!useSleepingThreads) + threads[i].wake_up(); } else threads[i].do_sleep = true;