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:
parent
4d90aeb0ab
commit
49e110c52b
1 changed files with 7 additions and 5 deletions
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue