diff --git a/src/search.cpp b/src/search.cpp index 1e70be60..7873e7dc 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -75,9 +75,6 @@ namespace { int FutilityMoveCounts[2][16]; // [improving][depth] int Reductions[2][2][64][64]; // [pv][improving][depth][moveNumber] - // Threshold used for countermoves based pruning - const int CounterMovePruneThreshold = 0; - template Depth reduction(bool i, Depth d, int mn) { return Reductions[PvNode][i][std::min(d / ONE_PLY, 63)][std::min(mn, 63)] * ONE_PLY; } @@ -219,16 +216,7 @@ void Search::clear() { TT.clear(); for (Thread* th : Threads) - { - th->counterMoves.fill(MOVE_NONE); - th->mainHistory.fill(0); - - for (auto& to : th->contHistory) - for (auto& h : to) - h.fill(0); - - th->contHistory[NO_PIECE][0].fill(CounterMovePruneThreshold - 1); - } + th->clear(); Threads.main()->callsCnt = 0; Threads.main()->previousScore = VALUE_INFINITE; diff --git a/src/search.h b/src/search.h index 2e08b550..694dd643 100644 --- a/src/search.h +++ b/src/search.h @@ -31,6 +31,10 @@ class Position; namespace Search { +/// Threshold used for countermoves based pruning +const int CounterMovePruneThreshold = 0; + + /// Stack struct keeps track of the information we need to remember from nodes /// shallower and deeper in the tree during the search. Each search thread has /// its own array of Stack objects, indexed by the current ply. diff --git a/src/thread.cpp b/src/thread.cpp index 208cb0b1..d095aefe 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -35,6 +35,7 @@ ThreadPool Threads; // Global object Thread::Thread(size_t n) : idx(n), stdThread(&Thread::idle_loop, this) { wait_for_search_finished(); + clear(); // Zero-init histories (based on std::array) } @@ -51,6 +52,20 @@ Thread::~Thread() { } +/// Thread::clear() reset histories, usually before a new game + +void Thread::clear() { + + counterMoves.fill(MOVE_NONE); + mainHistory.fill(0); + + for (auto& to : contHistory) + for (auto& h : to) + h.fill(0); + + contHistory[NO_PIECE][0].fill(Search::CounterMovePruneThreshold - 1); +} + /// Thread::start_searching() wakes up the thread that will start the search void Thread::start_searching() { diff --git a/src/thread.h b/src/thread.h index 8c0a6665..093b9512 100644 --- a/src/thread.h +++ b/src/thread.h @@ -52,6 +52,7 @@ public: explicit Thread(size_t); virtual ~Thread(); virtual void search(); + void clear(); void idle_loop(); void start_searching(); void wait_for_search_finished();