示例#1
0
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;
		}
	}
示例#3
0
static VALUE
wake_one(List *list)
{
    VALUE waking;

    waking = Qnil;
    while (list->entries && !RTEST(waking)) {
        waking = wake_thread(shift_list(list));
    }

    return waking;
}