From b808fd3d55818fc337aa1cd6f3a115c62cd8c230 Mon Sep 17 00:00:00 2001 From: anematode Date: Thu, 29 Jan 2026 18:10:16 -0800 Subject: [PATCH] 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 --- src/engine.cpp | 25 +++++++++++++------------ src/engine.h | 9 +++++---- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/engine.cpp b/src/engine.cpp index dfd2099d1..be0fe3c40 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -63,10 +63,7 @@ Engine::Engine(std::optional path) : numaContext(NumaConfig::from_system(DefaultNumaPolicy)), states(new std::deque(1)), threads(), - networks(numaContext, - // Heap-allocate because sizeof(NN::Networks) is large - std::make_unique(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 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 Engine::get_default_networks() const { + + auto networks_ = + std::make_unique(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) { diff --git a/src/engine.h b/src/engine.h index 10c92d759..92d6282dc 100644 --- a/src/engine.h +++ b/src/engine.h @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -85,10 +86,10 @@ class Engine { // network related - void verify_networks() const; - void load_networks(); - void load_big_network(const std::string& file); - void load_small_network(const std::string& file); + void verify_networks() const; + std::unique_ptr get_default_networks() const; + void load_big_network(const std::string& file); + void load_small_network(const std::string& file); void save_network(const std::pair, std::string> files[2]); // utility functions