From: Marco Costalba Date: Tue, 4 Sep 2012 07:38:51 +0000 (+0200) Subject: Get rid of struct Time X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=b50ce5ebfbc9f8b043f0d915c47b0ac550d4affc Get rid of struct Time We just need the milliseconds of current system time for our needs. This allows to simplify the API. No functional change. --- diff --git a/src/benchmark.cpp b/src/benchmark.cpp index 5fcaa887..f59ded73 100644 --- a/src/benchmark.cpp +++ b/src/benchmark.cpp @@ -111,7 +111,7 @@ void benchmark(const Position& current, istream& is) { int64_t nodes = 0; Search::StateStackPtr st; - Time time = Time::now(); + Time::point t = Time::now(); for (size_t i = 0; i < fens.size(); i++) { @@ -133,7 +133,7 @@ void benchmark(const Position& current, istream& is) { } } - int e = time.elapsed() + 1; // Assure positive to avoid a 'divide by zero' + int e = Time::now() - t + 1; // Assure positive to avoid a 'divide by zero' cerr << "\n===========================" << "\nTotal time (ms) : " << e diff --git a/src/book.cpp b/src/book.cpp index cdf1bd91..77bdc740 100644 --- a/src/book.cpp +++ b/src/book.cpp @@ -340,7 +340,7 @@ namespace { Book::Book() { - for (int i = Time::now().msec() % 10000; i > 0; i--) + for (int i = Time::now() % 10000; i > 0; i--) RKiss.rand(); // Make random number generation less deterministic } diff --git a/src/misc.cpp b/src/misc.cpp index 75a294a1..fefa8d4f 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -68,6 +68,13 @@ const string engine_info(bool to_uci) { } +/// Convert system time to milliseconds. That's all we need. + +Time::point Time::now() { + sys_time_t t; system_time(&t); return time_to_msec(t); +} + + /// Debug functions used mainly to collect run-time statistics static uint64_t hits[2], means[2]; @@ -201,7 +208,7 @@ void timed_wait(WaitCondition& sleepCond, Lock& sleepLock, int msec) { int tm = msec; #else timespec ts, *tm = &ts; - uint64_t ms = Time::now().msec() + msec; + uint64_t ms = Time::now() + msec; ts.tv_sec = ms / 1000; ts.tv_nsec = (ms % 1000) * 1000000LL; diff --git a/src/misc.h b/src/misc.h index 02ae8b38..9650f06e 100644 --- a/src/misc.h +++ b/src/misc.h @@ -44,15 +44,10 @@ struct Log : public std::ofstream { }; -struct Time { - int64_t msec() const { return time_to_msec(t); } - int elapsed() const { return int(now().msec() - msec()); } - - static Time now() { Time t; system_time(&t.t); return t; } - -private: - sys_time_t t; -}; +namespace Time { + typedef int64_t point; + point now(); +} template diff --git a/src/search.cpp b/src/search.cpp index 827f0747..1cf9428e 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -42,7 +42,7 @@ namespace Search { LimitsType Limits; std::vector RootMoves; Position RootPosition; - Time SearchTime; + Time::point SearchTime; StateStackPtr SetupStates; } @@ -290,7 +290,7 @@ void Search::think() { if (Options["Use Search Log"]) { - int e = SearchTime.elapsed(); + int e = Time::now() - SearchTime; Log log(Options["Search Log Filename"]); log << "Nodes: " << pos.nodes_searched() @@ -398,7 +398,7 @@ namespace { // Send full PV info to GUI if we are going to leave the loop or // if we have a fail high/low and we are deep in the search. - if ((bestValue > alpha && bestValue < beta) || SearchTime.elapsed() > 2000) + if ((bestValue > alpha && bestValue < beta) || Time::now() - SearchTime > 2000) sync_cout << uci_pv(pos, depth, alpha, beta) << sync_endl; // In case of failing high/low increase aspiration window and @@ -431,7 +431,7 @@ namespace { if (!Signals.stop && Options["Use Search Log"]) { Log log(Options["Search Log Filename"]); - log << pretty_pv(pos, depth, bestValue, SearchTime.elapsed(), &RootMoves[0].pv[0]) + log << pretty_pv(pos, depth, bestValue, Time::now() - SearchTime, &RootMoves[0].pv[0]) << std::endl; } @@ -451,14 +451,14 @@ namespace { // Stop search if most of available time is already consumed. We // probably don't have enough time to search the first move at the // next iteration anyway. - if (SearchTime.elapsed() > (TimeMgr.available_time() * 62) / 100) + if (Time::now() - SearchTime > (TimeMgr.available_time() * 62) / 100) stop = true; // Stop search early if one move seems to be much better than others if ( depth >= 12 && !stop && ( (bestMoveNeverChanged && pos.captured_piece_type()) - || SearchTime.elapsed() > (TimeMgr.available_time() * 40) / 100)) + || Time::now() - SearchTime > (TimeMgr.available_time() * 40) / 100)) { Value rBeta = bestValue - EasyMoveMargin; (ss+1)->excludedMove = RootMoves[0].pv[0]; @@ -827,7 +827,7 @@ split_point_start: // At split points actual search starts from here { Signals.firstRootMove = (moveCount == 1); - if (thisThread == Threads.main_thread() && SearchTime.elapsed() > 2000) + if (thisThread == Threads.main_thread() && Time::now() - SearchTime > 2000) sync_cout << "info depth " << depth / ONE_PLY << " currmove " << move_to_uci(move, Chess960) << " currmovenumber " << moveCount + PVIdx << sync_endl; @@ -1494,7 +1494,7 @@ split_point_start: // At split points actual search starts from here static RKISS rk; // PRNG sequence should be not deterministic - for (int i = Time::now().msec() % 50; i > 0; i--) + for (int i = Time::now() % 50; i > 0; i--) rk.rand(); // RootMoves are already sorted by score in descending order @@ -1536,7 +1536,7 @@ split_point_start: // At split points actual search starts from here string uci_pv(const Position& pos, int depth, Value alpha, Value beta) { std::stringstream s; - int t = SearchTime.elapsed(); + int t = Time::now() - SearchTime; int selDepth = 0; for (size_t i = 0; i < Threads.size(); i++) @@ -1749,9 +1749,9 @@ void Thread::idle_loop() { void check_time() { - static Time lastInfoTime = Time::now(); + static Time::point lastInfoTime = Time::now(); - if (lastInfoTime.elapsed() >= 1000) + if (Time::now() - lastInfoTime >= 1000) { lastInfoTime = Time::now(); dbg_print(); @@ -1760,7 +1760,7 @@ void check_time() { if (Limits.ponder) return; - int e = SearchTime.elapsed(); + int e = Time::now() - SearchTime; bool stillAtFirstMove = Signals.firstRootMove && !Signals.failedLowAtRoot && e > TimeMgr.available_time(); diff --git a/src/search.h b/src/search.h index 63b9b326..5f9b74d7 100644 --- a/src/search.h +++ b/src/search.h @@ -99,7 +99,7 @@ extern volatile SignalsType Signals; extern LimitsType Limits; extern std::vector RootMoves; extern Position RootPosition; -extern Time SearchTime; +extern Time::point SearchTime; extern StateStackPtr SetupStates; extern void init();