Makes sure the potential benefit of first touch does not depend on
the order of the UCI commands Threads and Hash, by reallocating the
hash if a Threads is issued. The cost is zeroing the TT once more
than needed. In case the prefered order (first Threads than Hash)
is employed, this amounts to zeroing the default sized TT (16Mb),
which is essentially instantaneous.
Follow up for https://github.com/official-stockfish/Stockfish/pull/1601
where additional data and discussion is available.
Closes https://github.com/official-stockfish/Stockfish/pull/1620
No functional change.
Search::init();
Pawns::init();
Tablebases::init(Options["SyzygyPath"]); // After Bitboards are set
- TT.resize(Options["Hash"]);
Threads.set(Options["Threads"]);
Search::clear(); // After threads are up
#include "thread.h"
#include "uci.h"
#include "syzygy/tbprobe.h"
+#include "tt.h"
ThreadPool Threads; // Global object
push_back(new Thread(size()));
clear();
}
+
+ // Reallocate the hash with the new threadpool size
+ TT.resize(Options["Hash"]);
}
/// ThreadPool::clear() sets threadPool data to initial values.
void TranspositionTable::resize(size_t mbSize) {
- size_t newClusterCount = mbSize * 1024 * 1024 / sizeof(Cluster);
-
- if (newClusterCount == clusterCount)
- return;
-
- clusterCount = newClusterCount;
+ clusterCount = mbSize * 1024 * 1024 / sizeof(Cluster);
free(mem);
mem = malloc(clusterCount * sizeof(Cluster) + CacheLineSize - 1);