From: Marco Costalba Date: Sun, 24 Oct 2010 08:51:49 +0000 (+0100) Subject: Revert previous patch X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=5b445cdf59d0737befad9750cd49da0ca278c0f7;p=stockfish Revert previous patch It seems we have a speed regression under Linux, anyhow commit and revert to leave some documentation in case we want to try again in the future. Signed-off-by: Marco Costalba --- diff --git a/src/search.cpp b/src/search.cpp index d022b3de..e521b868 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -2212,9 +2212,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, @@ -2230,23 +2227,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 && threads[threadID].state == THREAD_AVAILABLE)) { - lock_grab(&MPLock); + assert(!sp); + assert(threadID != 0); + + if (AllThreadsShouldExit) + break; - // Test with lock held to avoid races with wake_sleeping_thread() - for (i = 0; sp && i < ActiveThreads && !sp->slaves[i]; i++) {} - allFinished = (i == ActiveThreads); + lock_grab(&MPLock); - // Retest sleep conditions under lock protection - if ( AllThreadsShouldExit - || allFinished - || !( threadID >= ActiveThreads - || threads[threadID].state == THREAD_INITIALIZING - || threads[threadID].state == THREAD_AVAILABLE)) + // 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 @@ -2276,19 +2273,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 (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. @@ -2495,7 +2487,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; diff --git a/src/thread.h b/src/thread.h index 965bd30b..372d4da3 100644 --- a/src/thread.h +++ b/src/thread.h @@ -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];