Sequencing tweak in tbprobe()
authorAlain SAVARD <support@multicim.com>
Sun, 27 Oct 2019 20:16:26 +0000 (16:16 -0400)
committerStéphane Nicolet <cassio@free.fr>
Tue, 12 Nov 2019 00:18:54 +0000 (01:18 +0100)
Followup of "issue" #2372, which was in fact a small speed-up
proposal by user @d3vv for the probing code of tablebases.

See comments on this issue where it was proven by Alin Savard that the
proposed change is more efficient on average than master on all type of
sequences it will usually be called.

Note that on gcc 4.3, this will produce a bogus warning which was solved
with ulterior gcc versions: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43949

Closes https://github.com/official-stockfish/Stockfish/issues/2372
Closes https://github.com/official-stockfish/Stockfish/pull/2379

Non functional change

src/syzygy/tbprobe.cpp

index a9378b4ba0914ef72a387743f4f53c4063d33b81..c04534921eaaf42c8da8f75b3a02240e2c165287 100644 (file)
@@ -730,8 +730,8 @@ Ret do_probe_table(const Position& pos, T* entry, WDLScore wdl, ProbeState* resu
 
     // Then we reorder the pieces to have the same sequence as the one stored
     // in pieces[i]: the sequence that ensures the best compression.
-    for (int i = leadPawnsCnt; i < size; ++i)
-        for (int j = i; j < size; ++j)
+    for (int i = leadPawnsCnt; i < size - 1; ++i)
+        for (int j = i + 1; j < size; ++j)
             if (d->pieces[i] == pieces[j])
             {
                 std::swap(pieces[i], pieces[j]);