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
Aggressiveness = 100
Cowardice = 100
Min Split Depth = 0
-Max Threads per Split Point = 5
Threads = 1
Idle Threads Sleep = true
Hash = 128
maxPly = splitPointsSize = 0;
activeSplitPoint = NULL;
activePosition = NULL;
- idx = Threads.size();
+ idx = Threads.size(); // Starts from 0
}
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);
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()
bool sleepWhileIdle;
Depth minimumSplitDepth;
- size_t maxThreadsPerSplitPoint;
Mutex mutex;
ConditionVariable sleepCondition;
TimerThread* timer;
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);