- const int size = Threads[i]->splitPointsSize; // Local copy
- sp = size ? &Threads[i]->splitPoints[size - 1] : nullptr;
+ assert(this != th);
+ assert(!(this_sp && this_sp->slavesMask.none()));
+ assert(Threads.size() > 2);
+
+ // Prefer to join to SP with few parents to reduce the probability
+ // that a cut-off occurs above us, and hence we waste our work.
+ int level = -1;
+ for (SplitPoint* spp = th->activeSplitPoint; spp; spp = spp->parentSplitPoint)
+ level++;
+
+ int score = level * 256 * 256 + (int)sp->slavesMask.count() * 256 - sp->depth * 1;