1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-05-01 01:03:09 +00:00

Fix random moves when time < 10ms

In case we have less then 10ms to think as soon as
we wake up the timer, it immediately fires and calls
check_time() where due to condition:

elapsed > TimeMgr.maximum_time() - 2 * TimerResolution

the stop flag is set and search returns immediately, without
actually search anything.

Here the somewhat hacky fix is to start the timer after
at least one iteration as been completed.

No functional change.
This commit is contained in:
Marco Costalba 2013-09-10 21:14:09 +02:00
parent 4d90aeb0ab
commit 49e110c52b

View file

@ -242,13 +242,11 @@ void Search::think() {
Threads.sleepWhileIdle = Options["Idle Threads Sleep"];
// Set best timer interval to avoid lagging under time pressure. Timer is
// used to check for remaining available thinking time.
// used to check for remaining available thinking time. Timer will be started
// at the end of first iteration to avoid returning with a random move.
Threads.timer->msec =
Limits.use_time_management() ? std::min(100, std::max(TimeMgr.available_time() / 16, TimerResolution)) :
Limits.nodes ? 2 * TimerResolution
: 100;
Threads.timer->notify_one(); // Wake up the recurring timer
Limits.nodes ? 2 * TimerResolution : 100;
id_loop(RootPos); // Let's start searching !
@ -402,6 +400,10 @@ namespace {
assert(alpha >= -VALUE_INFINITE && beta <= VALUE_INFINITE);
}
// Wake up the recurring timer after first iteration is finished
if (depth == 1)
Threads.timer->notify_one();
// Sort the PV lines searched so far and update the GUI
std::stable_sort(RootMoves.begin(), RootMoves.begin() + PVIdx + 1);