uint64_t perft(Position& pos, Depth depth) {
StateInfo st;
- ASSERT_ALIGNED(&st, Eval::NNUE::kCacheLineSize);
+ ASSERT_ALIGNED(&st, Eval::NNUE::CacheLineSize);
uint64_t cnt, nodes = 0;
const bool leaf = (depth == 2);
Move pv[MAX_PLY+1], capturesSearched[32], quietsSearched[64];
StateInfo st;
- ASSERT_ALIGNED(&st, Eval::NNUE::kCacheLineSize);
+ ASSERT_ALIGNED(&st, Eval::NNUE::CacheLineSize);
TTEntry* tte;
Key posKey;
value = bestValue;
singularQuietLMR = moveCountPruning = false;
+ // Indicate PvNodes that will probably fail low if the node was searched
+ // at a depth equal or greater than the current depth, and the result of this search was a fail low.
+ bool likelyFailLow = PvNode
+ && ttMove
+ && (tte->bound() & BOUND_UPPER)
+ && tte->depth() >= depth;
+
// Mark this node as being searched
ThreadHolding th(thisThread, posKey, ss->ply);
movedPiece = pos.moved_piece(move);
givesCheck = pos.gives_check(move);
- // Indicate PvNodes that will probably fail low if node was searched with non-PV search
- // at depth equal or greater to current depth and result of this search was far below alpha
- bool likelyFailLow = PvNode
- && ttMove
- && (tte->bound() & BOUND_UPPER)
- && ttValue < alpha + 200 + 100 * depth
- && tte->depth() >= depth;
-
// Calculate new depth for this move
newDepth = depth - 1;
{
extension = 1;
singularQuietLMR = !ttCapture;
+ if (!PvNode && value < singularBeta - 140)
+ extension = 2;
}
// Multi-cut pruning
}
}
- // Check extension (~2 Elo)
- else if ( givesCheck
- && (pos.is_discovered_check_on_king(~us, move) || pos.see_ge(move)))
- extension = 1;
-
// Add extension to new depth
newDepth += extension;
|| ss->staticEval + PieceValue[EG][pos.captured_piece()] <= alpha
|| cutNode
|| (!PvNode && !formerPv && captureHistory[movedPiece][to_sq(move)][type_of(pos.captured_piece())] < 3678)
- || thisThread->ttHitAverage < 432 * TtHitAverageResolution * TtHitAverageWindow / 1024))
+ || thisThread->ttHitAverage < 432 * TtHitAverageResolution * TtHitAverageWindow / 1024)
+ && (!PvNode || ss->ply > 1 || thisThread->id() % 4 != 3))
{
Depth r = reduction(improving, depth, moveCount);
Move pv[MAX_PLY+1];
StateInfo st;
- ASSERT_ALIGNED(&st, Eval::NNUE::kCacheLineSize);
+ ASSERT_ALIGNED(&st, Eval::NNUE::CacheLineSize);
TTEntry* tte;
Key posKey;
bool RootMove::extract_ponder_from_tt(Position& pos) {
StateInfo st;
- ASSERT_ALIGNED(&st, Eval::NNUE::kCacheLineSize);
+ ASSERT_ALIGNED(&st, Eval::NNUE::CacheLineSize);
bool ttHit;