]> git.sesse.net Git - stockfish/commitdiff
Always do MaxCardinality checks.
authorGian-Carlo Pascutto <gcp@sjeng.org>
Tue, 7 Nov 2017 08:26:13 +0000 (09:26 +0100)
committerMarco Costalba <mcostalba@users.noreply.github.com>
Wed, 8 Nov 2017 12:45:14 +0000 (13:45 +0100)
Stockfish currently relies on the "filter_root_moves" function also
having the side effect of clamping Cardinality against MaxCardinality
(the actual piece count in the tablebases). So if we skip this function,
we will end up probing in the search even without tablebases installed.

We cannot bail out of this function before this check is done, so move
the MultiPV hack a few lines below.

src/search.cpp

index cf380b3135b190b4c808eafda1ec23934cf08a47..f7efd41c03e628b460f690fed61023a92aa7d854 100644 (file)
@@ -1599,10 +1599,6 @@ void Tablebases::filter_root_moves(Position& pos, Search::RootMoves& rootMoves)
     ProbeDepth = Options["SyzygyProbeDepth"] * ONE_PLY;
     Cardinality = Options["SyzygyProbeLimit"];
 
-    // Don't filter any moves if the user requested analysis on multiple
-    if (Options["MultiPV"] != 1)
-        return;
-
     // Skip TB probing when no TB found: !TBLargest -> !TB::Cardinality
     if (Cardinality > MaxCardinality)
     {
@@ -1613,6 +1609,10 @@ void Tablebases::filter_root_moves(Position& pos, Search::RootMoves& rootMoves)
     if (Cardinality < popcount(pos.pieces()) || pos.can_castle(ANY_CASTLING))
         return;
 
+    // Don't filter any moves if the user requested analysis on multiple
+    if (Options["MultiPV"] != 1)
+        return;
+
     // If the current root position is in the tablebases, then RootMoves
     // contains only moves that preserve the draw or the win.
     RootInTB = root_probe(pos, rootMoves, TB::Score);