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;