void auryn_vector_float_clip( auryn_vector_float * v, const float a ) { #ifdef CODE_USE_SIMD_INSTRUCTIONS_EXPLICITLY #ifdef CODE_ACTIVATE_CILK_INSTRUCTIONS auryn_vector_float_clip( v, a, 1e16 ); #else const __m128 lo = _mm_set1_ps(a); const __m128 hi = _mm_set1_ps(0.); for ( float * i = v->data ; i != v->data+v->size ; i += SIMD_NUM_OF_PARALLEL_FLOAT_OPERATIONS ) { __m128 chunk = sse_load( i ); __m128 result = _mm_min_ps(chunk, hi); result = _mm_max_ps(result, lo); sse_store( i, result ); } #endif /* CODE_ACTIVATE_CILK_INSTRUCTIONS */ #else auryn_vector_float_clip( v, a, 1e16 ); #endif }
void IF2Group::check_thresholds() { auryn_vector_float_clip( mem, e_rev ); AurynState * thr_ptr = thr->data; for ( AurynState * i = mem->data ; i != mem->data+get_rank_size() ; ++i ) { // it's important to use rank_size here otherwise there might be spikes from units that do not exist if ( *i > ( thr_rest + *thr_ptr ) ) { NeuronID unit = i-mem->data; push_spike(unit); set_val (mem, unit, e_rest); // reset set_val (thr, unit, dthr); //refractory } thr_ptr++; } }