Skip to content

Commit 752f56e

Browse files
authored
Merge pull request nest#2522 from med-ayssar/esthetic_changes
Refactor collocate_spike_data_buffers
2 parents a586d8f + ee638a7 commit 752f56e

File tree

6 files changed

+83
-56
lines changed

6 files changed

+83
-56
lines changed

nestkernel/event_delivery_manager.cpp

Lines changed: 27 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ EventDeliveryManager::EventDeliveryManager()
4646
: off_grid_spiking_( false )
4747
, moduli_()
4848
, slice_moduli_()
49-
, spike_register_()
50-
, off_grid_spike_register_()
49+
, emitted_spikes_register_()
50+
, off_grid_emitted_spike_register_()
5151
, send_buffer_secondary_events_()
5252
, recv_buffer_secondary_events_()
5353
, local_spike_counter_()
@@ -78,8 +78,8 @@ EventDeliveryManager::initialize()
7878
reset_counters();
7979
reset_timers_for_preparation();
8080
reset_timers_for_dynamics();
81-
spike_register_.resize( num_threads );
82-
off_grid_spike_register_.resize( num_threads );
81+
emitted_spikes_register_.resize( num_threads );
82+
off_grid_emitted_spike_register_.resize( num_threads );
8383
gather_completed_checker_.initialize( num_threads, false );
8484
// Ensures that ResetKernel resets off_grid_spiking_
8585
off_grid_spiking_ = false;
@@ -90,10 +90,10 @@ EventDeliveryManager::initialize()
9090
#pragma omp parallel
9191
{
9292
const thread tid = kernel().vp_manager.get_thread_id();
93-
spike_register_[ tid ].resize( num_threads,
93+
emitted_spikes_register_[ tid ].resize( num_threads,
9494
std::vector< std::vector< Target > >( kernel().connection_manager.get_min_delay(), std::vector< Target >() ) );
9595

96-
off_grid_spike_register_[ tid ].resize( num_threads,
96+
off_grid_emitted_spike_register_[ tid ].resize( num_threads,
9797
std::vector< std::vector< OffGridTarget > >(
9898
kernel().connection_manager.get_min_delay(), std::vector< OffGridTarget >() ) );
9999
} // of omp parallel
@@ -103,8 +103,8 @@ void
103103
EventDeliveryManager::finalize()
104104
{
105105
// clear the spike buffers
106-
std::vector< std::vector< std::vector< std::vector< Target > > > >().swap( spike_register_ );
107-
std::vector< std::vector< std::vector< std::vector< OffGridTarget > > > >().swap( off_grid_spike_register_ );
106+
std::vector< std::vector< std::vector< std::vector< Target > > > >().swap( emitted_spikes_register_ );
107+
std::vector< std::vector< std::vector< std::vector< OffGridTarget > > > >().swap( off_grid_emitted_spike_register_ );
108108

109109
send_buffer_secondary_events_.clear();
110110
recv_buffer_secondary_events_.clear();
@@ -265,10 +265,9 @@ EventDeliveryManager::update_moduli()
265265
void
266266
EventDeliveryManager::reset_counters()
267267
{
268-
for ( std::vector< unsigned long >::iterator it = local_spike_counter_.begin(); it != local_spike_counter_.end();
269-
++it )
268+
for ( auto& spike_counter : local_spike_counter_ )
270269
{
271-
( *it ) = 0;
270+
spike_counter = 0;
272271
}
273272
}
274273

@@ -374,13 +373,13 @@ EventDeliveryManager::gather_spike_data_( const thread tid,
374373

375374
// Collocate spikes to send buffer
376375
const bool collocate_completed =
377-
collocate_spike_data_buffers_( tid, assigned_ranks, send_buffer_position, spike_register_, send_buffer );
376+
collocate_spike_data_buffers_( tid, assigned_ranks, send_buffer_position, emitted_spikes_register_, send_buffer );
378377
gather_completed_checker_[ tid ].logical_and( collocate_completed );
379378

380379
if ( off_grid_spiking_ )
381380
{
382381
const bool collocate_completed_off_grid = collocate_spike_data_buffers_(
383-
tid, assigned_ranks, send_buffer_position, off_grid_spike_register_, send_buffer );
382+
tid, assigned_ranks, send_buffer_position, off_grid_emitted_spike_register_, send_buffer );
384383
gather_completed_checker_[ tid ].logical_and( collocate_completed_off_grid );
385384
}
386385

@@ -467,7 +466,7 @@ bool
467466
EventDeliveryManager::collocate_spike_data_buffers_( const thread tid,
468467
const AssignedRanks& assigned_ranks,
469468
SendBufferPosition& send_buffer_position,
470-
std::vector< std::vector< std::vector< std::vector< TargetT > > > >& spike_register,
469+
std::vector< std::vector< std::vector< std::vector< TargetT > > > >& emitted_spikes_register,
471470
std::vector< SpikeDataT >& send_buffer )
472471
{
473472
reset_complete_marker_spike_data_( assigned_ranks, send_buffer_position, send_buffer );
@@ -477,24 +476,19 @@ EventDeliveryManager::collocate_spike_data_buffers_( const thread tid,
477476
bool is_spike_register_empty = true;
478477

479478
// First dimension: loop over writing thread
480-
for ( typename std::vector< std::vector< std::vector< std::vector< TargetT > > > >::iterator it =
481-
spike_register.begin();
482-
it != spike_register.end();
483-
++it )
479+
for ( auto& emitted_spikes_per_thread : emitted_spikes_register )
484480
{
485-
// Second dimension: fixed reading thread
481+
// Second dimension: Set the reading thread to the current running thread
486482

487483
// Third dimension: loop over lags
488-
for ( unsigned int lag = 0; lag < ( *it )[ tid ].size(); ++lag )
484+
for ( unsigned int lag = 0; lag < ( emitted_spikes_per_thread )[ tid ].size(); ++lag )
489485
{
490486
// Fourth dimension: loop over entries
491-
for ( typename std::vector< TargetT >::iterator iiit = ( *it )[ tid ][ lag ].begin();
492-
iiit < ( *it )[ tid ][ lag ].end();
493-
++iiit )
487+
for ( auto& emitted_spike : ( emitted_spikes_per_thread )[ tid ][ lag ] )
494488
{
495-
assert( not iiit->is_processed() );
489+
assert( not emitted_spike.is_processed() );
496490

497-
const thread rank = iiit->get_rank();
491+
const thread rank = emitted_spike.get_rank();
498492

499493
if ( send_buffer_position.is_chunk_filled( rank ) )
500494
{
@@ -503,16 +497,11 @@ EventDeliveryManager::collocate_spike_data_buffers_( const thread tid,
503497
{
504498
return is_spike_register_empty;
505499
}
506-
else
507-
{
508-
continue;
509-
}
510500
}
511501
else
512502
{
513-
send_buffer[ send_buffer_position.idx( rank ) ].set(
514-
( *iiit ).get_tid(), ( *iiit ).get_syn_id(), ( *iiit ).get_lcid(), lag, ( *iiit ).get_offset() );
515-
( *iiit ).set_status( TARGET_ID_PROCESSED ); // mark entry for removal
503+
send_buffer[ send_buffer_position.idx( rank ) ].set( emitted_spike, lag );
504+
emitted_spike.mark_for_removal();
516505
send_buffer_position.increase( rank );
517506
}
518507
}
@@ -597,7 +586,7 @@ EventDeliveryManager::deliver_events_( const thread tid, const std::vector< Spik
597586

598587
// prepare Time objects for every possible time stamp within min_delay_
599588
std::vector< Time > prepared_timestamps( kernel().connection_manager.get_min_delay() );
600-
for ( size_t lag = 0; lag < ( size_t ) kernel().connection_manager.get_min_delay(); ++lag )
589+
for ( size_t lag = 0; lag < static_cast< size_t >( kernel().connection_manager.get_min_delay() ); ++lag )
601590
{
602591
prepared_timestamps[ lag ] = kernel().simulation_manager.get_clock() + Time::step( lag + 1 );
603592
}
@@ -876,19 +865,15 @@ nest::EventDeliveryManager::distribute_target_data_buffers_( const thread tid )
876865
void
877866
EventDeliveryManager::resize_spike_register_( const thread tid )
878867
{
879-
for ( std::vector< std::vector< std::vector< Target > > >::iterator it = spike_register_[ tid ].begin();
880-
it != spike_register_[ tid ].end();
881-
++it )
868+
for ( auto& emitted_spikes_for_current_thread : emitted_spikes_register_[ tid ] )
882869
{
883-
it->resize( kernel().connection_manager.get_min_delay(), std::vector< Target >() );
870+
emitted_spikes_for_current_thread.resize( kernel().connection_manager.get_min_delay(), std::vector< Target >() );
884871
}
885872

886-
for ( std::vector< std::vector< std::vector< OffGridTarget > > >::iterator it =
887-
off_grid_spike_register_[ tid ].begin();
888-
it != off_grid_spike_register_[ tid ].end();
889-
++it )
873+
for ( auto& off_grid_emitted_spike_for_current_thread : off_grid_emitted_spike_register_[ tid ] )
890874
{
891-
it->resize( kernel().connection_manager.get_min_delay(), std::vector< OffGridTarget >() );
875+
off_grid_emitted_spike_for_current_thread.resize(
876+
kernel().connection_manager.get_min_delay(), std::vector< OffGridTarget >() );
892877
}
893878
}
894879

nestkernel/event_delivery_manager.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ class EventDeliveryManager : public ManagerInterface
391391
* - Third dim: lag
392392
* - Fourth dim: Target (will be converted in SpikeData)
393393
*/
394-
std::vector< std::vector< std::vector< std::vector< Target > > > > spike_register_;
394+
std::vector< std::vector< std::vector< std::vector< Target > > > > emitted_spikes_register_;
395395

396396
/**
397397
* Register for node IDs of precise neurons that spiked. This is a 4-dim
@@ -403,7 +403,7 @@ class EventDeliveryManager : public ManagerInterface
403403
* - Third dim: lag
404404
* - Fourth dim: OffGridTarget (will be converted in OffGridSpikeData)
405405
*/
406-
std::vector< std::vector< std::vector< std::vector< OffGridTarget > > > > off_grid_spike_register_;
406+
std::vector< std::vector< std::vector< std::vector< OffGridTarget > > > > off_grid_emitted_spike_register_;
407407

408408
/**
409409
* Buffer to collect the secondary events
@@ -447,8 +447,8 @@ class EventDeliveryManager : public ManagerInterface
447447
inline void
448448
EventDeliveryManager::reset_spike_register_( const thread tid )
449449
{
450-
for ( std::vector< std::vector< std::vector< Target > > >::iterator it = spike_register_[ tid ].begin();
451-
it < spike_register_[ tid ].end();
450+
for ( std::vector< std::vector< std::vector< Target > > >::iterator it = emitted_spikes_register_[ tid ].begin();
451+
it < emitted_spikes_register_[ tid ].end();
452452
++it )
453453
{
454454
for ( std::vector< std::vector< Target > >::iterator iit = it->begin(); iit < it->end(); ++iit )
@@ -458,8 +458,8 @@ EventDeliveryManager::reset_spike_register_( const thread tid )
458458
}
459459

460460
for ( std::vector< std::vector< std::vector< OffGridTarget > > >::iterator it =
461-
off_grid_spike_register_[ tid ].begin();
462-
it < off_grid_spike_register_[ tid ].end();
461+
off_grid_emitted_spike_register_[ tid ].begin();
462+
it < off_grid_emitted_spike_register_[ tid ].end();
463463
++it )
464464
{
465465
for ( std::vector< std::vector< OffGridTarget > >::iterator iit = it->begin(); iit < it->end(); ++iit )
@@ -478,8 +478,8 @@ EventDeliveryManager::is_marked_for_removal_( const Target& target )
478478
inline void
479479
EventDeliveryManager::clean_spike_register_( const thread tid )
480480
{
481-
for ( std::vector< std::vector< std::vector< Target > > >::iterator it = spike_register_[ tid ].begin();
482-
it < spike_register_[ tid ].end();
481+
for ( std::vector< std::vector< std::vector< Target > > >::iterator it = emitted_spikes_register_[ tid ].begin();
482+
it < emitted_spikes_register_[ tid ].end();
483483
++it )
484484
{
485485
for ( std::vector< std::vector< Target > >::iterator iit = it->begin(); iit < it->end(); ++iit )
@@ -489,8 +489,8 @@ EventDeliveryManager::clean_spike_register_( const thread tid )
489489
}
490490
}
491491
for ( std::vector< std::vector< std::vector< OffGridTarget > > >::iterator it =
492-
off_grid_spike_register_[ tid ].begin();
493-
it < off_grid_spike_register_[ tid ].end();
492+
off_grid_emitted_spike_register_[ tid ].begin();
493+
it < off_grid_emitted_spike_register_[ tid ].end();
494494
++it )
495495
{
496496
for ( std::vector< std::vector< OffGridTarget > >::iterator iit = it->begin(); iit < it->end(); ++iit )

nestkernel/event_delivery_manager_impl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ EventDeliveryManager::send_remote( thread tid, SpikeEvent& e, const long lag )
114114
// Unroll spike multiplicity as plastic synapses only handle individual spikes.
115115
for ( int i = 0; i < e.get_multiplicity(); ++i )
116116
{
117-
spike_register_[ tid ][ assigned_tid ][ lag ].push_back( *it );
117+
emitted_spikes_register_[ tid ][ assigned_tid ][ lag ].push_back( *it );
118118
}
119119
}
120120
}
@@ -133,7 +133,7 @@ EventDeliveryManager::send_off_grid_remote( thread tid, SpikeEvent& e, const lon
133133
// Unroll spike multiplicity as plastic synapses only handle individual spikes.
134134
for ( int i = 0; i < e.get_multiplicity(); ++i )
135135
{
136-
off_grid_spike_register_[ tid ][ assigned_tid ][ lag ].push_back( OffGridTarget( *it, e.get_offset() ) );
136+
off_grid_emitted_spike_register_[ tid ][ assigned_tid ][ lag ].push_back( OffGridTarget( *it, e.get_offset() ) );
137137
}
138138
}
139139
}

nestkernel/spike_data.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ class SpikeData
6767

6868
void set( const thread tid, const synindex syn_id, const index lcid, const unsigned int lag, const double offset );
6969

70+
template < class TargetT >
71+
void set( const TargetT& target, const unsigned int lag );
72+
7073
/**
7174
* Returns local connection ID.
7275
*/
@@ -185,6 +188,20 @@ SpikeData::set( const thread tid, const synindex syn_id, const index lcid, const
185188
syn_id_ = syn_id;
186189
}
187190

191+
192+
template < class TargetT >
193+
inline void
194+
SpikeData::set( const TargetT& target, const unsigned int lag )
195+
{
196+
// the assertions in the above function are granted by the TargetT object!
197+
assert( lag < MAX_LAG );
198+
lcid_ = target.get_lcid();
199+
marker_ = SPIKE_DATA_ID_DEFAULT;
200+
lag_ = lag;
201+
tid_ = target.get_tid();
202+
syn_id_ = target.get_syn_id();
203+
}
204+
188205
inline index
189206
SpikeData::get_lcid() const
190207
{
@@ -270,6 +287,9 @@ class OffGridSpikeData : public SpikeData
270287
const unsigned int lag,
271288
const double offset );
272289
void set( const thread tid, const synindex syn_id, const index lcid, const unsigned int lag, const double offset );
290+
291+
template < class TargetT >
292+
void set( const TargetT& target, const unsigned int lag );
273293
double get_offset() const;
274294
};
275295

@@ -292,6 +312,7 @@ inline OffGridSpikeData::OffGridSpikeData( const thread tid,
292312
{
293313
}
294314

315+
295316
inline void
296317
OffGridSpikeData::set( const thread tid,
297318
const synindex syn_id,
@@ -312,6 +333,15 @@ OffGridSpikeData::set( const thread tid,
312333
offset_ = offset;
313334
}
314335

336+
337+
template < class TargetT >
338+
inline void
339+
OffGridSpikeData::set( const TargetT& target, const unsigned int lag )
340+
{
341+
SpikeData::set( target, lag );
342+
offset_ = target.get_offset();
343+
}
344+
315345
inline double
316346
OffGridSpikeData::get_offset() const
317347
{

nestkernel/target.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ class Target
159159
* Return offset.
160160
*/
161161
double get_offset() const;
162+
163+
/**
164+
* Set the status of the target identifier to processed
165+
*/
166+
void mark_for_removal();
162167
};
163168

164169
//!< check legal size
@@ -288,6 +293,13 @@ Target::get_offset() const
288293
return 0;
289294
}
290295

296+
inline void
297+
Target::mark_for_removal()
298+
{
299+
set_status( TARGET_ID_PROCESSED );
300+
}
301+
302+
291303
class OffGridTarget : public Target
292304
{
293305
private:

nestkernel/target_table.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ class TargetTable
8787
void add_target( const thread tid, const thread target_rank, const TargetData& target_data );
8888

8989
/**
90-
* Returns all targets of a neuron. Used to fill
91-
* EventDeliveryManager::spike_register_.
90+
* Returns all targets of a neuron. Used for filling
91+
* EventDeliveryManager::emitted_spikes_register_.
9292
*/
9393
const std::vector< Target >& get_targets( const thread tid, const index lid ) const;
9494

0 commit comments

Comments
 (0)