// Restricted integer AltAILIF + Delta inference backend. No plasticity or topology mutation after initialization. #pragma once #include #include namespace knp_altai_cuda { class Backend final : public knp::backends::single_threaded_cpu::SingleThreadedCPUBackend { using Base = knp::backends::single_threaded_cpu::SingleThreadedCPUBackend; struct State; std::unique_ptr state_; int device_index_ = 0; void synchronize(); // Mutable CPU iterators are implementation details, not a supported mutation API. using Base::begin_populations; using Base::end_populations; using Base::begin_projections; using Base::end_projections; using Base::load_populations; using Base::load_projections; public: Backend(); ~Backend() override; static std::shared_ptr create(); bool plasticity_supported() const override { return false; } std::vector get_supported_neurons() const override; std::vector get_supported_synapses() const override; std::vector get_supported_population_indexes() const override; std::vector get_supported_projection_indexes() const override; std::vector> get_devices() const override; void select_devices(const std::set &uids) override; void select_device(std::unique_ptr &&device) override; void load_all_populations(const std::vector &) override; void load_all_projections(const std::vector &) override; void remove_populations(const std::vector &) override; void remove_projections(const std::vector &) override; void start_learning() override; void stop_learning() override { Base::stop_learning(); } DataRanges get_network_data() const override; void _step() override; protected: void _init() override; void _uninit() override; }; }