static VALUE rb_queue_pop(int argc, VALUE *argv, VALUE self) { Queue *queue; int should_block; VALUE result; Data_Get_Struct(self, Queue, queue); if (argc == 0) { should_block = 1; } else if (argc == 1) { should_block = !RTEST(argv[0]); } else { rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc); } lock_mutex(&queue->mutex); if (!queue->values.entries && !should_block) { unlock_mutex(&queue->mutex); rb_raise(private_eThreadError, "queue empty"); } while (!queue->values.entries) { wait_condvar(&queue->value_available, &queue->mutex); } result = shift_list(&queue->values); if (queue->capacity && queue->values.size < queue->capacity) { signal_condvar(&queue->space_available); } unlock_mutex(&queue->mutex); return result; }
void uniform_intensity_data_transformer::transform( const float * data, float * data_transformed, const layer_configuration_specific& original_config, unsigned int sample_id) { if (original_config.feature_map_count != shift_distribution_list.size()) throw neural_network_exception((boost::format("uniform_intensity_data_transformer was initialized with %1% distributions and data provided has %2% feature maps") % shift_distribution_list.size() % original_config.feature_map_count).str()); std::vector<float> shift_list(original_config.feature_map_count); { boost::lock_guard<boost::mutex> lock(gen_stream_mutex); for(unsigned int feature_map_id = 0; feature_map_id < original_config.feature_map_count; ++feature_map_id) { nnforge_uniform_real_distribution<float>& dist = shift_distribution_list[feature_map_id]; float shift = dist.min(); if (dist.max() > dist.min()) shift = dist(generator); shift_list[feature_map_id] = shift; } } unsigned int neuron_count_per_feature_map = original_config.get_neuron_count_per_feature_map(); for(unsigned int feature_map_id = 0; feature_map_id < original_config.feature_map_count; ++feature_map_id) { float shift = shift_list[feature_map_id]; const float * src_data = data + feature_map_id * neuron_count_per_feature_map; float * dest_data = data_transformed + feature_map_id * neuron_count_per_feature_map; for(unsigned int i = 0; i < neuron_count_per_feature_map; ++i) dest_data[i] = src_data[i] + shift; } }
static VALUE wake_one(List *list) { VALUE waking; waking = Qnil; while (list->entries && !RTEST(waking)) { waking = wake_thread(shift_list(list)); } return waking; }