Improvements for tablebase code
authorFabian Fichter <ianfab@users.noreply.github.com>
Thu, 1 Aug 2019 21:32:14 +0000 (23:32 +0200)
committerFabian Fichter <ianfab@users.noreply.github.com>
Thu, 1 Aug 2019 21:32:14 +0000 (23:32 +0200)
- Speed up loading of tablebases.
- Disable loading for large-board version.
- Prevent invalid usage for variants.

src/position.cpp
src/search.cpp
src/syzygy/tbprobe.cpp

index 37bbfc8..1111530 100644 (file)
@@ -113,6 +113,7 @@ std::ostream& operator<<(std::ostream& os, const Position& pos) {
       os << UCI::square(pos, pop_lsb(&b)) << " ";
 
   if (    int(Tablebases::MaxCardinality) >= popcount(pos.pieces())
+      && Options["UCI_Variant"] == "chess"
       && !pos.can_castle(ANY_CASTLING))
   {
       StateInfo st;
index 4a98a4a..c269024 100644 (file)
@@ -706,6 +706,7 @@ namespace {
         if (    piecesCount <= TB::Cardinality
             && (piecesCount <  TB::Cardinality || depth >= TB::ProbeDepth)
             &&  pos.rule50_count() == 0
+            &&  Options["UCI_Variant"] == "chess"
             && !pos.can_castle(ANY_CASTLING))
         {
             TB::ProbeState err;
index f877276..a39b17d 100644 (file)
@@ -1260,6 +1260,11 @@ void Tablebases::init(const std::string& paths) {
     MaxCardinality = 0;
     TBFile::Paths = paths;
 
+#ifdef LARGEBOARDS
+    // Tablebases are not working for large-board version
+    return;
+#endif
+
     if (paths.empty() || paths == "<empty>")
         return;
 
@@ -1358,14 +1363,14 @@ void Tablebases::init(const std::string& paths) {
         }
 
     // Add entries in TB tables if the corresponding ".rtbw" file exsists
-    for (PieceType p1 = PAWN; p1 < KING; ++p1) {
+    for (PieceType p1 = PAWN; p1 <= QUEEN; ++p1) {
         TBTables.add({KING, p1, KING});
 
         for (PieceType p2 = PAWN; p2 <= p1; ++p2) {
             TBTables.add({KING, p1, p2, KING});
             TBTables.add({KING, p1, KING, p2});
 
-            for (PieceType p3 = PAWN; p3 < KING; ++p3)
+            for (PieceType p3 = PAWN; p3 <= QUEEN; ++p3)
                 TBTables.add({KING, p1, p2, KING, p3});
 
             for (PieceType p3 = PAWN; p3 <= p2; ++p3) {
@@ -1377,11 +1382,11 @@ void Tablebases::init(const std::string& paths) {
                     for (PieceType p5 = PAWN; p5 <= p4; ++p5)
                         TBTables.add({KING, p1, p2, p3, p4, p5, KING});
 
-                    for (PieceType p5 = PAWN; p5 < KING; ++p5)
+                    for (PieceType p5 = PAWN; p5 <= QUEEN; ++p5)
                         TBTables.add({KING, p1, p2, p3, p4, KING, p5});
                 }
 
-                for (PieceType p4 = PAWN; p4 < KING; ++p4) {
+                for (PieceType p4 = PAWN; p4 <= QUEEN; ++p4) {
                     TBTables.add({KING, p1, p2, p3, KING, p4});
 
                     for (PieceType p5 = PAWN; p5 <= p4; ++p5)