From d973a91c5ddf58b1f387a9757184974e1b023e1b Mon Sep 17 00:00:00 2001 From: cj5716 <125858804+cj5716@users.noreply.github.com> Date: Wed, 13 Mar 2024 15:55:56 +0800 Subject: [PATCH] Make effort part of RootMove struct. Also includes several small cleanups. Passed STC: LLR: 2.94 (-2.94,2.94) <-1.75,0.25> Total: 71136 W: 18456 L: 18273 D: 34407 Ptnml(0-2): 311, 8014, 18708, 8251, 284 https://tests.stockfishchess.org/tests/view/65f15cfe0ec64f0526c473a0 closes #5114 No functional change --- src/search.cpp | 13 ++++--------- src/search.h | 3 +-- src/thread.cpp | 2 -- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 5cc6796888d..822a0d3734c 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -214,7 +214,7 @@ void Search::Worker::start_searching() { // consumed, the user stops the search, or the maximum search depth is reached. void Search::Worker::iterative_deepening() { - SearchManager* mainThread = (thread_idx == 0 ? main_manager() : nullptr); + SearchManager* mainThread = (is_mainthread() ? main_manager() : nullptr); Move pv[MAX_PLY + 1]; @@ -426,9 +426,7 @@ void Search::Worker::iterative_deepening() { // Do we have time for the next iteration? Can we stop searching now? if (limits.use_time_management() && !threads.stop && !mainThread->stopOnPonderhit) { - auto bestmove = rootMoves[0].pv[0]; - int nodesEffort = effort[bestmove.from_sq()][bestmove.to_sq()] * 100 - / std::max(size_t(1), size_t(nodes)); + int nodesEffort = rootMoves[0].effort * 100 / std::max(size_t(1), size_t(nodes)); double fallingEval = (1067 + 223 * (mainThread->bestPreviousAverageScore - bestValue) + 97 * (mainThread->iterValue[iterIdx] - bestValue)) @@ -450,9 +448,7 @@ void Search::Worker::iterative_deepening() { if (completedDepth >= 10 && nodesEffort >= 97 && mainThread->tm.elapsed(threads.nodes_searched()) > totalTime * 0.739 && !mainThread->ponder) - { threads.stop = true; - } // Stop the search if we have exceeded the totalTime if (mainThread->tm.elapsed(threads.nodes_searched()) > totalTime) @@ -1199,9 +1195,6 @@ Value Search::Worker::search( // Step 19. Undo move pos.undo_move(move); - if (rootNode) - effort[move.from_sq()][move.to_sq()] += nodes - nodeCount; - assert(value > -VALUE_INFINITE && value < VALUE_INFINITE); // Step 20. Check for a new best move @@ -1216,6 +1209,8 @@ Value Search::Worker::search( RootMove& rm = *std::find(thisThread->rootMoves.begin(), thisThread->rootMoves.end(), move); + rm.effort += nodes - nodeCount; + rm.averageScore = rm.averageScore != -VALUE_INFINITE ? (2 * value + rm.averageScore) / 3 : value; diff --git a/src/search.h b/src/search.h index 4908e535c6a..22f75ffd4d8 100644 --- a/src/search.h +++ b/src/search.h @@ -89,6 +89,7 @@ struct RootMove { return m.score != score ? m.score < score : m.previousScore < previousScore; } + uint64_t effort = 0; Value score = -VALUE_INFINITE; Value previousScore = -VALUE_INFINITE; Value averageScore = -VALUE_INFINITE; @@ -230,8 +231,6 @@ class Worker { return static_cast(manager.get()); } - std::array, SQUARE_NB> effort; - LimitsType limits; size_t pvIdx, pvLast; diff --git a/src/thread.cpp b/src/thread.cpp index a3823d0cfd0..d968271f1e6 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -19,7 +19,6 @@ #include "thread.h" #include -#include #include #include #include @@ -211,7 +210,6 @@ void ThreadPool::start_thinking(const OptionsMap& options, th->worker->rootPos.set(pos.fen(), pos.is_chess960(), &th->worker->rootState); th->worker->rootState = setupStates->back(); th->worker->tbConfig = tbConfig; - th->worker->effort = {}; } main_thread()->start_searching();