]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
CLOP: Passed pawns weights tuning
[stockfish] / src / search.cpp
index 8257b5bb9f33d308ef668539e75ccb4f89567f12..fc5dc4ee8ab305759e255a7d86ed110795decbf2 100644 (file)
@@ -496,7 +496,7 @@ namespace {
     Value bestValues[PLY_MAX_PLUS_2];
     int bestMoveChanges[PLY_MAX_PLUS_2];
     int depth, aspirationDelta;
-    Value value, alpha, beta;
+    Value bestValue, alpha, beta;
     Move bestMove, easyMove, skillBest, skillPonder;
 
     // Initialize stuff before a new search
@@ -505,7 +505,7 @@ namespace {
     H.clear();
     *ponderMove = bestMove = easyMove = skillBest = skillPonder = MOVE_NONE;
     depth = aspirationDelta = 0;
-    value = alpha = -VALUE_INFINITE, beta = VALUE_INFINITE;
+    bestValue = alpha = -VALUE_INFINITE, beta = VALUE_INFINITE;
     ss->currentMove = MOVE_NULL; // Hack to skip update gains
 
     // Moves to search are verified and copied
@@ -555,7 +555,7 @@ namespace {
             do {
                 // Search starts from ss+1 to allow referencing (ss-1). This is
                 // needed by update gains and ss copy when splitting at Root.
-                value = search<Root>(pos, ss+1, alpha, beta, depth * ONE_PLY);
+                bestValue = search<Root>(pos, ss+1, alpha, beta, depth * ONE_PLY);
 
                 // Bring to front the best move. It is critical that sorting is
                 // done with a stable algorithm because all the values but the first
@@ -569,7 +569,7 @@ namespace {
                 // the fail high/low loop then reorder the PV moves, otherwise
                 // leave the last PV move in its position so to be searched again.
                 // Of course this is needed only in MultiPV search.
-                if (MultiPVIdx && value > alpha && value < beta)
+                if (MultiPVIdx && bestValue > alpha && bestValue < beta)
                     sort<RootMove>(Rml.begin(), Rml.begin() + MultiPVIdx);
 
                 // Write PV back to transposition table in case the relevant entries
@@ -587,7 +587,7 @@ namespace {
                 // if we have a fail high/low and we are deep in the search. UCI
                 // protocol requires to send all the PV lines also if are still
                 // to be searched and so refer to the previous search's score.
-                if ((value > alpha && value < beta) || elapsed_search_time() > 2000)
+                if ((bestValue > alpha && bestValue < beta) || elapsed_search_time() > 2000)
                     for (int i = 0; i < std::min(UCIMultiPV, (int)Rml.size()); i++)
                     {
                         bool updated = (i <= MultiPVIdx);
@@ -608,12 +608,12 @@ namespace {
 
                 // In case of failing high/low increase aspiration window and
                 // research, otherwise exit the fail high/low loop.
-                if (value >= beta)
+                if (bestValue >= beta)
                 {
                     beta = std::min(beta + aspirationDelta, VALUE_INFINITE);
                     aspirationDelta += aspirationDelta / 2;
                 }
-                else if (value <= alpha)
+                else if (bestValue <= alpha)
                 {
                     AspirationFailLow = true;
                     StopOnPonderhit = false;
@@ -624,13 +624,13 @@ namespace {
                 else
                     break;
 
-            } while (abs(value) < VALUE_KNOWN_WIN);
+            } while (abs(bestValue) < VALUE_KNOWN_WIN);
         }
 
         // Collect info about search result
         bestMove = Rml[0].pv[0];
         *ponderMove = Rml[0].pv[1];
-        bestValues[depth] = value;
+        bestValues[depth] = bestValue;
         bestMoveChanges[depth] = Rml.bestMoveChanges;
 
         // Skills: Do we need to pick now the best and the ponder moves ?
@@ -640,7 +640,7 @@ namespace {
         if (Options["Use Search Log"].value<bool>())
         {
             Log log(Options["Search Log Filename"].value<string>());
-            log << pretty_pv(pos, depth, value, elapsed_search_time(), &Rml[0].pv[0]) << endl;
+            log << pretty_pv(pos, depth, bestValue, elapsed_search_time(), &Rml[0].pv[0]) << endl;
         }
 
         // Init easyMove at first iteration or drop it if differs from the best move
@@ -2071,20 +2071,8 @@ split_point_start: // At split points actual search starts from here
 
     do pos.undo_move(pv[--ply]); while (ply);
   }
-} // namespace
-
-
-// Little helper used by idle_loop() to check that all the slave threads of a
-// split point have finished searching.
-
-static bool all_slaves_finished(SplitPoint* sp) {
 
-  for (int i = 0; i < Threads.size(); i++)
-      if (sp->is_slave[i])
-          return false;
-
-  return true;
-}
+} // namespace
 
 
 // Thread::idle_loop() is where the thread is parked when it has no work to do.
@@ -2114,7 +2102,7 @@ void Thread::idle_loop(SplitPoint* sp) {
           lock_grab(&sleepLock);
 
           // If we are master and all slaves have finished don't go to sleep
-          if (sp && all_slaves_finished(sp))
+          if (sp && Threads.split_point_finished(sp))
           {
               lock_release(&sleepLock);
               break;
@@ -2166,7 +2154,7 @@ void Thread::idle_loop(SplitPoint* sp) {
 
       // 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.
-      if (sp && all_slaves_finished(sp))
+      if (sp && Threads.split_point_finished(sp))
       {
           // Because sp->is_slave[] is reset under lock protection,
           // be sure sp->lock has been released before to return.