NEST main@a355080
 
Loading...
Searching...
No Matches
connection_manager.h
Go to the documentation of this file.
1/*
2 * connection_manager.h
3 *
4 * This file is part of NEST.
5 *
6 * Copyright (C) 2004 The NEST Initiative
7 *
8 * NEST is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * NEST is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with NEST. If not, see <http://www.gnu.org/licenses/>.
20 *
21 */
22
23#ifndef CONNECTION_MANAGER_H
24#define CONNECTION_MANAGER_H
25
26// C++ includes:
27#include <string>
28
29// Includes from libnestutil:
30#include "manager_interface.h"
31#include "stopwatch.h"
32
33// Includes from nestkernel:
34#include "conn_builder.h"
35#include "connection_id.h"
36#include "connector_base.h"
37#include "nest_time.h"
38#include "nest_timeconverter.h"
39#include "nest_types.h"
40#include "node_collection.h"
43#include "source_table.h"
44#include "spike_data.h"
45#include "target_table.h"
47
48
49namespace nest
50{
51class GenericBipartiteConnBuilderFactory;
52class GenericThirdConnBuilderFactory;
53class spikecounter;
54class Node;
55class Event;
56class SecondaryEvent;
57class DelayChecker;
58class GrowthCurve;
59class SpikeData;
60
62{
63 friend class SimulationManager; // update_delay_extrema_
64public:
72
74 ~ConnectionManager() override;
75
76 void initialize( const bool ) override;
77 void finalize( const bool ) override;
78 void set_status( const Dictionary& ) override;
79 void get_status( Dictionary& ) override;
80
81 bool valid_connection_rule( std::string );
82
85 void collect_compressed_spike_data( const size_t tid );
87
91 template < typename ConnBuilder >
92 void register_conn_builder( const std::string& name );
93
97 template < typename ThirdConnBuilder >
98 void register_third_conn_builder( const std::string& name );
99
101 BipartiteConnBuilder* get_conn_builder( const std::string& name,
102 NodeCollectionPTR sources,
103 NodeCollectionPTR targets,
104 ThirdOutBuilder* third_out,
105 const Dictionary& conn_spec,
106 const std::vector< Dictionary >& syn_specs );
107
109 ThirdOutBuilder* get_third_conn_builder( const std::string& name,
110 NodeCollectionPTR sources,
111 NodeCollectionPTR targets,
112 ThirdInBuilder* third_in,
113 const Dictionary& conn_spec,
114 const std::vector< Dictionary >& syn_specs );
115
119 void connect( NodeCollectionPTR sources,
120 NodeCollectionPTR targets,
121 const Dictionary& conn_spec,
122 const std::vector< Dictionary >& syn_specs );
123
145 void connect( const size_t snode_id,
146 Node* target,
147 size_t target_thread,
148 const synindex syn_id,
149 const Dictionary& params,
150 const double delay = numerics::nan,
151 const double weight = numerics::nan );
152
165 bool connect( const size_t snode_id, const size_t target, const Dictionary& params, const synindex syn_id );
166
167 void connect_arrays( const long* sources,
168 const long* targets,
169 const double* weights,
170 const double* delays,
171 const std::vector< std::string >& p_keys,
172 const double* p_values,
173 size_t n,
174 const std::string& syn_model );
175
185 void connect_sonata( const Dictionary& graph_specs, const long hyberslab_size );
186
194 NodeCollectionPTR targets,
195 NodeCollectionPTR third,
196 const Dictionary& connectivity,
197 const Dictionary& third_connectivity,
198 const std::map< std::string, std::vector< Dictionary > >& synapse_specs );
199
205 size_t find_connection( const size_t tid, const synindex syn_id, const size_t snode_id, const size_t tnode_id );
206
207 void disconnect( const size_t tid, const synindex syn_id, const size_t snode_id, const size_t tnode_id );
208
216 ConnectionType connection_required( Node*& source, Node*& target, size_t tid );
217
218 // aka conndatum GetStatus
219 Dictionary get_synapse_status( const size_t source_node_id,
220 const size_t target_node_id,
221 const size_t tid,
222 const synindex syn_id,
223 const size_t lcid ) const;
224
225 // aka conndatum SetStatus
226 void set_synapse_status( const size_t source_node_id,
227 const size_t target_node_id,
228 const size_t tid,
229 const synindex syn_id,
230 const size_t lcid,
231 const Dictionary& dict );
232
251 std::vector< std::deque< ConnectionID > > get_connections( const Dictionary& params );
252
253 void get_connections( std::vector< std::deque< ConnectionID > >& connectome,
254 NodeCollectionPTR source,
255 NodeCollectionPTR target,
256 synindex syn_id,
257 long synapse_label ) const;
258
262 size_t get_num_connections() const;
263
267 size_t get_num_connections( const synindex syn_id ) const;
268
269 void get_sources( const std::vector< size_t >& targets,
270 const size_t syn_id,
271 std::vector< std::vector< size_t > >& sources );
272
273 void get_targets( const std::vector< size_t >& sources,
274 const size_t syn_id,
275 const std::string& post_synaptic_element,
276 std::vector< std::vector< size_t > >& targets );
277
278 const std::vector< Target >& get_remote_targets_of_local_node( const size_t tid, const size_t lid ) const;
279
280 size_t get_target_node_id( const size_t tid, const synindex syn_id, const size_t lcid ) const;
281
282 bool get_device_connected( size_t tid, size_t lcid ) const;
289 void
290 trigger_update_weight( const long vt_node_id, const std::vector< spikecounter >& dopa_spikes, const double t_trig );
291
296 long get_min_delay() const;
297
302 long get_max_delay() const;
303
304 bool get_user_set_delay_extrema() const;
305
306 void send( const size_t tid,
307 const synindex syn_id,
308 const size_t lcid,
309 const std::vector< ConnectorModel* >& cm,
310 Event& e );
311
315 void send_to_devices( const size_t tid, const size_t source_node_id, Event& e );
316 void send_to_devices( const size_t tid, const size_t source_node_id, SecondaryEvent& e );
317
321 void send_from_device( const size_t tid, const size_t ldid, Event& e );
322
326 void send_local( size_t t, Node& source, Event& e );
327
337 void calibrate( const TimeConverter& );
338
341
343 void clean_source_table( const size_t tid );
344
346 void clear_source_table( const size_t tid );
347
349 bool get_keep_source_table() const;
350
352 bool is_source_table_cleared() const;
353
354 void prepare_target_table( const size_t tid );
355
357
359
360 bool get_next_target_data( const size_t tid,
361 const size_t rank_start,
362 const size_t rank_end,
363 size_t& target_rank,
364 TargetData& next_target_data );
365
366 bool fill_target_buffer( const size_t tid,
367 const size_t rank_start,
368 const size_t rank_end,
369 std::vector< TargetData >& send_buffer_target_data,
370 TargetSendBufferPosition& send_buffer_position );
371
372 void reject_last_target_data( const size_t tid );
373
374 void save_source_table_entry_point( const size_t tid );
375
376 void reset_source_table_entry_point( const size_t tid );
377
378 void restore_source_table_entry_point( const size_t tid );
379
380 void add_target( const size_t tid, const size_t target_rank, const TargetData& target_data );
381
387 bool use_compressed_spikes() const;
388
393 void sort_connections( const size_t tid );
394
399 bool connections_have_changed() const;
400
406
412
422 void restructure_connection_tables( const size_t tid );
423
424 void
425 set_source_has_more_targets( const size_t tid, const synindex syn_id, const size_t lcid, const bool more_targets );
426
427 void no_targets_to_process( const size_t tid );
428
429 const std::vector< size_t >&
430 get_secondary_send_buffer_positions( const size_t tid, const size_t lid, const synindex syn_id ) const;
431
435 size_t get_secondary_recv_buffer_position( const size_t tid, const synindex syn_id, const size_t lcid ) const;
436
437 bool deliver_secondary_events( const size_t tid,
438 const bool called_from_wfr_update,
439 std::vector< unsigned int >& recv_buffer );
440
441 void compress_secondary_send_buffer_pos( const size_t tid );
442
443 void resize_connections();
444
446
448
449 bool has_primary_connections() const;
450
451 bool secondary_connections_exist() const;
452
453 size_t get_source_node_id( const size_t tid, const synindex syn_id, const size_t lcid );
454
455 double get_stdp_eps() const;
456
457 void set_stdp_eps( const double stdp_eps );
458
459 // public stop watch for benchmarking purposes
460 // start and stop in high-level connect functions in nestmodule.cpp and nest.cpp
462
463 const std::vector< SpikeData >& get_compressed_spike_data( const synindex syn_id, const size_t idx );
464
467
468private:
469 size_t get_num_target_data( const size_t tid ) const;
470
471 size_t get_num_connections_( const size_t tid, const synindex syn_id ) const;
472
474 void get_connections_( const size_t tid,
475 std::deque< ConnectionID >& conns_in_thread,
476 NodeCollectionPTR source,
477 NodeCollectionPTR target,
478 synindex syn_id,
479 long synapse_label ) const;
480 void get_connections_to_targets_( const size_t tid,
481 std::deque< ConnectionID >& conns_in_thread,
482 NodeCollectionPTR source,
483 NodeCollectionPTR target,
484 synindex syn_id,
485 long synapse_label ) const;
486 void get_connections_from_sources_( const size_t tid,
487 std::deque< ConnectionID >& conns_in_thread,
488 NodeCollectionPTR source,
489 NodeCollectionPTR target,
490 synindex syn_id,
491 long synapse_label ) const;
492
493 void get_source_node_ids_( const size_t tid,
494 const synindex syn_id,
495 const size_t tnode_id,
496 std::vector< size_t >& sources );
497
501 void remove_disabled_connections_( const size_t tid );
502
509
514 const Time get_min_delay_time_() const;
515
520 const Time get_max_delay_time_() const;
521
525 void delete_connections_();
526
546 void connect_( Node& source,
547 Node& target,
548 const size_t s_node_id,
549 const size_t tid,
550 const synindex syn_id,
551 const Dictionary& params,
552 const double delay = numerics::nan,
553 const double weight = numerics::nan );
554
573 void connect_to_device_( Node& source,
574 Node& target,
575 const size_t s_node_id,
576 const size_t tid,
577 const synindex syn_id,
578 const Dictionary& params,
579 const double delay = NAN,
580 const double weight = NAN );
581
600 void connect_from_device_( Node& source,
601 Node& target,
602 const size_t tid,
603 const synindex syn_id,
604 const Dictionary& params,
605 const double delay = NAN,
606 const double weight = NAN );
607
611 void increase_connection_count( const size_t tid, const synindex syn_id );
612
618 std::vector< std::vector< ConnectorBase* > > connections_;
619
627
633 std::vector< std::vector< std::vector< SpikeData > > > compressed_spike_data_;
634
639 std::vector< std::vector< std::vector< size_t > > > secondary_recv_buffer_pos_;
640
641 std::map< size_t, size_t > buffer_pos_of_source_node_id_syn_id_;
642
649
651
652 std::vector< DelayChecker > delay_checkers_;
653
658 std::vector< std::vector< size_t > > num_connections_;
659
661
663 std::vector< GenericBipartiteConnBuilderFactory* > connbuilder_factories_;
664
666
668 std::vector< GenericThirdConnBuilderFactory* > thirdconnbuilder_factories_;
669
671
673
676
680
683
693
696
699
702
705
708 double stdp_eps_;
709
712 std::vector< std::pair< size_t, std::map< size_t, CSDMapEntry >::const_iterator > > iteration_state_;
713};
714
715inline bool
717{
718 return connruledict_.known( rule_name );
719}
720
721inline long
723{
724 return min_delay_;
725}
726
727inline long
729{
730 return max_delay_;
731}
732
733inline void
735{
736 if ( not keep_source_table_ )
737 {
738 source_table_.clean( tid );
739 }
740}
741
742inline void
744{
745 if ( not keep_source_table_ )
746 {
747 source_table_.clear( tid );
748 }
749}
750
751inline bool
756
757inline bool
762
763inline void
768
769inline void
774
775inline void
780
781inline void
786
787inline void
792
793inline void
798
799inline void
804
805inline void
807{
808 target_table_.prepare( tid );
809}
810
811inline const std::vector< Target >&
812ConnectionManager::get_remote_targets_of_local_node( const size_t tid, const size_t lid ) const
813{
814 return target_table_.get_targets( tid, lid );
815}
816
817inline bool
822
823inline void
824ConnectionManager::add_target( const size_t tid, const size_t target_rank, const TargetData& target_data )
825{
826 target_table_.add_target( tid, target_rank, target_data );
827}
828
829inline bool
831 const size_t rank_start,
832 const size_t rank_end,
833 size_t& target_rank,
834 TargetData& next_target_data )
835{
836 return source_table_.get_next_target_data( tid, rank_start, rank_end, target_rank, next_target_data );
837}
838
839inline const std::vector< size_t >&
841 const size_t lid,
842 const synindex syn_id ) const
843{
844 return target_table_.get_secondary_send_buffer_positions( tid, lid, syn_id );
845}
846
847inline size_t
849 const synindex syn_id,
850 const size_t lcid ) const
851{
852 return secondary_recv_buffer_pos_[ tid ][ syn_id ][ lcid ];
853}
854
855inline size_t
856ConnectionManager::get_num_connections_( const size_t tid, const synindex syn_id ) const
857{
858 return connections_[ tid ][ syn_id ]->size();
859}
860
861inline size_t
862ConnectionManager::get_source_node_id( const size_t tid, const synindex syn_index, const size_t lcid )
863{
864 return source_table_.get_node_id( tid, syn_index, lcid );
865}
866
867inline bool
872
873inline bool
878
879inline bool
884
885inline double
887{
888 return stdp_eps_;
889}
890
891inline size_t
892ConnectionManager::get_target_node_id( const size_t tid, const synindex syn_id, const size_t lcid ) const
893{
894 return connections_[ tid ][ syn_id ]->get_target_node_id( tid, lcid );
895}
896
897inline bool
898ConnectionManager::get_device_connected( const size_t tid, const size_t lcid ) const
899{
900 return target_table_devices_.is_device_connected( tid, lcid );
901}
902
903inline void
904ConnectionManager::send( const size_t tid,
905 const synindex syn_id,
906 const size_t lcid,
907 const std::vector< ConnectorModel* >& cm,
908 Event& e )
909{
910 connections_[ tid ][ syn_id ]->send( tid, lcid, cm, e );
911}
912
913inline void
920
921inline void
923 const synindex syn_id,
924 const size_t lcid,
925 const bool more_targets )
926{
927 connections_[ tid ][ syn_id ]->set_source_has_more_targets( lcid, more_targets );
928}
929
930inline const std::vector< SpikeData >&
932{
933 return compressed_spike_data_[ syn_id ][ idx ];
934}
935
936inline void
941
942} // namespace nest
943
944#endif /* CONNECTION_MANAGER_H */
Dictionary class for interface to Python and C++ API.
Definition dictionary.h:213
bool known(const std::string &key) const
Check whether there exists a value with specified key in the dictionary.
Definition dictionary.h:677
Abstract base class for Bipartite ConnBuilders which form the components of ConnBuilder.
Definition conn_builder.h:69
Definition connection_manager.h:62
void get_connections_from_sources_(const size_t tid, std::deque< ConnectionID > &conns_in_thread, NodeCollectionPTR source, NodeCollectionPTR target, synindex syn_id, long synapse_label) const
Definition connection_manager.cpp:1282
void get_targets(const std::vector< size_t > &sources, const size_t syn_id, const std::string &post_synaptic_element, std::vector< std::vector< size_t > > &targets)
Definition connection_manager.cpp:1414
std::vector< std::vector< size_t > > num_connections_
A structure to count the number of synapses of a specific type.
Definition connection_manager.h:658
bool get_user_set_delay_extrema() const
Definition connection_manager.cpp:368
void get_connections_(const size_t tid, std::deque< ConnectionID > &conns_in_thread, NodeCollectionPTR source, NodeCollectionPTR target, synindex syn_id, long synapse_label) const
See get_connections()
Definition connection_manager.cpp:1203
long get_min_delay() const
Return minimal connection delay, which is precomputed by update_delay_extrema_().
Definition connection_manager.h:722
std::vector< DelayChecker > delay_checkers_
Definition connection_manager.h:652
const std::vector< SpikeData > & get_compressed_spike_data(const synindex syn_id, const size_t idx)
Definition connection_manager.h:931
void register_conn_builder(const std::string &name)
Add a connectivity rule, i.e.
Definition connection_manager_impl.h:43
void sort_connections(const size_t tid)
Sorts connections in the presynaptic infrastructure by increasing source node ID.
Definition connection_manager.cpp:1439
void collect_compressed_spike_data(const size_t tid)
Definition connection_manager.cpp:1774
void initialize_iteration_state()
Set iteration_state_ entries for all threads to beginning of compressed_spike_data_map_.
Definition connection_manager.cpp:1911
void get_sources(const std::vector< size_t > &targets, const size_t syn_id, std::vector< std::vector< size_t > > &sources)
Definition connection_manager.cpp:1394
void send_from_device(const size_t tid, const size_t ldid, Event &e)
Send event e to all targets of source device ldid (local device id)
Definition connection_manager_impl.h:79
double get_stdp_eps() const
Definition connection_manager.h:886
void send_to_devices(const size_t tid, const size_t source_node_id, Event &e)
Send event e to all device targets of source source_node_id.
Definition connection_manager_impl.h:67
ConnectionType connection_required(Node *&source, Node *&target, size_t tid)
Check whether a connection between the given source and target nodes can be established on the given ...
Definition connection_manager.cpp:1525
PerThreadBoolIndicator check_primary_connections_
Check for primary connections (spikes) on each thread.
Definition connection_manager.h:698
bool use_compressed_spikes_
Whether to use spike compression; if a neuron has targets on multiple threads of a process,...
Definition connection_manager.h:692
bool fill_target_buffer(const size_t tid, const size_t rank_start, const size_t rank_end, std::vector< TargetData > &send_buffer_target_data, TargetSendBufferPosition &send_buffer_position)
Definition connection_manager.cpp:1796
void set_connections_have_changed()
Sets flag indicating whether connection information needs to be communicated to true.
Definition connection_manager.cpp:1750
void calibrate(const TimeConverter &)
Resize the structures for the Connector objects if necessary.
Definition connection_manager.cpp:422
void set_source_has_more_targets(const size_t tid, const synindex syn_id, const size_t lcid, const bool more_targets)
Definition connection_manager.h:922
void connect_(Node &source, Node &target, const size_t s_node_id, const size_t tid, const synindex syn_id, const Dictionary &params, const double delay=numerics::nan, const double weight=numerics::nan)
connect_ is used to establish a connection between a sender and receiving node which both have proxie...
Definition connection_manager.cpp:868
long max_delay_
Value of the largest delay in the network in steps.
Definition connection_manager.h:672
void get_connections_to_targets_(const size_t tid, std::deque< ConnectionID > &conns_in_thread, NodeCollectionPTR source, NodeCollectionPTR target, synindex syn_id, long synapse_label) const
Definition connection_manager.cpp:1226
size_t get_source_node_id(const size_t tid, const synindex syn_id, const size_t lcid)
Definition connection_manager.h:862
std::vector< GenericThirdConnBuilderFactory * > thirdconnbuilder_factories_
Third-factor ConnBuilder factories, indexed by thirdconnruledict_ elements.
Definition connection_manager.h:668
void initialize(const bool) override
Prepare manager for operation.
Definition connection_manager.cpp:96
Stopwatch< StopwatchGranularity::Normal, StopwatchParallelism::MasterOnly > sw_construction_connect
Definition connection_manager.h:461
void compute_target_data_buffer_size()
Definition connection_manager.cpp:1456
void compute_compressed_secondary_recv_buffer_positions(const size_t tid)
Definition connection_manager.cpp:1482
void connect_sonata(const Dictionary &graph_specs, const long hyberslab_size)
Connect nodes from SONATA specification.
Definition connection_manager.cpp:779
void delete_connections_()
Deletes all connections.
Definition connection_manager.cpp:328
void connect(NodeCollectionPTR sources, NodeCollectionPTR targets, const Dictionary &conn_spec, const std::vector< Dictionary > &syn_specs)
Create connections.
Definition connection_manager.cpp:431
void prepare_target_table(const size_t tid)
Definition connection_manager.h:806
void send(const size_t tid, const synindex syn_id, const size_t lcid, const std::vector< ConnectorModel * > &cm, Event &e)
Definition connection_manager.h:904
bool connections_have_changed() const
Returns true if connection information needs to be communicated.
Definition connection_manager.h:818
Dictionary get_synapse_status(const size_t source_node_id, const size_t target_node_id, const size_t tid, const synindex syn_id, const size_t lcid) const
Definition connection_manager.cpp:235
bool secondary_connections_exist() const
Definition connection_manager.h:874
bool get_next_target_data(const size_t tid, const size_t rank_start, const size_t rank_end, size_t &target_rank, TargetData &next_target_data)
Definition connection_manager.h:830
bool is_source_table_cleared() const
Returns true if source table was cleared.
Definition connection_manager.h:758
void send_local(size_t t, Node &source, Event &e)
Send event e to all targets of node source on thread t.
void remove_disabled_connections_(const size_t tid)
Removes disabled connections (of structural plasticity)
Definition connection_manager.cpp:1701
bool connections_have_changed_
True if new connections have been created since startup or last call to simulate.
Definition connection_manager.h:679
void set_stdp_eps(const double stdp_eps)
Definition connection_manager.cpp:1617
ThirdOutBuilder * get_third_conn_builder(const std::string &name, NodeCollectionPTR sources, NodeCollectionPTR targets, ThirdInBuilder *third_in, const Dictionary &conn_spec, const std::vector< Dictionary > &syn_specs)
Obtain builder for bipartite connections.
Definition connection_manager.cpp:402
size_t get_num_connections() const
Returns the number of connections in the network.
Definition connection_manager.cpp:1051
void clean_source_table(const size_t tid)
Removes processed entries from source table.
Definition connection_manager.h:734
Dictionary thirdconnruledict_
Dictionary for third-factor connection rules.
Definition connection_manager.h:665
void restructure_connection_tables(const size_t tid)
Deletes TargetTable and resets processed flags of SourceTable.
Definition connection_manager.h:914
bool valid_connection_rule(std::string)
Definition connection_manager.h:716
long get_max_delay() const
Return maximal connection delay, which is precomputed by update_delay_extrema_().
Definition connection_manager.h:728
const std::vector< Target > & get_remote_targets_of_local_node(const size_t tid, const size_t lid) const
Definition connection_manager.h:812
BipartiteConnBuilder * get_conn_builder(const std::string &name, NodeCollectionPTR sources, NodeCollectionPTR targets, ThirdOutBuilder *third_out, const Dictionary &conn_spec, const std::vector< Dictionary > &syn_specs)
Obtain builder for bipartite connections.
Definition connection_manager.cpp:382
const Time get_max_delay_time_() const
This method queries and finds the maximum delay of all local connections.
Definition connection_manager.cpp:354
void resize_target_table_devices_to_number_of_synapse_types()
Definition connection_manager.h:770
std::vector< std::pair< size_t, std::map< size_t, CSDMapEntry >::const_iterator > > iteration_state_
For each thread, store (syn_id, compressed_spike_data_map_::iterator) pair for next iteration while f...
Definition connection_manager.h:712
ConnectionType
Definition connection_manager.h:66
@ CONNECT_TO_DEVICE
Definition connection_manager.h:69
@ NO_CONNECTION
Definition connection_manager.h:70
@ CONNECT
Definition connection_manager.h:67
@ CONNECT_FROM_DEVICE
Definition connection_manager.h:68
void trigger_update_weight(const long vt_node_id, const std::vector< spikecounter > &dopa_spikes, const double t_trig)
Triggered by volume transmitter in update.
Definition connection_manager.cpp:1019
void finalize(const bool) override
Take down manager after operation.
Definition connection_manager.cpp:153
void no_targets_to_process(const size_t tid)
Definition connection_manager.h:788
void save_source_table_entry_point(const size_t tid)
Definition connection_manager.h:782
void check_secondary_connections_exist()
Definition connection_manager.cpp:1744
std::vector< std::vector< ConnectorBase * > > connections_
A structure to hold the Connector objects which in turn hold the connection information.
Definition connection_manager.h:618
void reject_last_target_data(const size_t tid)
Definition connection_manager.h:776
bool use_compressed_spikes() const
Returns whether spikes should be compressed.
Definition connection_manager.h:880
void resize_target_table_devices_to_number_of_neurons()
Definition connection_manager.h:764
void clear_source_table(const size_t tid)
Clears all entries in source table.
Definition connection_manager.h:743
void compress_secondary_send_buffer_pos(const size_t tid)
Definition connection_manager.cpp:1695
std::vector< std::vector< std::vector< SpikeData > > > compressed_spike_data_
A structure to hold "unpacked" spikes on the postsynaptic side if spike compression is enabled.
Definition connection_manager.h:633
void get_status(Dictionary &) override
Retrieve the status of the manager.
Definition connection_manager.cpp:213
size_t get_num_target_data(const size_t tid) const
Definition connection_manager.cpp:1037
void connect_arrays(const long *sources, const long *targets, const double *weights, const double *delays, const std::vector< std::string > &p_keys, const double *p_values, size_t n, const std::string &syn_model)
Definition connection_manager.cpp:605
TargetTableDevices target_table_devices_
Definition connection_manager.h:650
TargetTable target_table_
A structure to hold the information about targets for each neuron on the presynaptic side.
Definition connection_manager.h:648
bool get_keep_source_table() const
Returns true if source table is kept after building network.
Definition connection_manager.h:752
bool has_primary_connections() const
Definition connection_manager.h:868
Dictionary connruledict_
Dictionary for connection rules.
Definition connection_manager.h:660
std::vector< std::deque< ConnectionID > > get_connections(const Dictionary &params)
Return connections between pairs of neurons.
Definition connection_manager.cpp:1081
bool has_primary_connections_
Whether primary connections (spikes) exist.
Definition connection_manager.h:695
~ConnectionManager() override
Definition connection_manager.cpp:85
const Time get_min_delay_time_() const
This method queries and finds the minimum delay of all local connections.
Definition connection_manager.cpp:340
bool get_connections_has_been_called_
true if GetConnections has been called.
Definition connection_manager.h:682
size_t get_target_node_id(const size_t tid, const synindex syn_id, const size_t lcid) const
Definition connection_manager.h:892
void reset_source_table_entry_point(const size_t tid)
Definition connection_manager.h:794
void restore_source_table_entry_point(const size_t tid)
Definition connection_manager.h:800
double stdp_eps_
Maximum distance between (double) spike times in STDP that is still considered 0.
Definition connection_manager.h:708
void add_target(const size_t tid, const size_t target_rank, const TargetData &target_data)
Definition connection_manager.h:824
void disconnect(const size_t tid, const synindex syn_id, const size_t snode_id, const size_t tnode_id)
Definition connection_manager.cpp:1000
bool secondary_connections_exist_
Whether secondary connections (e.g., gap junctions) exist.
Definition connection_manager.h:701
void set_synapse_status(const size_t source_node_id, const size_t target_node_id, const size_t tid, const synindex syn_id, const size_t lcid, const Dictionary &dict)
Definition connection_manager.cpp:278
void connect_to_device_(Node &source, Node &target, const size_t s_node_id, const size_t tid, const synindex syn_id, const Dictionary &params, const double delay=NAN, const double weight=NAN)
connect_to_device_ is used to establish a connection between a sender and receiving node if the sende...
Definition connection_manager.cpp:924
void connect_tripartite(NodeCollectionPTR sources, NodeCollectionPTR targets, NodeCollectionPTR third, const Dictionary &connectivity, const Dictionary &third_connectivity, const std::map< std::string, std::vector< Dictionary > > &synapse_specs)
Create tripartite connections.
Definition connection_manager.cpp:801
void connect_from_device_(Node &source, Node &target, const size_t tid, const synindex syn_id, const Dictionary &params, const double delay=NAN, const double weight=NAN)
connect_from_device_ is used to establish a connection between a sender and receiving node if the sen...
Definition connection_manager.cpp:940
void resize_connections()
Definition connection_manager.cpp:1727
PerThreadBoolIndicator check_secondary_connections_
Check for secondary connections (e.g., gap junctions) on each thread.
Definition connection_manager.h:704
long min_delay_
Value of the smallest delay in the network.
Definition connection_manager.h:670
void sync_has_primary_connections()
Definition connection_manager.cpp:1738
void update_delay_extrema_()
Update delay extrema to current values.
Definition connection_manager.cpp:485
ConnectionManager()
Definition connection_manager.cpp:66
size_t get_num_connections_(const size_t tid, const synindex syn_id) const
Definition connection_manager.h:856
const std::vector< size_t > & get_secondary_send_buffer_positions(const size_t tid, const size_t lid, const synindex syn_id) const
Definition connection_manager.h:840
std::vector< GenericBipartiteConnBuilderFactory * > connbuilder_factories_
ConnBuilder factories, indexed by connruledict_ elements.
Definition connection_manager.h:663
bool deliver_secondary_events(const size_t tid, const bool called_from_wfr_update, std::vector< unsigned int > &recv_buffer)
Definition connection_manager.cpp:1646
size_t find_connection(const size_t tid, const synindex syn_id, const size_t snode_id, const size_t tnode_id)
Find first non-disabled thread-local connection of given synapse type with given source and target no...
Definition connection_manager.cpp:973
bool get_device_connected(size_t tid, size_t lcid) const
Definition connection_manager.h:898
void register_third_conn_builder(const std::string &name)
Add a connectivity rule, i.e.
Definition connection_manager_impl.h:56
size_t get_secondary_recv_buffer_position(const size_t tid, const synindex syn_id, const size_t lcid) const
Returns read position in MPI receive buffer for secondary connections.
Definition connection_manager.h:848
void clear_compressed_spike_data_map()
Definition connection_manager.h:937
void set_status(const Dictionary &) override
Set the status of the manager.
Definition connection_manager.cpp:182
DelayChecker & get_delay_checker()
Returns the delay checker for the current thread.
Definition connection_manager.cpp:207
std::map< size_t, size_t > buffer_pos_of_source_node_id_syn_id_
Definition connection_manager.h:641
std::vector< std::vector< std::vector< size_t > > > secondary_recv_buffer_pos_
Stores absolute position in receive buffer of secondary events.
Definition connection_manager.h:639
void increase_connection_count(const size_t tid, const synindex syn_id)
Increases the connection count.
Definition connection_manager.cpp:955
void unset_connections_have_changed()
Sets flag indicating whether connection information needs to be communicated to false.
Definition connection_manager.cpp:1767
bool keep_source_table_
Whether to keep source table after connection setup is complete.
Definition connection_manager.h:675
void get_source_node_ids_(const size_t tid, const synindex syn_id, const size_t tnode_id, std::vector< size_t > &sources)
Definition connection_manager.cpp:1380
SourceTable source_table_
A structure to hold the node IDs of presynaptic neurons during postsynaptic connection creation,...
Definition connection_manager.h:626
Definition delay_checker.h:37
Encapsulate information sent between nodes.
Definition event.h:103
Interface for kernel manager classes.
Definition manager_interface.h:46
Base class for all NEST network objects.
Definition node.h:99
A thread-safe vector to keep track of the status across threads, for example during gather operations...
Definition per_thread_bool_indicator.h:104
Base class of secondary events.
Definition secondary_event.h:50
Definition simulation_manager.h:47
This data structure stores the node IDs of presynaptic neurons during postsynaptic connection creatio...
Definition source_table.h:104
void clean(const size_t tid)
Removes all entries marked as processed.
Definition source_table.cpp:113
void save_entry_point(const size_t tid)
Stores current_positions_ in saved_positions_.
Definition source_table.h:396
size_t get_node_id(const size_t tid, const synindex syn_id, const size_t lcid) const
Returns the node ID of the source at tid|syn_id|lcid.
Definition source_table.cpp:159
void clear_compressed_spike_data_map()
Definition source_table.h:526
void restore_entry_point(const size_t tid)
Restores current_positions_ from saved_positions_.
Definition source_table.h:423
void reset_processed_flags(const size_t tid)
Resets all processed flags.
Definition source_table.h:457
void reset_entry_point(const size_t tid)
Resets saved_positions_ to end of sources_.
Definition source_table.h:430
void clear(const size_t tid)
Clears sources_.
Definition source_table.h:371
bool is_cleared() const
Returns true if sources_ has been cleared.
Definition source_table.cpp:87
void reject_last_target_data(const size_t tid)
Rejects the last target data, and resets the current_positions_ accordingly.
Definition source_table.h:382
bool get_next_target_data(const size_t tid, const size_t rank_start, const size_t rank_end, size_t &source_rank, TargetData &next_target_data)
Returns the next target data, according to the current_positions_.
Definition source_table.cpp:397
void no_targets_to_process(const size_t tid)
Sets current_positions_ for this thread to minimal values so that these are not considered in find_ma...
Definition source_table.h:469
Used to communicate part of the connection infrastructure from post- to presynaptic side.
Definition target_data.h:175
This class simplifies keeping track of write position in MPI buffer while collocating targets.
Definition send_buffer_position.h:112
This data structure stores the connections between local neurons and devices.
Definition target_table_devices.h:51
void resize_to_number_of_neurons()
Resizes vectors according to number of local nodes.
Definition target_table_devices.cpp:80
bool is_device_connected(size_t tid, size_t lcid) const
Checks if the device has any connections in this thread.
Definition target_table_devices.h:247
void resize_to_number_of_synapse_types()
Resizes vectors according to number of available synapse types.
Definition target_table_devices.cpp:92
This data structure stores all targets of the local neurons.
Definition target_table.h:47
void clear(const size_t tid)
Clears all entries of targets_.
Definition target_table.h:132
void prepare(const size_t tid)
Adjusts targets_ to number of local nodes.
Definition target_table.cpp:56
void add_target(const size_t tid, const size_t target_rank, const TargetData &target_data)
Adds entry to targets_.
Definition target_table.cpp:90
const std::vector< Target > & get_targets(const size_t tid, const size_t lid) const
Returns all targets of a neuron.
Definition target_table.h:119
const std::vector< size_t > & get_secondary_send_buffer_positions(const size_t tid, const size_t lid, const synindex syn_id) const
Returns all MPI send buffer positions of a neuron.
Definition target_table.h:125
Builder creating "thírd in" connections based on data from "third out" builder.
Definition conn_builder.h:333
Builder for connections from third-factor nodes to primary target populations.
Definition conn_builder.h:408
Class to convert times from one representation to another.
Definition nest_timeconverter.h:42
Definition nest_time.h:135
Namespace for the NEST simulation kernel.
Definition beta_normalization_factor.h:33
std::shared_ptr< NodeCollection > NodeCollectionPTR
Definition node_collection.h:50
size_t synindex
For enumerations of synapse types.
Definition nest_types.h:115
const double nan
Definition numerics.cpp:36