--- a/knp/backends/cpu/cpu-multi-threaded-backend/impl/backend.cpp +++ b/knp/backends/cpu/cpu-multi-threaded-backend/impl/backend.cpp @@ -32,6 +32,9 @@ #include #include +#include +#include +#include #include #include @@ -53,10 +56,27 @@ } + +// Experiment-local factory configuration; the original backend is unchanged. +static size_t configured_size(const char* name, size_t fallback, size_t maximum) +{ + const char* value = std::getenv(name); + if (!value || !*value) return fallback; + if (*value < '0' || *value > '9') throw std::invalid_argument(name); + char* end = nullptr; + errno = 0; + const auto parsed = std::strtoull(value, &end, 10); + if (errno || *end || !parsed || parsed > maximum) throw std::invalid_argument(name); + return static_cast(parsed); +} + std::shared_ptr MultiThreadedCPUBackend::create() { SPDLOG_DEBUG("Creating multi-threaded CPU backend instance..."); - return std::make_shared(); + return std::make_shared( + configured_size("KNP_CPU_THREADS", 2, 256), + configured_size("KNP_CPU_POPULATION_PART", 64, 1000000), + configured_size("KNP_CPU_PROJECTION_PART", 8192, 10000000)); } --- a/knp/backends/cpu/cpu-multi-threaded-backend/include/knp/backends/cpu-multi-threaded/backend.h +++ b/knp/backends/cpu/cpu-multi-threaded-backend/include/knp/backends/cpu-multi-threaded/backend.h @@ -79,7 +79,8 @@ */ using SupportedNeurons = boost::mp11::mp_list< knp::neuron_traits::BLIFATNeuron, knp::neuron_traits::SynapticResourceSTDPBLIFATNeuron, - knp::neuron_traits::LIFNeuron>; + knp::neuron_traits::LIFNeuron, + knp::neuron_traits::AltAILIF, knp::neuron_traits::SynapticResourceSTDPAltAILIFNeuron>; /** * @brief List of synapse types supported by the multi-threaded CPU backend.