Retire cpu_count()
authorJoona Kiiski <joona.kiiski@gmail.com>
Thu, 1 Aug 2013 21:12:58 +0000 (22:12 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 2 Aug 2013 14:48:25 +0000 (16:48 +0200)
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
src/misc.h
src/platform.h
src/thread.cpp
src/ucioption.cpp

index 0ca56571ee96f723e8b25991ebbc8efbc29a5e47..28eff708852e024e7805ab86677cab05dcf3659d 100644 (file)
 #include "misc.h"
 #include "thread.h"
 
-#ifdef __hpux
-#    include <sys/pstat.h>
-#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.
 
index ea1e55f1a43f1ada32cae859d1aac2214fb7eed4..f14308afa5fc6b86303baaf6e78204b0e1f13862 100644 (file)
@@ -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);
index 206ee4e9077171e1d6d703dff5b0fc83f8c0abb3..af7795b9501da1fad19e6dd3a57614fd220394c2 100644 (file)
@@ -40,7 +40,6 @@ typedef unsigned __int64 uint64_t;
 
 #else
 #  include <inttypes.h>
-#  include <unistd.h>  // Used by sysconf(_SC_NPROCESSORS_ONLN)
 #endif
 
 #ifndef _WIN32 // Linux - Unix
index 1772a41931017c2ed1857288ba6a90955deb4b75..08ac30e11a17c4c8b333cdd73093b3db0cf3e649 100644 (file)
@@ -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<Thread>());
 
index 5cc0de563df524f82bf56276f2a1528e7249201d..384d9317b98f3325055b7c649512c7fbdb1f9481 100644 (file)
@@ -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);