Split at root!
authorJoona Kiiski <joona.kiiski@gmail.com>
Sat, 6 Aug 2011 08:43:46 +0000 (09:43 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 7 Aug 2011 09:35:56 +0000 (10:35 +0100)
Another great success by Joona !

After 5876 games at 10"+0.1
Mod vs Orig: 1073 - 849 - 3954 ELO +13 (+- 5.2)

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

index 0dccf934e82c2f823ed0f1b013589daf2ac6384a..cc910f7d81da39c5f1d1b42ebbd36567cd6abd79 100644 (file)
@@ -1226,15 +1226,14 @@ split_point_start: // At split points actual search starts from here
       }
 
       // Step 19. Check for split
-      if (   !RootNode
-          && !SpNode
+      if (   !SpNode
           && depth >= Threads.min_split_depth()
           && bestValue < beta
           && Threads.available_slave_exists(pos.thread())
           && !StopRequest
           && !thread.cutoff_occurred())
           Threads.split<FakeSplit>(pos, ss, &alpha, beta, &bestValue, depth,
-                                   threatMove, moveCount, &mp, PvNode);
+                                   threatMove, moveCount, &mp, NT);
     }
 
     // Step 20. Check for mate and stalemate
@@ -2210,9 +2209,11 @@ void ThreadsManager::idle_loop(int threadID, SplitPoint* sp) {
           memcpy(ss, tsp->ss - 1, 4 * sizeof(SearchStack));
           (ss+1)->sp = tsp;
 
-          if (tsp->pvNode)
+          if (tsp->nodeType == Root)
+              search<SplitPointRoot>(pos, ss+1, tsp->alpha, tsp->beta, tsp->depth);
+          else if (tsp->nodeType == PV)
               search<SplitPointPV>(pos, ss+1, tsp->alpha, tsp->beta, tsp->depth);
-          else
+          else if (tsp->nodeType == NonPV)
               search<SplitPointNonPV>(pos, ss+1, tsp->alpha, tsp->beta, tsp->depth);
 
           assert(threads[threadID].state == Thread::SEARCHING);
index c7cabeb7e131afcdc75d4a036666c8c6407449a7..4ef145781511aacbf61930844dcf5153b8942ba4 100644 (file)
@@ -240,7 +240,7 @@ bool ThreadsManager::available_slave_exists(int master) const {
 template <bool Fake>
 void ThreadsManager::split(Position& pos, SearchStack* ss, Value* alpha, const Value beta,
                            Value* bestValue, Depth depth, Move threatMove,
-                           int moveCount, MovePicker* mp, bool pvNode) {
+                           int moveCount, MovePicker* mp, int nodeType) {
   assert(pos.is_ok());
   assert(*bestValue >= -VALUE_INFINITE);
   assert(*bestValue <= *alpha);
@@ -275,7 +275,7 @@ void ThreadsManager::split(Position& pos, SearchStack* ss, Value* alpha, const V
   splitPoint.threatMove = threatMove;
   splitPoint.alpha = *alpha;
   splitPoint.beta = beta;
-  splitPoint.pvNode = pvNode;
+  splitPoint.nodeType = nodeType;
   splitPoint.bestValue = *bestValue;
   splitPoint.mp = mp;
   splitPoint.moveCount = moveCount;
@@ -341,5 +341,5 @@ void ThreadsManager::split(Position& pos, SearchStack* ss, Value* alpha, const V
 }
 
 // Explicit template instantiations
-template void ThreadsManager::split<false>(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, bool);
-template void ThreadsManager::split<true>(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, bool);
+template void ThreadsManager::split<false>(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, int);
+template void ThreadsManager::split<true>(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, int);
index 100620313fcebc7e7f5f6161fe15b600b0a9929e..038d8e39f68f68ed4941847eeee5b6f1d507ea31 100644 (file)
@@ -38,7 +38,7 @@ struct SplitPoint {
   const Position* pos;
   Depth depth;
   Value beta;
-  int pvNode;
+  int nodeType;
   int ply;
   int master;
   Move threatMove;
@@ -116,7 +116,7 @@ public:
 
   template <bool Fake>
   void split(Position& pos, SearchStack* ss, Value* alpha, const Value beta, Value* bestValue,
-             Depth depth, Move threatMove, int moveCount, MovePicker* mp, bool pvNode);
+             Depth depth, Move threatMove, int moveCount, MovePicker* mp, int nodeType);
 private:
   Thread threads[MAX_THREADS];
   Lock mpLock;