mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-20 09:06:45 +08:00
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.
This commit is contained in:
@@ -1604,7 +1604,12 @@ void Thread::idle_loop() {
|
|||||||
&& sp->slavesCount < MAX_SLAVES_PER_SPLITPOINT
|
&& sp->slavesCount < MAX_SLAVES_PER_SPLITPOINT
|
||||||
&& available_to(Threads[i]))
|
&& 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)
|
if (score < bestScore)
|
||||||
{
|
{
|
||||||
@@ -1618,7 +1623,7 @@ void Thread::idle_loop() {
|
|||||||
if (bestSp)
|
if (bestSp)
|
||||||
{
|
{
|
||||||
sp = bestSp;
|
sp = bestSp;
|
||||||
|
|
||||||
// Recheck the conditions under lock protection
|
// Recheck the conditions under lock protection
|
||||||
Threads.mutex.lock();
|
Threads.mutex.lock();
|
||||||
sp->mutex.lock();
|
sp->mutex.lock();
|
||||||
|
|||||||
@@ -154,7 +154,6 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes
|
|||||||
|
|
||||||
sp.masterThread = this;
|
sp.masterThread = this;
|
||||||
sp.parentSplitPoint = activeSplitPoint;
|
sp.parentSplitPoint = activeSplitPoint;
|
||||||
sp.spLevel = activeSplitPoint ? activeSplitPoint->spLevel + 1 : 0;
|
|
||||||
sp.slavesMask = 0, sp.slavesMask.set(idx);
|
sp.slavesMask = 0, sp.slavesMask.set(idx);
|
||||||
sp.slavesCount = 1;
|
sp.slavesCount = 1;
|
||||||
sp.depth = depth;
|
sp.depth = depth;
|
||||||
@@ -184,7 +183,7 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes
|
|||||||
|
|
||||||
Thread* slave;
|
Thread* slave;
|
||||||
|
|
||||||
while ( sp.slavesCount < MAX_SLAVES_PER_SPLITPOINT
|
while ( sp.slavesCount < MAX_SLAVES_PER_SPLITPOINT
|
||||||
&& (slave = Threads.available_slave(this)) != NULL)
|
&& (slave = Threads.available_slave(this)) != NULL)
|
||||||
{
|
{
|
||||||
sp.slavesMask.set(slave->idx);
|
sp.slavesMask.set(slave->idx);
|
||||||
|
|||||||
@@ -73,7 +73,6 @@ struct SplitPoint {
|
|||||||
const Position* pos;
|
const Position* pos;
|
||||||
Search::Stack* ss;
|
Search::Stack* ss;
|
||||||
Thread* masterThread;
|
Thread* masterThread;
|
||||||
int spLevel;
|
|
||||||
Depth depth;
|
Depth depth;
|
||||||
Value beta;
|
Value beta;
|
||||||
int nodeType;
|
int nodeType;
|
||||||
|
|||||||
Reference in New Issue
Block a user