avoid modify_and_replicate for first load

We call modify_and_replicate in load_networks, but this is quite inefficient.

closes https://github.com/official-stockfish/Stockfish/pull/6574

No functional change
This commit is contained in:
anematode
2026-02-13 07:06:33 +01:00
committed by Joost VandeVondele
parent b248d689a8
commit b808fd3d55
2 changed files with 18 additions and 16 deletions
+13 -12
View File
@@ -63,10 +63,7 @@ Engine::Engine(std::optional<std::string> path) :
numaContext(NumaConfig::from_system(DefaultNumaPolicy)),
states(new std::deque<StateInfo>(1)),
threads(),
networks(numaContext,
// Heap-allocate because sizeof(NN::Networks) is large
std::make_unique<NN::Networks>(NN::EvalFile{EvalFileDefaultNameBig, "None", ""},
NN::EvalFile{EvalFileDefaultNameSmall, "None", ""})) {
networks(numaContext, get_default_networks()) {
pos.set(StartFEN, false, &states->back());
@@ -147,7 +144,8 @@ Engine::Engine(std::optional<std::string> path) :
return std::nullopt;
}));
load_networks();
threads.clear();
threads.ensure_network_replicated();
resize_threads();
}
@@ -294,13 +292,16 @@ void Engine::verify_networks() const {
}
}
void Engine::load_networks() {
networks.modify_and_replicate([this](NN::Networks& networks_) {
networks_.big.load(binaryDirectory, options["EvalFile"]);
networks_.small.load(binaryDirectory, options["EvalFileSmall"]);
});
threads.clear();
threads.ensure_network_replicated();
std::unique_ptr<Eval::NNUE::Networks> Engine::get_default_networks() const {
auto networks_ =
std::make_unique<NN::Networks>(NN::EvalFile{EvalFileDefaultNameBig, "None", ""},
NN::EvalFile{EvalFileDefaultNameSmall, "None", ""});
networks_->big.load(binaryDirectory, "");
networks_->small.load(binaryDirectory, "");
return networks_;
}
void Engine::load_big_network(const std::string& file) {