X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fsearch.cpp;h=99f3614d1ea5f27c78d5c53eebb9d2062d69bd68;hb=4d170725ab0ea2d219ff402495a1c541e7f75d6c;hp=7699a74658acbab8207b9b66172696f816f05354;hpb=adb43cc0cca109c1d95fa8032e717762faa01563;p=stockfish diff --git a/src/search.cpp b/src/search.cpp index 7699a746..99f3614d 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -296,8 +296,6 @@ namespace { template Depth extension(const Position& pos, Move m, bool captureOrPromotion, bool moveIsCheck, bool singleEvasion, bool mateThreat, bool* dangerous); - void update_pv(SearchStack* ss); - void sp_update_pv(SearchStack* pss, SearchStack* ss); bool connected_moves(const Position& pos, Move m1, Move m2); bool value_is_mate(Value value); bool move_is_killer(Move m, SearchStack* ss); @@ -314,7 +312,7 @@ namespace { void ponderhit(); void wait_for_stop_or_ponderhit(); void init_ss_array(SearchStack* ss, int size); - void print_pv_info(const Position& pos, Move* ss, Value alpha, Value beta, Value value); + void print_pv_info(const Position& pos, Move pv[], Value alpha, Value beta, Value value); #if !defined(_MSC_VER) void *init_thread(void *threadID); @@ -937,9 +935,8 @@ namespace { // We are failing high and going to do a research. It's important to update // the score before research in case we run out of time while researching. rml.set_move_score(i, value); - update_pv(ss); - pv[0] = ss->bestMove; - TT.extract_pv(pos, pv, PLY_MAX); + ss->bestMove = move; + TT.extract_pv(pos, move, pv, PLY_MAX); rml.set_move_pv(i, pv); // Print information to the standard output @@ -978,9 +975,8 @@ namespace { // Update PV rml.set_move_score(i, value); - update_pv(ss); - pv[0] = ss->bestMove; - TT.extract_pv(pos, pv, PLY_MAX); + ss->bestMove = move; + TT.extract_pv(pos, move, pv, PLY_MAX); rml.set_move_pv(i, pv); if (MultiPV == 1) @@ -1414,10 +1410,10 @@ namespace { if (PvNode && value < beta) // This guarantees that always: alpha < beta alpha = value; - update_pv(ss); - if (value == value_mate_in(ply + 1)) ss->mateKiller = move; + + ss->bestMove = move; } } @@ -1617,7 +1613,7 @@ namespace { if (value > alpha) { alpha = value; - update_pv(ss); + ss->bestMove = move; } } } @@ -1798,7 +1794,7 @@ namespace { if (PvNode && value < sp->beta) // This guarantees that always: sp->alpha < sp->beta sp->alpha = value; - sp_update_pv(sp->parentSstack, ss); + sp->parentSstack->bestMove = ss->bestMove = move; } } } @@ -1810,25 +1806,6 @@ namespace { lock_release(&(sp->lock)); } - // update_pv() is called whenever a search returns a value > alpha. - // It updates the PV in the SearchStack object corresponding to the - // current node. - - void update_pv(SearchStack* ss) { - - ss->bestMove = ss->currentMove; - } - - - // sp_update_pv() is a variant of update_pv for use at split points. The - // difference between the two functions is that sp_update_pv also updates - // the PV at the parent node. - - void sp_update_pv(SearchStack* pss, SearchStack* ss) { - - pss->bestMove = ss->bestMove = ss->currentMove; - } - // connected_moves() tests whether two moves are 'connected' in the sense // that the first move somehow made the second move possible (for instance @@ -2268,29 +2245,28 @@ namespace { // print_pv_info() prints to standard output and eventually to log file information on // the current PV line. It is called at each iteration or after a new pv is found. - void print_pv_info(const Position& pos, Move* pv, Value alpha, Value beta, Value value) { + void print_pv_info(const Position& pos, Move pv[], Value alpha, Value beta, Value value) { cout << "info depth " << Iteration - << " score " << value_to_string(value) - << ((value >= beta) ? " lowerbound" : - ((value <= alpha)? " upperbound" : "")) + << " score " << value_to_string(value) + << (value >= beta ? " lowerbound" : value <= alpha ? " upperbound" : "") << " time " << current_search_time() << " nodes " << TM.nodes_searched() << " nps " << nps() << " pv "; - for (int j = 0; pv[j] != MOVE_NONE && j < PLY_MAX; j++) - cout << pv[j] << " "; + for (Move* m = pv; *m != MOVE_NONE; m++) + cout << *m << " "; cout << endl; if (UseLogFile) { - ValueType type = (value >= beta ? VALUE_TYPE_LOWER - : (value <= alpha ? VALUE_TYPE_UPPER : VALUE_TYPE_EXACT)); + ValueType t = value >= beta ? VALUE_TYPE_LOWER : + value <= alpha ? VALUE_TYPE_UPPER : VALUE_TYPE_EXACT; LogFile << pretty_pv(pos, current_search_time(), Iteration, - TM.nodes_searched(), value, type, pv) << endl; + TM.nodes_searched(), value, t, pv) << endl; } }