mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 16:23:09 +00:00
Revert "Allow split point master to sleep (take 2)"
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
5d6b2f2144
commit
9ecdfd2401
3 changed files with 15 additions and 28 deletions
|
@ -263,7 +263,6 @@ namespace {
|
|||
// Multi-threads related variables
|
||||
Depth MinimumSplitDepth;
|
||||
int MaxThreadsPerSplitPoint;
|
||||
bool UseSleepingMaster;
|
||||
ThreadsManager ThreadsMgr;
|
||||
|
||||
// Node counters, used only by thread[0] but try to keep in different cache
|
||||
|
@ -456,7 +455,6 @@ bool think(Position& pos, bool infinite, bool ponder, int time[], int increment[
|
|||
MaxThreadsPerSplitPoint = Options["Maximum Number of Threads per Split Point"].value<int>();
|
||||
MultiPV = Options["MultiPV"].value<int>();
|
||||
UseLogFile = Options["Use Search Log"].value<bool>();
|
||||
UseSleepingMaster = Options["Use Sleeping Master"].value<bool>();
|
||||
|
||||
if (UseLogFile)
|
||||
LogFile.open(Options["Search Log Filename"].value<std::string>().c_str(), std::ios::out | std::ios::app);
|
||||
|
@ -2184,9 +2182,6 @@ split_point_start: // At split points actual search starts from here
|
|||
|
||||
assert(threadID >= 0 && threadID < MAX_THREADS);
|
||||
|
||||
int i;
|
||||
bool allFinished = false;
|
||||
|
||||
while (true)
|
||||
{
|
||||
// Slave threads can exit as soon as AllThreadsShouldExit raises,
|
||||
|
@ -2202,23 +2197,23 @@ split_point_start: // At split points actual search starts from here
|
|||
// instead of wasting CPU time polling for work.
|
||||
while ( threadID >= ActiveThreads
|
||||
|| threads[threadID].state == THREAD_INITIALIZING
|
||||
|| (threads[threadID].state == THREAD_AVAILABLE && (!sp || UseSleepingMaster)))
|
||||
|| (!sp && threads[threadID].state == THREAD_AVAILABLE))
|
||||
{
|
||||
assert(!sp);
|
||||
assert(threadID != 0);
|
||||
|
||||
if (AllThreadsShouldExit)
|
||||
break;
|
||||
|
||||
lock_grab(&MPLock);
|
||||
|
||||
// Test with lock held to avoid races with wake_sleeping_thread()
|
||||
for (i = 0; sp && i < ActiveThreads && !sp->slaves[i]; i++) {}
|
||||
allFinished = (i == ActiveThreads);
|
||||
|
||||
// Retest sleep conditions under lock protection
|
||||
if ( AllThreadsShouldExit
|
||||
|| allFinished
|
||||
|| !( threadID >= ActiveThreads
|
||||
|| threads[threadID].state == THREAD_INITIALIZING
|
||||
|| (threads[threadID].state == THREAD_AVAILABLE && (!sp || UseSleepingMaster))))
|
||||
// Retest condition under lock protection
|
||||
if (!( threadID >= ActiveThreads
|
||||
|| threads[threadID].state == THREAD_INITIALIZING
|
||||
|| (!sp && threads[threadID].state == THREAD_AVAILABLE)))
|
||||
{
|
||||
lock_release(&MPLock);
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Put thread to sleep
|
||||
|
@ -2248,19 +2243,14 @@ split_point_start: // At split points actual search starts from here
|
|||
assert(threads[threadID].state == THREAD_SEARCHING);
|
||||
|
||||
threads[threadID].state = THREAD_AVAILABLE;
|
||||
|
||||
// Wake up master thread so to allow it to return from the idle loop in
|
||||
// case we are the last slave of the split point.
|
||||
if (UseSleepingMaster && threadID != tsp->master && threads[tsp->master].state == THREAD_AVAILABLE)
|
||||
wake_sleeping_thread(tsp->master);
|
||||
}
|
||||
|
||||
// If this thread is the master of a split point and all slaves have
|
||||
// finished their work at this split point, return from the idle loop.
|
||||
for (i = 0; sp && i < ActiveThreads && !sp->slaves[i]; i++) {}
|
||||
allFinished = (i == ActiveThreads);
|
||||
int i = 0;
|
||||
for ( ; sp && i < ActiveThreads && !sp->slaves[i]; i++) {}
|
||||
|
||||
if (allFinished)
|
||||
if (i == ActiveThreads)
|
||||
{
|
||||
// Because sp->slaves[] is reset under lock protection,
|
||||
// be sure sp->lock has been released before to return.
|
||||
|
@ -2468,7 +2458,6 @@ split_point_start: // At split points actual search starts from here
|
|||
|
||||
// Initialize the split point object
|
||||
splitPoint.parent = masterThread.splitPoint;
|
||||
splitPoint.master = master;
|
||||
splitPoint.stopRequest = false;
|
||||
splitPoint.ply = ply;
|
||||
splitPoint.depth = depth;
|
||||
|
|
|
@ -55,7 +55,6 @@ struct SplitPoint {
|
|||
bool pvNode, mateThreat;
|
||||
Value beta;
|
||||
int ply;
|
||||
int master;
|
||||
Move threatMove;
|
||||
SearchStack sstack[MAX_THREADS][PLY_MAX_PLUS_2];
|
||||
|
||||
|
|
|
@ -94,7 +94,6 @@ void init_uci_options() {
|
|||
Options["Minimum Split Depth"] = Option(4, 4, 7);
|
||||
Options["Maximum Number of Threads per Split Point"] = Option(5, 4, 8);
|
||||
Options["Threads"] = Option(1, 1, MAX_THREADS);
|
||||
Options["Use Sleeping Master"] = Option(false);
|
||||
Options["Hash"] = Option(32, 4, 8192);
|
||||
Options["Clear Hash"] = Option(false, "button");
|
||||
Options["Ponder"] = Option(true);
|
||||
|
|
Loading…
Add table
Reference in a new issue