1
0
Fork 0

Don't assume the type of Time::point

But instead use the proper definition. Also
rewrite chrono functions while there.

No functional change.
pull/268/head
Marco Costalba 2015-02-24 12:24:53 +01:00
parent 153fb216a1
commit 0b36ba74fc
6 changed files with 21 additions and 29 deletions

View 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

View 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]; }

View 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)]; }

View 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();
}

View 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();

View 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;