void ConnectionManager::init_() { synapsedict_->clear(); // one list of prototypes per thread std::vector< std::vector< ConnectorModel* > > tmp_proto( net_.get_num_threads() ); prototypes_.swap( tmp_proto ); // (re-)append all synapse prototypes for ( std::vector< ConnectorModel* >::iterator i = pristine_prototypes_.begin(); i != pristine_prototypes_.end(); ++i ) if ( *i != 0 ) { std::string name = ( *i )->get_name(); for ( thread t = 0; t < net_.get_num_threads(); ++t ) prototypes_[ t ].push_back( ( *i )->clone( name ) ); synapsedict_->insert( name, prototypes_[ 0 ].size() - 1 ); } tVSConnector tmp( net_.get_num_threads(), tSConnector() ); connections_.swap( tmp ); num_connections_ = 0; }
void ModelManager::initialize() { if ( subnet_model_ == 0 && siblingcontainer_model_ == 0 && proxynode_model_ == 0 ) { // initialize these models only once outside of the constructor // as the node model asks for the # of threads to setup slipools // but during construction of ModelManager, the KernelManager is not created subnet_model_ = new GenericModel< Subnet >( "subnet" ); subnet_model_->set_type_id( 0 ); pristine_models_.push_back( std::pair< Model*, bool >( subnet_model_, false ) ); siblingcontainer_model_ = new GenericModel< SiblingContainer >( "siblingcontainer" ); siblingcontainer_model_->set_type_id( 1 ); pristine_models_.push_back( std::pair< Model*, bool >( siblingcontainer_model_, true ) ); proxynode_model_ = new GenericModel< proxynode >( "proxynode" ); proxynode_model_->set_type_id( 2 ); pristine_models_.push_back( std::pair< Model*, bool >( proxynode_model_, true ) ); } // Re-create the model list from the clean prototypes for ( index i = 0; i < pristine_models_.size(); ++i ) { if ( pristine_models_[ i ].first != 0 ) { // set the num of threads for the number of sli pools pristine_models_[ i ].first->set_threads(); std::string name = pristine_models_[ i ].first->get_name(); models_.push_back( pristine_models_[ i ].first->clone( name ) ); if ( !pristine_models_[ i ].second ) modeldict_->insert( name, i ); } } // create proxy nodes, one for each thread and model proxy_nodes_.resize( kernel().vp_manager.get_num_threads() ); int proxy_model_id = get_model_id( "proxynode" ); for ( thread t = 0; t < static_cast< thread >( kernel().vp_manager.get_num_threads() ); ++t ) { for ( index i = 0; i < pristine_models_.size(); ++i ) { if ( pristine_models_[ i ].first != 0 ) { Node* newnode = proxynode_model_->allocate( t ); newnode->set_model_id( i ); proxy_nodes_[ t ].push_back( newnode ); } } Node* newnode = proxynode_model_->allocate( t ); newnode->set_model_id( proxy_model_id ); dummy_spike_sources_.push_back( newnode ); } synapsedict_->clear(); // one list of prototypes per thread std::vector< std::vector< ConnectorModel* > > tmp_proto( kernel().vp_manager.get_num_threads() ); prototypes_.swap( tmp_proto ); // (re-)append all synapse prototypes for ( std::vector< ConnectorModel* >::iterator i = pristine_prototypes_.begin(); i != pristine_prototypes_.end(); ++i ) { if ( *i != 0 ) { std::string name = ( *i )->get_name(); for ( thread t = 0; t < static_cast< thread >( kernel().vp_manager.get_num_threads() ); ++t ) prototypes_[ t ].push_back( ( *i )->clone( name ) ); synapsedict_->insert( name, prototypes_[ 0 ].size() - 1 ); } } }