From: Marco Costalba Date: Tue, 17 Feb 2015 09:10:58 +0000 (+0100) Subject: Compute SplitPoint::spLevel on the fly X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=dccaa145d2b57999aa3e368c7c9203731b4e9685;ds=sidebyside Compute SplitPoint::spLevel on the fly And retire a redundant field. This is important also from a concept point of view becuase we want to keep SMP structures as simple as possible with the only strictly necessary data. Verified with dbg_hit_on(sp->spLevel != level) that the values are 100% the same out of more 50K samples. No functional change. --- diff --git a/src/search.cpp b/src/search.cpp index 29820a1f..dcb89d75 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1604,7 +1604,12 @@ void Thread::idle_loop() { && sp->slavesCount < MAX_SLAVES_PER_SPLITPOINT && available_to(Threads[i])) { - int score = sp->spLevel * 256 * 256 + sp->slavesCount * 256 - sp->depth * 1; + // Compute the recursive split points chain size + int level = -1; + for (SplitPoint* spp = Threads[i]->activeSplitPoint; spp; spp = spp->parentSplitPoint) + level++; + + int score = level * 256 * 256 + sp->slavesCount * 256 - sp->depth * 1; if (score < bestScore) { @@ -1618,7 +1623,7 @@ void Thread::idle_loop() { if (bestSp) { sp = bestSp; - + // Recheck the conditions under lock protection Threads.mutex.lock(); sp->mutex.lock(); diff --git a/src/thread.cpp b/src/thread.cpp index 02cb4562..5c013c6a 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -154,7 +154,6 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes sp.masterThread = this; sp.parentSplitPoint = activeSplitPoint; - sp.spLevel = activeSplitPoint ? activeSplitPoint->spLevel + 1 : 0; sp.slavesMask = 0, sp.slavesMask.set(idx); sp.slavesCount = 1; sp.depth = depth; @@ -184,7 +183,7 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes Thread* slave; - while ( sp.slavesCount < MAX_SLAVES_PER_SPLITPOINT + while ( sp.slavesCount < MAX_SLAVES_PER_SPLITPOINT && (slave = Threads.available_slave(this)) != NULL) { sp.slavesMask.set(slave->idx); diff --git a/src/thread.h b/src/thread.h index 949f87ad..0265ee67 100644 --- a/src/thread.h +++ b/src/thread.h @@ -73,7 +73,6 @@ struct SplitPoint { const Position* pos; Search::Stack* ss; Thread* masterThread; - int spLevel; Depth depth; Value beta; int nodeType;