From 9b1708391233fe117b435975197592c067d93cc1 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Tue, 1 Jun 2010 08:21:11 +0100 Subject: [PATCH] Retire init_node() Also don't poll in qsearch() No functional change. Signed-off-by: Marco Costalba --- src/search.cpp | 52 ++++++++++++++------------------------------------ 1 file changed, 14 insertions(+), 38 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index f5e3b2bb..292c35b0 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -296,7 +296,6 @@ namespace { template Depth extension(const Position& pos, Move m, bool captureOrPromotion, bool moveIsCheck, bool singleEvasion, bool mateThreat, bool* dangerous); - void init_node(SearchStack* ss, int ply, int threadID); void update_pv(SearchStack* ss, int ply); void sp_update_pv(SearchStack* pss, SearchStack* ss, int ply); bool connected_moves(const Position& pos, Move m1, Move m2); @@ -1060,9 +1059,16 @@ namespace { if (depth < OnePly) return qsearch(pos, ss, alpha, beta, Depth(0), threadID); - // Step 1. Initialize node and poll - // Polling can abort search. - init_node(ss, ply, threadID); + // Step 1. Initialize node and poll. Polling can abort search + TM.incrementNodeCounter(threadID); + ss->init(ply); + (ss + 2)->initKillers(); + + if (threadID == 0 && ++NodesSincePoll > NodesBetweenPolls) + { + NodesSincePoll = 0; + poll(); + } // Step 2. Check for aborted search and immediate draw if (AbortSearch || TM.thread_should_stop(threadID)) @@ -1446,14 +1452,10 @@ namespace { int ply = pos.ply(); Value oldAlpha = alpha; - // Initialize, and make an early exit in case of an aborted search, - // an instant draw, maximum ply reached, etc. - init_node(ss, ply, threadID); - - // After init_node() that calls poll() - if (AbortSearch || TM.thread_should_stop(threadID)) - return Value(0); + TM.incrementNodeCounter(threadID); + ss->init(ply); + // Check for an instant draw or maximum ply reached if (pos.is_draw() || ply >= PLY_MAX - 1) return VALUE_DRAW; @@ -1771,32 +1773,6 @@ namespace { lock_release(&(sp->lock)); } - // init_node() is called at the beginning of all the search functions - // (search() qsearch(), and so on) and initializes the - // search stack object corresponding to the current node. Once every - // NodesBetweenPolls nodes, init_node() also calls poll(), which polls - // for user input and checks whether it is time to stop the search. - - void init_node(SearchStack* ss, int ply, int threadID) { - - assert(ply >= 0 && ply < PLY_MAX); - assert(threadID >= 0 && threadID < TM.active_threads()); - - TM.incrementNodeCounter(threadID); - - if (threadID == 0) - { - NodesSincePoll++; - if (NodesSincePoll >= NodesBetweenPolls) - { - poll(); - NodesSincePoll = 0; - } - } - ss->init(ply); - (ss + 2)->initKillers(); - } - // update_pv() is called whenever a search returns a value > alpha. // It updates the PV in the SearchStack object corresponding to the // current node. @@ -2530,7 +2506,7 @@ namespace { // Wait for thread termination for (int i = 1; i < MAX_THREADS; i++) - while (threads[i].state != THREAD_TERMINATED); + while (threads[i].state != THREAD_TERMINATED) {} // Now we can safely destroy the locks for (int i = 0; i < MAX_THREADS; i++) -- 2.39.2