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 0ca5657..28eff70 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 ea1e55f..f14308a 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 206ee4e..af7795b 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 1772a41..08ac30e 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 5cc0de5..384d931 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);