From a1a7bc84da4a6f180179e437494dd485cba1711d Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 15 Mar 2014 21:13:43 +0100 Subject: [PATCH 1/1] Remove "Max Threads per Split Point" UCI option Experimental patch to verify if drop of nps in endgames at very long TC is due to this. Suggested by Ronald de Man. bench: 7451319 --- polyglot.ini | 1 - src/thread.cpp | 13 ++++++------- src/thread.h | 1 - src/ucioption.cpp | 1 - 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/polyglot.ini b/polyglot.ini index b851a33a..4e825f3c 100644 --- a/polyglot.ini +++ b/polyglot.ini @@ -30,7 +30,6 @@ Space = 100 Aggressiveness = 100 Cowardice = 100 Min Split Depth = 0 -Max Threads per Split Point = 5 Threads = 1 Idle Threads Sleep = true Hash = 128 diff --git a/src/thread.cpp b/src/thread.cpp index 9e96be6e..60c0ce71 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -88,7 +88,7 @@ Thread::Thread() /* : splitPoints() */ { // Value-initialization bug in MSVC maxPly = splitPointsSize = 0; activeSplitPoint = NULL; activePosition = NULL; - idx = Threads.size(); + idx = Threads.size(); // Starts from 0 } @@ -213,9 +213,8 @@ void ThreadPool::exit() { void ThreadPool::read_uci_options() { - maxThreadsPerSplitPoint = Options["Max Threads per Split Point"]; - minimumSplitDepth = Options["Min Split Depth"] * ONE_PLY; - size_t requested = Options["Threads"]; + minimumSplitDepth = Options["Min Split Depth"] * ONE_PLY; + size_t requested = Options["Threads"]; assert(requested > 0); @@ -297,12 +296,12 @@ void Thread::split(Position& pos, const Stack* ss, Value alpha, Value beta, Valu activeSplitPoint = &sp; activePosition = NULL; - size_t slavesCnt = 1; // This thread is always included + int slavesCnt = 1; // This thread is always included Thread* slave; - while ( (slave = Threads.available_slave(this)) != NULL - && ++slavesCnt <= Threads.maxThreadsPerSplitPoint && !Fake) + while (!Fake && (slave = Threads.available_slave(this)) != NULL) { + ++slavesCnt; sp.slavesMask |= 1ULL << slave->idx; slave->activeSplitPoint = &sp; slave->searching = true; // Slave leaves idle_loop() diff --git a/src/thread.h b/src/thread.h index c9152b22..ddeb4902 100644 --- a/src/thread.h +++ b/src/thread.h @@ -166,7 +166,6 @@ struct ThreadPool : public std::vector { bool sleepWhileIdle; Depth minimumSplitDepth; - size_t maxThreadsPerSplitPoint; Mutex mutex; ConditionVariable sleepCondition; TimerThread* timer; diff --git a/src/ucioption.cpp b/src/ucioption.cpp index 68a57bd5..eefacb22 100644 --- a/src/ucioption.cpp +++ b/src/ucioption.cpp @@ -70,7 +70,6 @@ void init(OptionsMap& o) { o["Aggressiveness"] = Option(100, 0, 200, on_eval); o["Cowardice"] = Option(100, 0, 200, on_eval); 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, 16384, on_hash_size); -- 2.39.2