1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 16:53:09 +00:00

Correctly implementg selDepth feature

Send to GUI the deepest search depth apart from
qsearch of the PV line.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2011-04-19 10:24:43 +02:00
parent fdc9f8cbd7
commit 2c317d7b28
2 changed files with 27 additions and 13 deletions

View file

@ -64,6 +64,7 @@ namespace {
static storage duration are automatically set to zero before enter main()
*/
public:
Thread& operator[](int threadID) { return threads[threadID]; }
void init_threads();
void exit_threads();
@ -117,7 +118,7 @@ namespace {
void extract_pv_from_tt(Position& pos);
void insert_pv_in_tt(Position& pos);
std::string pv_info_to_uci(Position& pos, int depth, Value alpha, Value beta, int pvIdx);
std::string pv_info_to_uci(Position& pos, int depth, int selDepth, Value alpha, Value beta, int pvIdx);
int64_t nodes;
Value pv_score;
@ -505,9 +506,12 @@ bool think(Position& pos, bool infinite, bool ponder, int time[], int increment[
ThreadsMgr.read_uci_options();
init_eval(ThreadsMgr.active_threads());
// Wake up needed threads. Main thread, with threadID == 0, is always active
for (int i = 1; i < ThreadsMgr.active_threads(); i++)
// Wake up needed threads and reset maxPly counter
for (int i = 0; i < ThreadsMgr.active_threads(); i++)
{
ThreadsMgr.wake_sleeping_thread(i);
ThreadsMgr[i].maxPly = 0;
}
// Set thinking time
int myTime = time[pos.side_to_move()];
@ -595,7 +599,7 @@ namespace {
SearchStack ss[PLY_MAX_PLUS_2];
Value bestValues[PLY_MAX_PLUS_2];
int bestMoveChanges[PLY_MAX_PLUS_2];
int depth, aspirationDelta;
int depth, selDepth, aspirationDelta;
Value value, alpha, beta;
Move bestMove, easyMove, skillBest, skillPonder;
@ -687,9 +691,15 @@ namespace {
if (SkillLevelEnabled && depth == 1 + SkillLevel)
do_skill_level(&skillBest, &skillPonder);
// Retrieve max searched depth among threads
selDepth = 0;
for (int i = 0; i < ThreadsMgr.active_threads(); i++)
if (ThreadsMgr[i].maxPly > selDepth)
selDepth = ThreadsMgr[i].maxPly;
// Send PV line to GUI and to log file
for (int i = 0; i < Min(UCIMultiPV, (int)Rml.size()); i++)
cout << Rml[i].pv_info_to_uci(pos, depth, alpha, beta, i) << endl;
cout << Rml[i].pv_info_to_uci(pos, depth, selDepth, alpha, beta, i) << endl;
if (UseLogFile)
LogFile << pretty_pv(pos, depth, value, current_search_time(), Rml[0].pv) << endl;
@ -792,6 +802,10 @@ namespace {
isCheck = pos.is_check();
ss->ply = (ss-1)->ply + 1;
// Used to send selDepth info to GUI
if (PvNode && ThreadsMgr[threadID].maxPly < ss->ply)
ThreadsMgr[threadID].maxPly = ss->ply;
if (SpNode)
{
sp = ss->sp;
@ -2483,21 +2497,20 @@ split_point_start: // At split points actual search starts from here
// pv_info_to_uci() returns a string with information on the current PV line
// formatted according to UCI specification.
std::string RootMove::pv_info_to_uci(Position& pos, int depth, Value alpha,
std::string RootMove::pv_info_to_uci(Position& pos, int depth, int selDepth, Value alpha,
Value beta, int pvIdx) {
std::stringstream s, l;
Move* m = pv;
while (*m != MOVE_NONE)
l << *m++ << " ";
std::stringstream s;
s << "info depth " << depth
<< " seldepth " << int(m - pv)
<< " seldepth " << selDepth
<< " multipv " << pvIdx + 1
<< " score " << value_to_uci(pv_score)
<< (pv_score >= beta ? " lowerbound" : pv_score <= alpha ? " upperbound" : "")
<< speed_to_uci(pos.nodes_searched())
<< " pv " << l.str();
<< " pv ";
for (Move* m = pv; *m != MOVE_NONE; m++)
s << *m << " ";
return s.str();
}

View file

@ -68,6 +68,7 @@ enum ThreadState
};
struct Thread {
int maxPly;
Lock sleepLock;
WaitCondition sleepCond;
volatile ThreadState state;