if (thisThread->resetCalls.load(std::memory_order_relaxed))
{
thisThread->resetCalls = false;
- thisThread->callsCnt = 0;
+ // At low node count increase the checking rate to about 0.1% of nodes
+ // otherwise use a default value.
+ thisThread->callsCnt = Limits.nodes ? std::min((int64_t)4096, Limits.nodes / 1024)
+ : 4096;
}
- if (++thisThread->callsCnt > 4096)
+
+ if (--thisThread->callsCnt <= 0)
{
for (Thread* th : Threads)
th->resetCalls = true;
&& !pos.see_ge(move, Value(-35 * lmrDepth * lmrDepth)))
continue;
}
- else if ( depth < 7 * ONE_PLY
- && !extension
- && !pos.see_ge(move, Value(-35 * depth / ONE_PLY * depth / ONE_PLY)))
+ else if (depth < 7 * ONE_PLY && !extension)
+ {
+ Value v = Value(-35 * depth / ONE_PLY * depth / ONE_PLY);
+ if (ss->staticEval != VALUE_NONE)
+ v += ss->staticEval - alpha - 200;
+
+ if (!pos.see_ge(move, v))
continue;
+ }
}
// Speculative prefetch as early as possible