From 0b36ba74fc0a80388cac43a35962ffc73c01b071 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Tue, 24 Feb 2015 12:24:53 +0100 Subject: [PATCH] Don't assume the type of Time::point But instead use the proper definition. Also rewrite chrono functions while there. No functional change. --- src/benchmark.cpp | 4 ++-- src/misc.cpp | 9 --------- src/misc.h | 9 +++++---- src/search.cpp | 24 ++++++++++++------------ src/search.h | 2 +- src/thread.cpp | 2 +- 6 files changed, 21 insertions(+), 29 deletions(-) diff --git a/src/benchmark.cpp b/src/benchmark.cpp index cf0a315c..e27e81fe 100644 --- a/src/benchmark.cpp +++ b/src/benchmark.cpp @@ -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 diff --git a/src/misc.cpp b/src/misc.cpp index daafd3fb..f09694cc 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -17,7 +17,6 @@ along with this program. If not, see . */ -#include #include #include #include @@ -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(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]; } diff --git a/src/misc.h b/src/misc.h index 28bf0452..37f1e706 100644 --- a/src/misc.h +++ b/src/misc.h @@ -21,6 +21,7 @@ #define MISC_H_INCLUDED #include +#include #include #include #include @@ -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::steady_clock::now().time_since_epoch()).count(); } - template struct HashTable { Entry* operator[](Key key) { return &table[(uint32_t)key & (Size - 1)]; } diff --git a/src/search.cpp b/src/search.cpp index 5dacc877..a6f4d6bd 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -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(); } diff --git a/src/search.h b/src/search.h index c7a45208..e233c1c8 100644 --- a/src/search.h +++ b/src/search.h @@ -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(); diff --git a/src/thread.cpp b/src/thread.cpp index 1217e3ab..ba5d13d5 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -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; -- 2.39.2