From a16ba5bbd1034417f864476e4ba33d35970557db Mon Sep 17 00:00:00 2001 From: Joona Kiiski Date: Thu, 1 Aug 2013 22:12:58 +0100 Subject: [PATCH] Retire cpu_count() Set threads number always to 1 at startup and let the user explicitly to chose the number of threads. Also preserve the useful behavior of automatically set "Min Split Depth" according to the requested threads, indeed this parameter is too technical for a casual user, so, when left to zero, we set it on a sensible value. No functional change --- src/misc.cpp | 29 ----------------------------- src/misc.h | 1 - src/platform.h | 1 - src/thread.cpp | 7 +++++++ src/ucioption.cpp | 11 +++-------- 5 files changed, 10 insertions(+), 39 deletions(-) diff --git a/src/misc.cpp b/src/misc.cpp index 0ca56571..28eff708 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -24,10 +24,6 @@ #include "misc.h" #include "thread.h" -#ifdef __hpux -# include -#endif - using namespace std; /// Version number. If Version is left empty, then compile date, in the @@ -169,31 +165,6 @@ std::ostream& operator<<(std::ostream& os, SyncCout sc) { void start_logger(bool b) { Logger::start(b); } -/// cpu_count() tries to detect the number of CPU cores - -int cpu_count() { - -#ifdef _WIN32 - SYSTEM_INFO s; - GetSystemInfo(&s); - return s.dwNumberOfProcessors; -#else - -# if defined(_SC_NPROCESSORS_ONLN) - return sysconf(_SC_NPROCESSORS_ONLN); -# elif defined(__hpux) - struct pst_dynamic psd; - if (pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0) == -1) - return 1; - return psd.psd_proc_cnt; -# else - return 1; -# endif - -#endif -} - - /// timed_wait() waits for msec milliseconds. It is mainly an helper to wrap /// conversion from milliseconds to struct timespec, as used by pthreads. diff --git a/src/misc.h b/src/misc.h index ea1e55f1..f14308af 100644 --- a/src/misc.h +++ b/src/misc.h @@ -27,7 +27,6 @@ #include "types.h" extern const std::string engine_info(bool to_uci = false); -extern int cpu_count(); extern void timed_wait(WaitCondition&, Lock&, int); extern void prefetch(char* addr); extern void start_logger(bool b); diff --git a/src/platform.h b/src/platform.h index 206ee4e9..af7795b9 100644 --- a/src/platform.h +++ b/src/platform.h @@ -40,7 +40,6 @@ typedef unsigned __int64 uint64_t; #else # include -# include // Used by sysconf(_SC_NPROCESSORS_ONLN) #endif #ifndef _WIN32 // Linux - Unix diff --git a/src/thread.cpp b/src/thread.cpp index 1772a419..08ac30e1 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -217,6 +217,13 @@ void ThreadPool::read_uci_options() { assert(requested > 0); + // Value 0 has a special meaning: We determine the optimal minimum split depth + // automatically. Anyhow the minimumSplitDepth should never be under 4 plies. + if (!minimumSplitDepth) + minimumSplitDepth = (requested < 8 ? 4 : 7) * ONE_PLY; + else + minimumSplitDepth = std::max(4 * ONE_PLY, minimumSplitDepth); + while (size() < requested) push_back(new_thread()); diff --git a/src/ucioption.cpp b/src/ucioption.cpp index 5cc0de56..384d9317 100644 --- a/src/ucioption.cpp +++ b/src/ucioption.cpp @@ -51,14 +51,9 @@ bool CaseInsensitiveLess::operator() (const string& s1, const string& s2) const /// init() initializes the UCI options to their hard coded default values -/// and initializes the default value of "Threads" and "Min Split Depth" -/// parameters according to the number of CPU cores detected. void init(OptionsMap& o) { - int cpus = std::min(cpu_count(), MAX_THREADS); - int msd = cpus < 8 ? 4 : 7; - o["Write Debug Log"] = Option(false, on_logger); o["Write Search Log"] = Option(false); o["Search Log Filename"] = Option("SearchLog.txt"); @@ -74,9 +69,9 @@ void init(OptionsMap& o) { o["Space"] = Option(100, 0, 200, on_eval); o["Aggressiveness"] = Option(100, 0, 200, on_eval); o["Cowardice"] = Option(100, 0, 200, on_eval); - o["Min Split Depth"] = Option(msd, 4, 12, on_threads); - o["Max Threads per Split Point"] = Option(5, 4, 8, on_threads); - o["Threads"] = Option(cpus, 1, MAX_THREADS, on_threads); + o["Min Split Depth"] = Option(0, 0, 12, on_threads); + o["Max Threads per Split Point"] = Option(5, 4, 8, on_threads); + o["Threads"] = Option(1, 1, MAX_THREADS, on_threads); o["Idle Threads Sleep"] = Option(true); o["Hash"] = Option(32, 1, 8192, on_hash_size); o["Clear Hash"] = Option(on_clear_hash); -- 2.39.2