static inline void _print_ring_buffers(uint32_t time) { #if LOG_LEVEL >= LOG_DEBUG log_debug("Ring Buffer\n"); log_debug("----------------------------------------\n"); for (uint32_t n = 0; n < n_neurons; n++) { for (uint32_t t = 0; t < SYNAPSE_TYPE_COUNT; t++) { const char *type_string = synapse_types_get_type_char(t); bool empty = true; for (uint32_t d = 0; d < (1 << SYNAPSE_DELAY_BITS); d++) { empty = empty && (ring_buffers[ synapses_get_ring_buffer_index(d + time, t, n)] == 0); } if (!empty) { log_debug("%3d(%s):", n, type_string); for (uint32_t d = 0; d < (1 << SYNAPSE_DELAY_BITS); d++) { log_debug(" "); uint32_t ring_buffer_index = synapses_get_ring_buffer_index(d + time, t, n); synapses_print_weight(ring_buffers[ring_buffer_index], ring_buffer_to_input_left_shifts[t]); } log_debug("\n"); } } } log_debug("----------------------------------------\n"); #else use(time); #endif // LOG_LEVEL >= LOG_DEBUG }
static inline void _print_synaptic_row(synaptic_row_t synaptic_row) { #if LOG_LEVEL >= LOG_DEBUG log_debug("Synaptic row, at address %08x Num plastic words:%u\n", (uint32_t )synaptic_row, synapse_row_plastic_size(synaptic_row)); if (synaptic_row == NULL) { return; } log_debug("----------------------------------------\n"); // Get details of fixed region address_t fixed_region_address = synapse_row_fixed_region(synaptic_row); address_t fixed_synapses = synapse_row_fixed_weight_controls( fixed_region_address); size_t n_fixed_synapses = synapse_row_num_fixed_synapses( fixed_region_address); log_debug("Fixed region %u fixed synapses (%u plastic control words):\n", n_fixed_synapses, synapse_row_num_plastic_controls(fixed_region_address)); for (uint32_t i = 0; i < n_fixed_synapses; i++) { uint32_t synapse = fixed_synapses[i]; uint32_t synapse_type = synapse_row_sparse_type(synapse); log_debug("%08x [%3d: (w: %5u (=", synapse, i, synapse_row_sparse_weight(synapse)); synapses_print_weight(synapse_row_sparse_weight(synapse), ring_buffer_to_input_left_shifts[synapse_type]); log_debug( "nA) d: %2u, %s, n = %3u)] - {%08x %08x}\n", synapse_row_sparse_delay(synapse), synapse_types_get_type_char(synapse_row_sparse_type(synapse)), synapse_row_sparse_index(synapse), SYNAPSE_DELAY_MASK, SYNAPSE_TYPE_INDEX_BITS); } // If there's a plastic region if (synapse_row_plastic_size(synaptic_row) > 0) { log_debug("----------------------------------------\n"); address_t plastic_region_address = synapse_row_plastic_region(synaptic_row); synapse_dynamics_print_plastic_synapses( plastic_region_address, fixed_region_address, ring_buffer_to_input_left_shifts); } log_debug("----------------------------------------\n"); #else use(synaptic_row); #endif // LOG_LEVEL >= LOG_DEBUG }
void synapse_dynamics_print_plastic_synapses( address_t plastic_region_address, address_t fixed_region_address, uint32_t *ring_buffer_to_input_buffer_left_shifts) { use(plastic_region_address); use(fixed_region_address); use(ring_buffer_to_input_buffer_left_shifts); #if LOG_LEVEL >= LOG_DEBUG // Extract seperate arrays of weights (from plastic region), // Control words (from fixed region) and number of plastic synapses weight_t *plastic_words = _plastic_synapses(plastic_region_address); const control_t *control_words = synapse_row_plastic_controls( fixed_region_address); size_t plastic_synapse = synapse_row_num_plastic_controls( fixed_region_address); const pre_event_history_t *event_history = _plastic_event_history( plastic_region_address); log_debug( "Plastic region %u synapses pre-synaptic event buffer count:%u:\n", plastic_synapse, event_history->count_minus_one + 1); // Loop through plastic synapses for (uint32_t i = 0; i < plastic_synapse; i++) { // Get next weight and control word (autoincrementing control word) uint32_t weight = *plastic_words++; uint32_t control_word = *control_words++; uint32_t synapse_type = synapse_row_sparse_type(control_word); log_debug("%08x [%3d: (w: %5u (=", control_word, i, weight); synapses_print_weight( weight, ring_buffer_to_input_buffer_left_shifts[synapse_type]); log_debug("nA) d: %2u, %s, n = %3u)] - {%08x %08x}\n", synapse_row_sparse_delay(control_word), synapse_types_get_type_char(synapse_row_sparse_type( control_word)), synapse_row_sparse_index(control_word), SYNAPSE_DELAY_MASK, SYNAPSE_TYPE_INDEX_BITS); } #endif // LOG_LEVEL >= LOG_DEBUG }