mirror of
https://github.com/official-stockfish/Stockfish.git
synced 2026-07-23 13:17:12 +00:00
Merge commit '9032c6cbe74ccf7e8963755501e7e6cc473ae471' into cluster
This is a rather involved merge, since the cluster changes interact fairly badly with the refactoring we're merging: The new code wants the search to know nothing at all about the UCI protocol, it just calls a callback with some worker information (including a Position), which then transforms that information into a InfoFull which is then sent through another callback, upon which UCIEngine converts it to UCI and writes it to stdout. On the other hand, the MPI information wants to exchange PVs between workers at this point, and it wants to use the UCI string as the primary medium of exchange. Position is a lot of work to serialize, so we choose a middle road; we capture the InfoFull by switching out the callback, serializes it, does the MPI exchange on that, unserializes it and then continues with the print callback (if there is new information).
This commit is contained in:
+9
-7
@@ -121,7 +121,8 @@ uint64_t ThreadPool::TT_saves() const { return accumulate(&Search::Worker::TTsav
|
||||
// Creates/destroys threads to match the requested number.
|
||||
// Created and launched threads will immediately go to sleep in idle_loop.
|
||||
// Upon resizing, threads are recreated to allow for binding if necessary.
|
||||
void ThreadPool::set(Search::SharedState sharedState) {
|
||||
void ThreadPool::set(Search::SharedState sharedState,
|
||||
Search::SearchManager::UpdateContext& updateContext) {
|
||||
|
||||
if (threads.size() > 0) // destroy any existing thread(s)
|
||||
{
|
||||
@@ -135,14 +136,15 @@ void ThreadPool::set(Search::SharedState sharedState) {
|
||||
|
||||
if (requested > 0) // create new thread(s)
|
||||
{
|
||||
threads.push_back(new Thread(
|
||||
sharedState, std::unique_ptr<Search::ISearchManager>(new Search::SearchManager()), 0));
|
||||
|
||||
auto manager = std::make_unique<Search::SearchManager>(updateContext);
|
||||
threads.push_back(new Thread(sharedState, std::move(manager), 0));
|
||||
|
||||
while (threads.size() < requested)
|
||||
threads.push_back(new Thread(
|
||||
sharedState, std::unique_ptr<Search::ISearchManager>(new Search::NullSearchManager()),
|
||||
threads.size()));
|
||||
{
|
||||
auto null_manager = std::make_unique<Search::NullSearchManager>();
|
||||
threads.push_back(new Thread(sharedState, std::move(null_manager), threads.size()));
|
||||
}
|
||||
|
||||
clear();
|
||||
|
||||
main_thread()->wait_for_search_finished();
|
||||
|
||||
Reference in New Issue
Block a user