mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 17:19:36 +00:00
Change slave_available() API
To return a pointer to the available thread instead of a bool. This allows to simplify the core loop in split(). No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
88c3670edf
commit
14c2c1395b
3 changed files with 12 additions and 15 deletions
|
@ -1025,7 +1025,7 @@ split_point_start: // At split points actual search starts from here
|
||||||
// Step 19. Check for splitting the search
|
// Step 19. Check for splitting the search
|
||||||
if ( !SpNode
|
if ( !SpNode
|
||||||
&& depth >= Threads.minimumSplitDepth
|
&& depth >= Threads.minimumSplitDepth
|
||||||
&& Threads.slave_available(thisThread)
|
&& Threads.available_slave(thisThread)
|
||||||
&& thisThread->splitPointsSize < MAX_SPLITPOINTS_PER_THREAD)
|
&& thisThread->splitPointsSize < MAX_SPLITPOINTS_PER_THREAD)
|
||||||
{
|
{
|
||||||
assert(bestValue < beta);
|
assert(bestValue < beta);
|
||||||
|
|
|
@ -229,13 +229,13 @@ void ThreadPool::read_uci_options() {
|
||||||
// slave_available() tries to find an idle thread which is available as a slave
|
// slave_available() tries to find an idle thread which is available as a slave
|
||||||
// for the thread 'master'.
|
// for the thread 'master'.
|
||||||
|
|
||||||
bool ThreadPool::slave_available(Thread* master) const {
|
Thread* ThreadPool::available_slave(Thread* master) const {
|
||||||
|
|
||||||
for (const_iterator it = begin(); it != end(); ++it)
|
for (const_iterator it = begin(); it != end(); ++it)
|
||||||
if ((*it)->is_available_to(master))
|
if ((*it)->is_available_to(master))
|
||||||
return true;
|
return *it;
|
||||||
|
|
||||||
return false;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -290,18 +290,15 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes
|
||||||
activeSplitPoint = &sp;
|
activeSplitPoint = &sp;
|
||||||
|
|
||||||
size_t slavesCnt = 1; // This thread is always included
|
size_t slavesCnt = 1; // This thread is always included
|
||||||
|
Thread* slave;
|
||||||
|
|
||||||
for (ThreadPool::iterator it = Threads.begin(); it != Threads.end() && !Fake; ++it)
|
while ( (slave = Threads.available_slave(this)) != NULL
|
||||||
|
&& ++slavesCnt <= Threads.maxThreadsPerSplitPoint && !Fake)
|
||||||
{
|
{
|
||||||
Thread* slave = *it;
|
sp.slavesMask |= 1ULL << slave->idx;
|
||||||
|
slave->activeSplitPoint = &sp;
|
||||||
if (slave->is_available_to(this) && ++slavesCnt <= Threads.maxThreadsPerSplitPoint)
|
slave->searching = true; // Slave leaves idle_loop()
|
||||||
{
|
slave->notify_one(); // Could be sleeping
|
||||||
sp.slavesMask |= 1ULL << slave->idx;
|
|
||||||
slave->activeSplitPoint = &sp;
|
|
||||||
slave->searching = true; // Slave leaves idle_loop()
|
|
||||||
slave->notify_one(); // Could be sleeping
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sp.mutex.unlock();
|
sp.mutex.unlock();
|
||||||
|
|
|
@ -149,7 +149,7 @@ struct ThreadPool : public std::vector<Thread*> {
|
||||||
|
|
||||||
MainThread* main_thread() { return static_cast<MainThread*>((*this)[0]); }
|
MainThread* main_thread() { return static_cast<MainThread*>((*this)[0]); }
|
||||||
void read_uci_options();
|
void read_uci_options();
|
||||||
bool slave_available(Thread* master) const;
|
Thread* available_slave(Thread* master) const;
|
||||||
void wait_for_think_finished();
|
void wait_for_think_finished();
|
||||||
void start_thinking(const Position&, const Search::LimitsType&,
|
void start_thinking(const Position&, const Search::LimitsType&,
|
||||||
const std::vector<Move>&, Search::StateStackPtr&);
|
const std::vector<Move>&, Search::StateStackPtr&);
|
||||||
|
|
Loading…
Add table
Reference in a new issue