int MaxSearchTime, AbsoluteMaxSearchTime, ExtraSearchTime, ExactMaxTime;
bool UseTimeManagement, InfiniteSearch, PonderSearch, StopOnPonderhit;
bool AbortSearch, Quit;
- bool FailLow;
+ bool AspirationFailLow;
// Show current line?
bool ShowCurrentLine;
// Initialize global search variables
Idle = StopOnPonderhit = AbortSearch = Quit = false;
- FailLow = false;
+ AspirationFailLow = false;
NodesSincePoll = 0;
SearchStartTime = get_system_time();
ExactMaxTime = maxTime;
UseTimeManagement = !ExactMaxTime && !MaxDepth && !MaxNodes && !InfiniteSearch;
// Look for a book move, only during games, not tests
- if (UseTimeManagement && !ponder && get_option_value_bool("OwnBook"))
+ if (UseTimeManagement && get_option_value_bool("OwnBook"))
{
Move bookMove;
if (get_option_value_string("Book File") != OpeningBook.file_name())
bookMove = OpeningBook.get_move(pos);
if (bookMove != MOVE_NONE)
{
+ if (PonderSearch)
+ wait_for_stop_or_ponderhit();
+
cout << "bestmove " << bookMove << endl;
return true;
}
assert(alpha >= oldAlpha);
- FailLow = (alpha == oldAlpha);
+ AspirationFailLow = (alpha == oldAlpha);
- if (FailLow && StopOnPonderhit)
+ if (AspirationFailLow && StopOnPonderhit)
StopOnPonderhit = false;
}
{
search(pos, ss, beta, Min(depth/2, depth-2*OnePly), ply, false, threadID);
ttMove = ss[ply].pv[ply];
- tte = TT.retrieve(pos.get_key());
+ tte = TT.retrieve(posKey);
}
// Initialize a MovePicker object for the current position, and prepare
return;
bool stillAtFirstMove = RootMoveNumber == 1
- && !FailLow
+ && !AspirationFailLow
&& t > MaxSearchTime + ExtraSearchTime;
bool noMoreTime = t > AbsoluteMaxSearchTime
PonderSearch = false;
bool stillAtFirstMove = RootMoveNumber == 1
- && !FailLow
+ && !AspirationFailLow
&& t > MaxSearchTime + ExtraSearchTime;
bool noMoreTime = t > AbsoluteMaxSearchTime
for (int i = 0; i < ActiveThreads; i++)
if (i == master || splitPoint->slaves[i])
{
- memcpy(splitPoint->sstack[i] + ply - 1, sstck + ply - 1, 3 * sizeof(SearchStack));
+ memcpy(splitPoint->sstack[i] + ply - 1, sstck + ply - 1, 4 * sizeof(SearchStack));
Threads[i].workIsWaiting = true; // This makes the slave to exit from idle_loop()
}