void id_loop(Position& pos);
Value value_to_tt(Value v, int ply);
Value value_from_tt(Value v, int ply);
- void update_stats(Position& pos, Stack* ss, Move move, Depth depth, Move* quiets, int quietsCnt);
+ void update_stats(const Position& pos, Stack* ss, Move move, Depth depth, Move* quiets, int quietsCnt);
string uci_pv(const Position& pos, int depth, Value alpha, Value beta);
struct Skill {
for (size_t i = 0; i < Threads.size(); ++i)
Threads[i]->maxPly = 0;
- Threads.sleepWhileIdle = Options["Idle Threads Sleep"];
Threads.timer->run = true;
Threads.timer->notify_one(); // Wake up the recurring timer
id_loop(RootPos); // Let's start searching !
Threads.timer->run = false; // Stop the timer
- Threads.sleepWhileIdle = true; // Send idle threads to sleep
if (Options["Write Search Log"])
{
value = -search<NonPV, false>(pos, ss+1, -(alpha+1), -alpha, d, true);
- // Research at intermediate depth if reduction is very high
+ // Re-search at intermediate depth if reduction is very high
if (value > alpha && ss->reduction >= 4 * ONE_PLY)
{
Depth d2 = std::max(newDepth - 2 * ONE_PLY, ONE_PLY);
// update_stats() updates killers, history, countermoves and followupmoves stats after a fail-high
// of a quiet move.
- void update_stats(Position& pos, Stack* ss, Move move, Depth depth, Move* quiets, int quietsCnt) {
+ void update_stats(const Position& pos, Stack* ss, Move move, Depth depth, Move* quiets, int quietsCnt) {
if (ss->killers[0] != move)
{
{
// If we are not searching, wait for a condition to be signaled instead of
// wasting CPU time polling for work.
- while ((!searching && Threads.sleepWhileIdle) || exit)
+ while (!searching || exit)
{
if (exit)
{
// Wake up the master thread so to allow it to return from the idle
// loop in case we are the last slave of the split point.
- if ( Threads.sleepWhileIdle
- && this != sp->masterThread
+ if ( this != sp->masterThread
&& sp->slavesMask.none())
{
assert(!sp->masterThread->searching);
// After releasing the lock we can't access any SplitPoint related data
// in a safe way because it could have been released under our feet by
- // the sp master. Also accessing other Thread objects is unsafe because
- // if we are exiting there is a chance that they are already freed.
+ // the sp master.
sp->mutex.unlock();
// Try to late join to another split point if none of its slaves has