mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-20 00:56:39 +08:00
Introduce elapsed_time()
And reformat a bit time manager code. Note that now we set starting search time in think() and no more in ThreadPool::start_thinking(), the added delay is less than 1 msec, so below timer resolution (5msec) and should not affect time lossses ratio. No functional change.
This commit is contained in:
@@ -41,7 +41,6 @@ namespace Search {
|
||||
LimitsType Limits;
|
||||
RootMoveVector RootMoves;
|
||||
Position RootPos;
|
||||
TimePoint SearchTime;
|
||||
StateStackPtr SetupStates;
|
||||
}
|
||||
|
||||
@@ -219,7 +218,7 @@ template uint64_t Search::perft<true>(Position& pos, Depth depth);
|
||||
|
||||
void Search::think() {
|
||||
|
||||
TimeMgr.init(Limits, RootPos.side_to_move(), RootPos.game_ply());
|
||||
TimeMgr.init(Limits, RootPos.side_to_move(), RootPos.game_ply(), now());
|
||||
|
||||
int contempt = Options["Contempt"] * PawnValueEg / 100; // From centipawns
|
||||
DrawValue[ RootPos.side_to_move()] = VALUE_DRAW - Value(contempt);
|
||||
@@ -402,7 +401,7 @@ namespace {
|
||||
// the UI) before a re-search.
|
||||
if ( multiPV == 1
|
||||
&& (bestValue <= alpha || bestValue >= beta)
|
||||
&& now() - SearchTime > 3000)
|
||||
&& TimeMgr.elapsed_time() > 3000)
|
||||
sync_cout << UCI::pv(pos, depth, alpha, beta) << sync_endl;
|
||||
|
||||
// In case of failing low/high increase aspiration window and
|
||||
@@ -433,9 +432,9 @@ namespace {
|
||||
|
||||
if (Signals.stop)
|
||||
sync_cout << "info nodes " << RootPos.nodes_searched()
|
||||
<< " time " << now() - SearchTime << sync_endl;
|
||||
<< " time " << TimeMgr.elapsed_time() << sync_endl;
|
||||
|
||||
else if (PVIdx + 1 == multiPV || now() - SearchTime > 3000)
|
||||
else if (PVIdx + 1 == multiPV || TimeMgr.elapsed_time() > 3000)
|
||||
sync_cout << UCI::pv(pos, depth, alpha, beta) << sync_endl;
|
||||
}
|
||||
|
||||
@@ -462,10 +461,10 @@ namespace {
|
||||
// of the available time has been used or we matched an easyMove
|
||||
// from the previous search and just did a fast verification.
|
||||
if ( RootMoves.size() == 1
|
||||
|| now() - SearchTime > TimeMgr.available_time()
|
||||
|| TimeMgr.elapsed_time() > TimeMgr.available_time()
|
||||
|| ( RootMoves[0].pv[0] == easyMove
|
||||
&& BestMoveChanges < 0.03
|
||||
&& now() - SearchTime > TimeMgr.available_time() / 10))
|
||||
&& TimeMgr.elapsed_time() > TimeMgr.available_time() / 10))
|
||||
{
|
||||
// If we are allowed to ponder do not stop the search now but
|
||||
// keep pondering until the GUI sends "ponderhit" or "stop".
|
||||
@@ -485,7 +484,7 @@ namespace {
|
||||
|
||||
// Clear any candidate easy move that wasn't stable for the last search
|
||||
// iterations; the second condition prevents consecutive fast moves.
|
||||
if (EasyMove.stableCnt < 6 || now() - SearchTime < TimeMgr.available_time())
|
||||
if (EasyMove.stableCnt < 6 || TimeMgr.elapsed_time() < TimeMgr.available_time())
|
||||
EasyMove.clear();
|
||||
|
||||
// If skill level is enabled, swap best PV line with the sub-optimal one
|
||||
@@ -833,7 +832,7 @@ moves_loop: // When in check and at SpNode search starts from here
|
||||
{
|
||||
Signals.firstRootMove = (moveCount == 1);
|
||||
|
||||
if (thisThread == Threads.main() && now() - SearchTime > 3000)
|
||||
if (thisThread == Threads.main() && TimeMgr.elapsed_time() > 3000)
|
||||
sync_cout << "info depth " << depth / ONE_PLY
|
||||
<< " currmove " << UCI::move(move, pos.is_chess960())
|
||||
<< " currmovenumber " << moveCount + PVIdx << sync_endl;
|
||||
@@ -1482,7 +1481,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;
|
||||
TimePoint elapsed = now() - SearchTime + 1;
|
||||
TimePoint elapsed = TimeMgr.elapsed_time() + 1;
|
||||
size_t multiPV = std::min((size_t)Options["MultiPV"], RootMoves.size());
|
||||
int selDepth = 0;
|
||||
|
||||
@@ -1726,7 +1725,7 @@ void Thread::idle_loop() {
|
||||
void check_time() {
|
||||
|
||||
static TimePoint lastInfoTime = now();
|
||||
TimePoint elapsed = now() - SearchTime;
|
||||
TimePoint elapsed = TimeMgr.elapsed_time();
|
||||
|
||||
if (now() - lastInfoTime >= 1000)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user