Retire "Active reparenting"
authorMarco Costalba <mcostalba@gmail.com>
Sun, 22 Apr 2012 16:52:31 +0000 (17:52 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 22 Apr 2012 16:52:31 +0000 (17:52 +0100)
After 6K games at 60" + 0.1 on QUAD with 4 threads
this implementation fails to show a measurable increase,
result is well within error bar.

Perhaps with 8 or more threads resut is better but we
don't have the hardware to test. So retire for now and
in case re-add in the future if it proves good on big
machines.

The only good news is that we don't have a regression and
implementation is stable and bug-free, so could be reused
somewhere in the future.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/search.cpp
src/thread.cpp
src/thread.h

index 21d5d786b6ba8be9e558bca2ffb18dfd78c951f1..bab8f398cc8f0ebc684c94df9d2e24a29f145a17 100644 (file)
@@ -1844,7 +1844,6 @@ void Thread::idle_loop(SplitPoint* sp_master) {
           assert(is_searching);
 
           is_searching = false;
-          sp->allSlavesRunning = false;
           sp->slavesMask &= ~(1ULL << idx);
           sp->nodes += pos.nodes_searched();
 
@@ -1860,43 +1859,6 @@ void Thread::idle_loop(SplitPoint* sp_master) {
           // our feet by the sp master. Also accessing other Thread objects is
           // unsafe because if we are exiting there is a chance are already freed.
           lock_release(sp->lock);
-
-          // Try to reparent to the first split point, with still all slaves
-          // running, where we are available as a possible slave.
-          for (int i = 0; i < Threads.size(); i++)
-          {
-              Thread* th = &Threads[i];
-              int spCnt = th->splitPointsCnt;
-              SplitPoint* latest = &th->splitPoints[spCnt ? spCnt - 1 : 0];
-
-              if (    this->is_available_to(th)
-                  &&  spCnt > 0
-                  && !th->cutoff_occurred()
-                  &&  latest->allSlavesRunning
-                  &&  more_than_one(latest->slavesMask))
-              {
-                  lock_grab(latest->lock);
-                  lock_grab(Threads.splitLock);
-
-                  // Retest all under lock protection, we are in the middle
-                  // of a race storm here !
-                  if (    this->is_available_to(th)
-                      &&  spCnt == th->splitPointsCnt
-                      && !th->cutoff_occurred()
-                      &&  latest->allSlavesRunning
-                      &&  more_than_one(latest->slavesMask))
-                  {
-                      latest->slavesMask |= 1ULL << idx;
-                      curSplitPoint = latest;
-                      is_searching = true;
-                  }
-
-                  lock_release(Threads.splitLock);
-                  lock_release(latest->lock);
-
-                  break; // Exit anyhow, only one try (enough in 99% of cases)
-              }
-          }
       }
   }
 }
index 631834da4b9f60c159facb502b5f7e2c0ac3fe04..9cd63d9595476eeb2cd37bf2e7c7530a93b83a51 100644 (file)
@@ -319,7 +319,6 @@ Value ThreadsManager::split(Position& pos, Stack* ss, Value alpha, Value beta,
   sp->master = master;
   sp->cutoff = false;
   sp->slavesMask = 1ULL << master->idx;
-  sp->allSlavesRunning = true;
   sp->depth = depth;
   sp->bestMove = *bestMove;
   sp->threatMove = threatMove;
index 9f0bb24add83bff8457c214e98c63af8a9c11210..3eb8fc9cfe4d8f001a5ae8a4d4685a39cc6539f5 100644 (file)
@@ -57,7 +57,6 @@ struct SplitPoint {
   volatile Move bestMove;
   volatile int moveCount;
   volatile bool cutoff;
-  volatile bool allSlavesRunning;
 };