23#ifndef EVENT_DELIVERY_MANAGER_H
24#define EVENT_DELIVERY_MANAGER_H
65 void finalize(
const bool )
override;
78 template <
class EventT >
79 void send(
Node& source, EventT& e,
const long lag = 0 );
280 size_t get_local_spike_counter()
const;
284 template <
typename SpikeDataT >
285 void gather_spike_data_( std::vector< SpikeDataT >& send_buffer, std::vector< SpikeDataT >& recv_buffer );
296 template <
typename SpikeDataWithRankT,
typename SpikeDataT >
298 std::vector< std::vector< SpikeDataWithRankT >* >& spike_register,
299 std::vector< SpikeDataT >& send_buffer,
300 std::vector< size_t >& num_spikes_per_rank );
305 template <
typename SpikeDataT >
307 std::vector< SpikeDataT >& send_buffer,
308 size_t local_max_spikes_per_rank );
314 template <
typename SpikeDataT >
316 std::vector< SpikeDataT >& send_buffer )
const;
323 template <
typename SpikeDataT >
325 std::vector< SpikeDataT >& recv_buffer )
const;
332 template <
typename SpikeDataT >
333 void deliver_events_(
const size_t tid,
const std::vector< SpikeDataT >& recv_buffer );
379 template <
class EventT >
498 return target.is_processed();
531 assert(
static_cast< std::vector< long >::size_type
>( d ) <
moduli_.size() );
541 assert(
static_cast< std::vector< long >::size_type
>( d ) <
slice_moduli_.size() );
Dictionary class for interface to Python and C++ API.
Definition dictionary.h:213
Collect information on spike transmission buffer resizing.
Definition buffer_resize_log.h:39
Definition event_delivery_manager.h:59
void get_status(Dictionary &) override
Retrieve the status of the manager.
Definition event_delivery_manager.cpp:179
void gather_target_data_compressed(const size_t tid)
Definition event_delivery_manager.cpp:854
void init_moduli()
Initialize modulo table.
Definition event_delivery_manager.cpp:251
std::vector< TargetData > send_buffer_target_data_
Definition event_delivery_manager.h:454
Stopwatch< StopwatchGranularity::Detailed, StopwatchParallelism::MasterOnly > sw_communicate_spike_data_
Definition event_delivery_manager.h:484
std::vector< SpikeData > recv_buffer_spike_data_
Definition event_delivery_manager.h:450
bool off_grid_spiking_
indicates whether spikes are not constrained to the grid
Definition event_delivery_manager.h:385
bool collocate_target_data_buffers_(const size_t tid, const AssignedRanks &assigned_ranks, TargetSendBufferPosition &send_buffer_position)
Fills MPI buffer for communication of connection information from presynaptic to postsynaptic side.
Definition event_delivery_manager.cpp:931
void collocate_spike_data_buffers_(SendBufferPosition &send_buffer_position, std::vector< std::vector< SpikeDataWithRankT > * > &spike_register, std::vector< SpikeDataT > &send_buffer, std::vector< size_t > &num_spikes_per_rank)
Moves spikes from on grid and off grid spike registers to correct locations in MPI buffers.
Definition event_delivery_manager.cpp:470
void reset_complete_marker_spike_data_(const SendBufferPosition &send_buffer_position, std::vector< SpikeDataT > &send_buffer) const
Resets marker in MPI buffer that signals end of communication across MPI ranks.
Definition event_delivery_manager.cpp:547
bool buffer_size_target_data_has_changed_
whether size of MPI buffer for communication of connections was changed
Definition event_delivery_manager.h:458
void update_moduli()
Update modulo table based on current time settings.
Definition event_delivery_manager.cpp:281
~EventDeliveryManager() override
Definition event_delivery_manager.cpp:71
bool get_off_grid_communication() const
return current communication style.
Definition event_delivery_manager.h:508
void send_remote(size_t tid, SpikeEvent &, const long lag=0)
Add node ID of event sender to the spike_register.
Definition event_delivery_manager_impl.h:104
void set_complete_marker_target_data_(const AssignedRanks &assigned_ranks, const TargetSendBufferPosition &send_buffer_position)
Sets marker in MPI buffer that signals end of communication across MPI ranks.
Definition event_delivery_manager.cpp:1040
size_t global_max_spikes_per_rank_
Largest number of spikes sent from any rank to any other rank in last spike exchange round.
Definition event_delivery_manager.h:466
double send_recv_buffer_shrink_spare_
leave this fraction more space than minimally needed
Definition event_delivery_manager.h:469
size_t read_toggle() const
Return 1 - write_toggle().
Definition event_delivery_manager.h:520
void send_to_node(Event &e)
Send event e directly to its target node.
Definition event_delivery_manager.h:502
virtual void reset_timers_for_preparation()
Set time measurements for internal profiling to zero (reg.
Definition event_delivery_manager.cpp:315
void set_status(const Dictionary &) override
Set the status of the manager.
Definition event_delivery_manager.cpp:143
std::vector< std::vector< SpikeDataWithRank > * > emitted_spikes_register_
Register of emitted spikes.
Definition event_delivery_manager.h:423
void initialize(const bool) override
Prepare manager for operation.
Definition event_delivery_manager.cpp:76
std::vector< unsigned int > send_buffer_secondary_events_
Buffer to collect the secondary events after serialization.
Definition event_delivery_manager.h:441
long get_slice_modulo(long d)
Index to slice-based buffer.
Definition event_delivery_manager.h:537
std::vector< TargetData > recv_buffer_target_data_
Definition event_delivery_manager.h:455
std::vector< unsigned long > local_spike_counter_
Number of generated spike events (both off- and on-grid) during the last call to simulate.
Definition event_delivery_manager.h:447
static bool is_marked_for_removal_(const Target &target)
Returns true if spike has been moved to MPI buffer, such that it can be removed by clean_spike_regist...
Definition event_delivery_manager.h:496
void gather_target_data(const size_t tid)
Collocates presynaptic connection information, communicates via MPI and creates presynaptic connectio...
Definition event_delivery_manager.cpp:780
EventDeliveryManager()
Definition event_delivery_manager.cpp:46
void set_end_marker_(const SendBufferPosition &send_buffer_position, std::vector< SpikeDataT > &send_buffer, size_t local_max_spikes_per_rank)
Set end marker for per-rank-chunks signalling completion and providing shrink/grow information.
Definition event_delivery_manager.cpp:501
bool collocate_target_data_buffers_compressed_(const size_t tid, const AssignedRanks &assigned_ranks, TargetSendBufferPosition &send_buffer_position)
Definition event_delivery_manager.cpp:1011
std::vector< std::vector< OffGridSpikeDataWithRank > * > off_grid_emitted_spikes_register_
Register of emitted off-grid spikes.
Definition event_delivery_manager.h:436
std::vector< unsigned int > recv_buffer_secondary_events_
Definition event_delivery_manager.h:442
Stopwatch< StopwatchGranularity::Detailed, StopwatchParallelism::MasterOnly > sw_collocate_spike_data_
Definition event_delivery_manager.h:483
double send_recv_buffer_grow_extra_
when growing, add this fraction extra space
Definition event_delivery_manager.h:470
std::vector< long > moduli_
Table of pre-computed modulos.
Definition event_delivery_manager.h:397
void send_secondary(Node &source, SecondaryEvent &e)
Send a secondary event remote.
Definition event_delivery_manager_impl.h:138
BufferResizeLog send_recv_buffer_resize_log_
Log all resize events.
Definition event_delivery_manager.h:477
long get_modulo(long d)
Return (T+d) mod max_delay.
Definition event_delivery_manager.h:527
void gather_secondary_events(const bool done)
Definition event_delivery_manager.cpp:339
size_t write_toggle() const
Return 0 for even, 1 for odd time slices.
Definition event_delivery_manager_impl.h:173
void send(Node &source, EventT &e, const long lag=0)
Standard routine for sending events.
Definition event_delivery_manager_impl.h:60
void send_off_grid_remote(size_t tid, SpikeEvent &e, const long lag=0)
Add node ID of event sender to the spike_register.
Definition event_delivery_manager_impl.h:121
void configure_spike_data_buffers()
Resize spike_register and comm_buffer to correct dimensions.
Definition event_delivery_manager.cpp:219
void finalize(const bool) override
Take down manager after operation.
Definition event_delivery_manager.cpp:118
void send_local(size_t t, Node &source, Event &e)
Send event e to all targets of node source on thread t.
void configure_spike_register()
Definition event_delivery_manager.cpp:232
std::vector< OffGridSpikeData > recv_buffer_off_grid_spike_data_
Definition event_delivery_manager.h:452
std::vector< long > slice_moduli_
Table of pre-computed slice-based modulos.
Definition event_delivery_manager.h:410
bool distribute_target_data_buffers_(const size_t tid)
Reads TargetData objects from MPI buffers and creates Target objects on TargetTable (presynaptic part...
Definition event_delivery_manager.cpp:1051
void gather_secondary_target_data()
Collocates presynaptic connection information for secondary events (MPI buffer offsets),...
virtual void reset_counters()
Set local spike counter to zero.
Definition event_delivery_manager.cpp:306
void deliver_events(const size_t tid)
Delivers events to targets.
Definition event_delivery_manager.cpp:584
void set_off_grid_communication(bool off_grid_spiking)
set communication style to off_grid (true) or on_grid
Definition event_delivery_manager.h:514
void deliver_events_(const size_t tid, const std::vector< SpikeDataT > &recv_buffer)
Reads spikes from MPI buffers and delivers them to ringbuffer of nodes.
Definition event_delivery_manager.cpp:599
size_t get_global_max_spikes_per_rank_(const SendBufferPosition &send_buffer_position, std::vector< SpikeDataT > &recv_buffer) const
Get required buffer size.
Definition event_delivery_manager.cpp:559
bool deliver_secondary_events(const size_t tid, const bool called_from_wfr_update)
Definition event_delivery_manager.cpp:347
void configure_secondary_buffers()
Definition event_delivery_manager.cpp:242
double send_recv_buffer_shrink_limit_
shrink buffer only if below this limit
Definition event_delivery_manager.h:468
void send_local_(Node &source, EventT &e, const long lag)
Sends event e to all targets of node source.
Definition event_delivery_manager_impl.h:37
void resize_send_recv_buffers_target_data()
Definition event_delivery_manager.cpp:199
void reset_spike_register_(const size_t tid)
Deletes all spikes from spike registers and resets spike counters.
Definition event_delivery_manager.h:489
PerThreadBoolIndicator gather_completed_checker_
Definition event_delivery_manager.h:479
void resize_send_recv_buffers_spike_data_()
Definition event_delivery_manager.cpp:207
void gather_spike_data_(std::vector< SpikeDataT > &send_buffer, std::vector< SpikeDataT > &recv_buffer)
Definition event_delivery_manager.cpp:368
Stopwatch< StopwatchGranularity::Detailed, StopwatchParallelism::MasterOnly > sw_communicate_target_data_
Definition event_delivery_manager.h:485
virtual void reset_timers_for_dynamics()
Set time measurements for internal profiling to zero (reg.
Definition event_delivery_manager.cpp:321
void gather_spike_data()
Collocates spikes from register to MPI buffers, communicates via MPI and delivers events to targets.
Definition event_delivery_manager.cpp:354
void write_done_marker_secondary_events_(const bool done)
Definition event_delivery_manager.cpp:328
std::vector< OffGridSpikeData > send_buffer_off_grid_spike_data_
Definition event_delivery_manager.h:451
std::vector< SpikeData > send_buffer_spike_data_
Definition event_delivery_manager.h:449
Encapsulate information sent between nodes.
Definition event.h:103
Combined storage of node ID and offset information for off-grid spikes.
Definition mpi_manager.h:390
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
This class simplifies keeping track of write position in MPI buffer while collocating spikes.
Definition send_buffer_position.h:42
Event for spike information.
Definition event.h:418
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
check legal size
Definition target.h:78
Namespace for the NEST simulation kernel.
Definition beta_normalization_factor.h:33
MPIManager::OffGridSpike OffGridSpike
Definition event_delivery_manager.h:51
Declarations for base class Node.
Definition vp_manager.h:42