Don't assume the type of Time::point
authorMarco Costalba <mcostalba@gmail.com>
Tue, 24 Feb 2015 11:24:53 +0000 (12:24 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 24 Feb 2015 13:08:14 +0000 (14:08 +0100)
But instead use the proper definition. Also
rewrite chrono functions while there.

No functional change.

src/benchmark.cpp
src/misc.cpp
src/misc.h
src/search.cpp
src/search.h
src/thread.cpp

index cf0a315..e27e81f 100644 (file)
@@ -144,7 +144,7 @@ void benchmark(const Position& current, istream& is) {
 
   uint64_t nodes = 0;
   Search::StateStackPtr st;
-  Time::point elapsed = Time::now();
+  TimePoint elapsed = now();
 
   for (size_t i = 0; i < fens.size(); ++i)
   {
@@ -163,7 +163,7 @@ void benchmark(const Position& current, istream& is) {
       }
   }
 
-  elapsed = Time::now() - elapsed + 1; // Ensure positivity to avoid a 'divide by zero'
+  elapsed = now() - elapsed + 1; // Ensure positivity to avoid a 'divide by zero'
 
   dbg_print(); // Just before to exit
 
index daafd3f..f09694c 100644 (file)
@@ -17,7 +17,6 @@
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include <chrono>
 #include <fstream>
 #include <iomanip>
 #include <iostream>
@@ -27,7 +26,6 @@
 #include "thread.h"
 
 using namespace std;
-using namespace std::chrono;
 
 namespace {
 
@@ -125,13 +123,6 @@ const string engine_info(bool to_uci) {
 }
 
 
-/// Convert system time to milliseconds. That's all we need.
-
-Time::point Time::now() {
-  return duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
-}
-
-
 /// Debug functions used mainly to collect run-time statistics
 
 void dbg_hit_on(bool b) { ++hits[0]; if (b) ++hits[1]; }
index 28bf045..37f1e70 100644 (file)
@@ -21,6 +21,7 @@
 #define MISC_H_INCLUDED
 
 #include <cassert>
+#include <chrono>
 #include <ostream>
 #include <string>
 #include <vector>
@@ -36,13 +37,13 @@ void dbg_hit_on(bool c, bool b);
 void dbg_mean_of(int v);
 void dbg_print();
 
+typedef std::chrono::milliseconds::rep TimePoint; // A value in milliseconds
 
-namespace Time {
-  typedef int64_t point;
-  point now();
+inline TimePoint now() {
+  return std::chrono::duration_cast<std::chrono::milliseconds>
+        (std::chrono::steady_clock::now().time_since_epoch()).count();
 }
 
-
 template<class Entry, int Size>
 struct HashTable {
   Entry* operator[](Key key) { return &table[(uint32_t)key & (Size - 1)]; }
index 5dacc87..a6f4d6b 100644 (file)
@@ -41,7 +41,7 @@ namespace Search {
   LimitsType Limits;
   RootMoveVector RootMoves;
   Position RootPos;
-  Time::point SearchTime;
+  TimePoint SearchTime;
   StateStackPtr SetupStates;
 }
 
@@ -355,7 +355,7 @@ namespace {
                 // the UI) before a re-search.
                 if (   multiPV == 1
                     && (bestValue <= alpha || bestValue >= beta)
-                    && Time::now() - SearchTime > 3000)
+                    && now() - SearchTime > 3000)
                     sync_cout << UCI::pv(pos, depth, alpha, beta) << sync_endl;
 
                 // In case of failing low/high increase aspiration window and
@@ -386,9 +386,9 @@ namespace {
 
             if (Signals.stop)
                 sync_cout << "info nodes " << RootPos.nodes_searched()
-                          << " time " << Time::now() - SearchTime << sync_endl;
+                          << " time " << now() - SearchTime << sync_endl;
 
-            else if (PVIdx + 1 == multiPV || Time::now() - SearchTime > 3000)
+            else if (PVIdx + 1 == multiPV || now() - SearchTime > 3000)
                 sync_cout << UCI::pv(pos, depth, alpha, beta) << sync_endl;
         }
 
@@ -412,7 +412,7 @@ namespace {
             // Stop the search if only one legal move is available or all
             // of the available time has been used.
             if (   RootMoves.size() == 1
-                || Time::now() - SearchTime > TimeMgr.available_time())
+                || now() - SearchTime > TimeMgr.available_time())
             {
                 // If we are allowed to ponder do not stop the search now but
                 // keep pondering until the GUI sends "ponderhit" or "stop".
@@ -774,7 +774,7 @@ moves_loop: // When in check and at SpNode search starts from here
       {
           Signals.firstRootMove = (moveCount == 1);
 
-          if (thisThread == Threads.main() && Time::now() - SearchTime > 3000)
+          if (thisThread == Threads.main() && now() - SearchTime > 3000)
               sync_cout << "info depth " << depth / ONE_PLY
                         << " currmove " << UCI::move(move, pos.is_chess960())
                         << " currmovenumber " << moveCount + PVIdx << sync_endl;
@@ -1373,7 +1373,7 @@ moves_loop: // When in check and at SpNode search starts from here
   Move Skill::pick_best(size_t multiPV) {
 
     // PRNG sequence should be non-deterministic, so we seed it with the time at init
-    static PRNG rng(Time::now());
+    static PRNG rng(now());
 
     // RootMoves are already sorted by score in descending order
     int variance = std::min(RootMoves[0].score - RootMoves[multiPV - 1].score, PawnValueMg);
@@ -1407,7 +1407,7 @@ moves_loop: // When in check and at SpNode search starts from here
 string UCI::pv(const Position& pos, Depth depth, Value alpha, Value beta) {
 
   std::stringstream ss;
-  Time::point elapsed = Time::now() - SearchTime + 1;
+  TimePoint elapsed = now() - SearchTime + 1;
   size_t multiPV = std::min((size_t)Options["MultiPV"], RootMoves.size());
   int selDepth = 0;
 
@@ -1659,12 +1659,12 @@ void Thread::idle_loop() {
 
 void check_time() {
 
-  static Time::point lastInfoTime = Time::now();
-  Time::point elapsed = Time::now() - SearchTime;
+  static TimePoint lastInfoTime = now();
+  TimePoint elapsed = now() - SearchTime;
 
-  if (Time::now() - lastInfoTime >= 1000)
+  if (now() - lastInfoTime >= 1000)
   {
-      lastInfoTime = Time::now();
+      lastInfoTime = now();
       dbg_print();
   }
 
index c7a4520..e233c1c 100644 (file)
@@ -102,7 +102,7 @@ extern volatile SignalsType Signals;
 extern LimitsType Limits;
 extern RootMoveVector RootMoves;
 extern Position RootPos;
-extern Time::point SearchTime;
+extern TimePoint SearchTime;
 extern StateStackPtr SetupStates;
 
 void init();
index 1217e3a..ba5d13d 100644 (file)
@@ -353,7 +353,7 @@ void ThreadPool::start_thinking(const Position& pos, const LimitsType& limits,
                                 StateStackPtr& states) {
   wait_for_think_finished();
 
-  SearchTime = Time::now(); // As early as possible
+  SearchTime = now(); // As early as possible
 
   Signals.stopOnPonderhit = Signals.firstRootMove = false;
   Signals.stop = Signals.failedLowAtRoot = false;