From 4fc80771ff08fa4f09047e6babe62270b53e5571 Mon Sep 17 00:00:00 2001 From: Disservin Date: Mon, 8 Jan 2024 19:39:51 +0100 Subject: [PATCH] remove globals again --- src/evaluate.cpp | 13 +++++-------- src/evaluate.h | 20 ++++++++++---------- src/main.cpp | 2 +- src/nnue/evaluate_nnue.cpp | 4 +++- src/nnue/evaluate_nnue.h | 6 +++++- src/uci.cpp | 10 +++++----- src/uci.h | 7 +++++++ 7 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 97816560137..8d0d2f7235b 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -62,10 +62,6 @@ namespace Stockfish { namespace Eval { -std::unordered_map EvalFiles = { - {NNUE::Big, {"EvalFile", EvalFileDefaultNameBig, "None"}}, - {NNUE::Small, {"EvalFileSmall", EvalFileDefaultNameSmall, "None"}}}; - // Tries to load a NNUE network at startup time, or when the engine // receives a UCI command "setoption name EvalFile value nn-[a-z0-9]{12}.nnue" @@ -74,9 +70,9 @@ std::unordered_map EvalFiles = { // network may be embedded in the binary), in the active working directory and // in the engine directory. Distro packagers may define the DEFAULT_NNUE_DIRECTORY // variable to have the engine search in a special directory in their distro. -void NNUE::init(const std::string& uciEvalFile, - const std::string& binaryDirectory, - const OptionsMap& Options) { +void NNUE::init(const std::string& binaryDirectory, + const OptionsMap& Options, + std::unordered_map& EvalFiles) { for (auto& [netSize, evalFile] : EvalFiles) { @@ -135,7 +131,8 @@ void NNUE::init(const std::string& uciEvalFile, } // Verifies that the last net used was loaded successfully -void NNUE::verify(const std::string& uciEvalFile, const OptionsMap& Options) { +void NNUE::verify(const OptionsMap& Options, + const std::unordered_map& EvalFiles) { for (const auto& [netSize, evalFile] : EvalFiles) { diff --git a/src/evaluate.h b/src/evaluate.h index f3126fe0b85..76ac4e04950 100644 --- a/src/evaluate.h +++ b/src/evaluate.h @@ -44,23 +44,23 @@ Value evaluate(const Position& pos, const Search::Worker& workerThread); #define EvalFileDefaultNameBig "nn-baff1edbea57.nnue" #define EvalFileDefaultNameSmall "nn-baff1ede1f90.nnue" +struct EvalFile { + std::string option_name; + std::string default_name; + std::string selected_name; +}; + namespace NNUE { enum NetSize : int; -void init(const std::string&, const std::string& binaryDirector, const OptionsMap& Options); -void verify(const std::string&, const OptionsMap& Options); +void init(const std::string& binaryDirector, + const OptionsMap& Options, + std::unordered_map&); +void verify(const OptionsMap& Options, const std::unordered_map&); } // namespace NNUE - -struct EvalFile { - std::string option_name; - std::string default_name; - std::string selected_name; -}; - -extern std::unordered_map EvalFiles; } // namespace Eval } // namespace Stockfish diff --git a/src/main.cpp b/src/main.cpp index f93869c1960..16886d2de0c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -38,7 +38,7 @@ int main(int argc, char* argv[]) { Tune::init(uci.options); Bitboards::init(); Position::init(); - Eval::NNUE::init(uci.options["EvalFile"], uci.workingDirectory(), uci.options); + Eval::NNUE::init(uci.workingDirectory(), uci.options, uci.EvalFiles); uci.loop(); diff --git a/src/nnue/evaluate_nnue.cpp b/src/nnue/evaluate_nnue.cpp index a242989f1ac..be920cfec10 100644 --- a/src/nnue/evaluate_nnue.cpp +++ b/src/nnue/evaluate_nnue.cpp @@ -441,7 +441,9 @@ bool save_eval(std::ostream& stream, NetSize netSize) { } // Save eval, to a file given by its name -bool save_eval(const std::optional& filename, NetSize netSize) { +bool save_eval(const std::optional& filename, + NetSize netSize, + const std::unordered_map& EvalFiles) { std::string actualFilename; std::string msg; diff --git a/src/nnue/evaluate_nnue.h b/src/nnue/evaluate_nnue.h index 6cf80e97ff8..fe8566431d3 100644 --- a/src/nnue/evaluate_nnue.h +++ b/src/nnue/evaluate_nnue.h @@ -26,7 +26,9 @@ #include #include #include +#include +#include "../evaluate.h" #include "../misc.h" #include "../types.h" #include "nnue_architecture.h" @@ -75,7 +77,9 @@ void hint_common_parent_position(const Position& pos); bool load_eval(const std::string name, std::istream& stream, NetSize netSize); bool save_eval(std::ostream& stream, NetSize netSize); -bool save_eval(const std::optional& filename, NetSize netSize); +bool save_eval(const std::optional& filename, + NetSize netSize, + const std::unordered_map&); } // namespace Stockfish::Eval::NNUE diff --git a/src/uci.cpp b/src/uci.cpp index 775bacc7d9a..247b987d5a3 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -74,8 +74,8 @@ UciHandler::UciHandler(int argc, char** argv) : options["SyzygyProbeDepth"] << Option(1, 1, 100); options["Syzygy50MoveRule"] << Option(true); options["SyzygyProbeLimit"] << Option(7, 0, 7); - options["EvalFile"] << Option(EvalFileDefaultNameBig, [this](const Option& o) { - Eval::NNUE::init(o, cli.binaryDirectory, options); + options["EvalFile"] << Option(EvalFileDefaultNameBig, [this](const Option&) { + Eval::NNUE::init(cli.binaryDirectory, options, EvalFiles); }); threads.set({options, threads, tt}); @@ -148,7 +148,7 @@ void UciHandler::loop() { std::string f; if (is >> std::skipws >> f) filename = f; - Eval::NNUE::save_eval(filename, Eval::NNUE::Big); + Eval::NNUE::save_eval(filename, Eval::NNUE::Big, EvalFiles); } else if (token == "--help" || token == "help" || token == "--license" || token == "license") sync_cout @@ -205,7 +205,7 @@ void UciHandler::go(Position& pos, std::istringstream& is, StateListPtr& states) else if (token == "ponder") ponderMode = true; - Eval::NNUE::verify(options["EvalFile"], options); + Eval::NNUE::verify(options, EvalFiles); threads.start_thinking(options, pos, states, limits, ponderMode); } @@ -264,7 +264,7 @@ void UciHandler::trace_eval(Position& pos) { Position p; p.set(pos.fen(), options["UCI_Chess960"], &states->back()); - Eval::NNUE::verify(options["EvalFile"], options); + Eval::NNUE::verify(options, EvalFiles); sync_cout << "\n" << Eval::trace(p, *threads.main_thread()->worker.get()) << sync_endl; } diff --git a/src/uci.h b/src/uci.h index ac1748d06a4..2be1011f3f2 100644 --- a/src/uci.h +++ b/src/uci.h @@ -22,7 +22,9 @@ #include #include #include +#include +#include "evaluate.h" #include "misc.h" #include "position.h" #include "thread.h" @@ -32,6 +34,7 @@ namespace Stockfish { + namespace Search { class Worker; } @@ -64,6 +67,10 @@ class UciHandler { OptionsMap options; std::string currentEvalFileName = "None"; + std::unordered_map EvalFiles = { + {Eval::NNUE::Big, {"EvalFile", EvalFileDefaultNameBig, "None"}}, + {Eval::NNUE::Small, {"EvalFileSmall", EvalFileDefaultNameSmall, "None"}}}; + private: TranspositionTable tt; ThreadPool threads;