Пример #1
0
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;
}
Пример #2
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 );
    }
  }
}