예제 #1
0
		layer_hessian_cuda::buffer_set layer_hessian_cuda::allocate_all_buffers(unsigned int max_entry_count) const
		{
			buffer_set res;

			std::vector<size_t> sizes = get_sizes_of_additional_buffers_per_entry();
			for(std::vector<size_t>::const_iterator it = sizes.begin(); it != sizes.end(); ++it)
			{
				size_t sz = *it * max_entry_count;
				res.additional_buffers.push_back(cuda_linear_buffer_device_smart_ptr(new cuda_linear_buffer_device(sz)));
			}

			std::vector<size_t> fixed_sizes = get_sizes_of_additional_buffers_fixed();
			for(std::vector<size_t>::const_iterator it = fixed_sizes.begin(); it != fixed_sizes.end(); ++it)
			{
				res.additional_buffers.push_back(cuda_linear_buffer_device_smart_ptr(new cuda_linear_buffer_device(*it)));
			}

			{
				size_t sz = output_elem_count_per_entry * sizeof(float) * max_entry_count;
				res.output_neurons_buffer = cuda_linear_buffer_device_smart_ptr(new cuda_linear_buffer_device(sz));
			}

			if (backprop_required && !is_in_place_backprop())
			{
				size_t sz = input_elem_count_per_entry * sizeof(float) * max_entry_count;
				res.input_errors_buffer = cuda_linear_buffer_device_smart_ptr(new cuda_linear_buffer_device(sz));
			}

			fill_additional_buffers(res.additional_buffers);

			return res;
		}
예제 #2
0
void weight_vector_bound_cuda::update_buffer_configuration(
    buffer_cuda_size_configuration& buffer_configuration,
    unsigned int updater_entry_count) const
{
    std::vector<size_t> per_entry_sizes = get_sizes_of_additional_buffers_per_entry();
    for(std::vector<size_t>::const_iterator it = per_entry_sizes.begin(); it != per_entry_sizes.end(); ++it)
        buffer_configuration.add_constant_buffer(*it * updater_entry_count);
}
예제 #3
0
std::vector<cuda_linear_buffer_device_smart_ptr> weight_vector_bound_cuda::allocate_additional_buffers(unsigned int max_entry_count)
{
    std::vector<cuda_linear_buffer_device_smart_ptr> res;

    std::vector<size_t> per_entry_sizes = get_sizes_of_additional_buffers_per_entry();
    for(std::vector<size_t>::const_iterator it = per_entry_sizes.begin(); it != per_entry_sizes.end(); ++it)
        res.push_back(cuda_linear_buffer_device_smart_ptr(new cuda_linear_buffer_device(*it * max_entry_count)));

    return res;
}
예제 #4
0
void weight_vector_bound_cuda::update_buffer_configuration(buffer_cuda_size_configuration& buffer_configuration) const
{
    std::vector<size_t> per_entry_sizes = get_sizes_of_additional_buffers_per_entry();
    for(std::vector<size_t>::const_iterator it = per_entry_sizes.begin(); it != per_entry_sizes.end(); ++it)
        buffer_configuration.add_per_entry_buffer(*it);

    std::vector<unsigned int> tex_per_entry = get_linear_addressing_through_texture_per_entry();
    for(std::vector<unsigned int>::const_iterator it = tex_per_entry.begin(); it != tex_per_entry.end(); ++it)
        buffer_configuration.add_per_entry_linear_addressing_through_texture(*it);
}
예제 #5
0
		void layer_hessian_cuda::update_buffer_configuration(buffer_cuda_size_configuration& buffer_configuration) const
		{
			std::vector<size_t> sizes = get_sizes_of_additional_buffers_per_entry();
			for(std::vector<size_t>::const_iterator it = sizes.begin(); it != sizes.end(); ++it)
				buffer_configuration.add_per_entry_buffer(*it);

			std::vector<size_t> fixed_sized = get_sizes_of_additional_buffers_fixed();
			for(std::vector<size_t>::const_iterator it = fixed_sized.begin(); it != fixed_sized.end(); ++it)
				buffer_configuration.add_constant_buffer(*it);

			buffer_configuration.add_per_entry_buffer(output_elem_count_per_entry * sizeof(float));

			if (backprop_required && !is_in_place_backprop())
				buffer_configuration.add_per_entry_buffer(input_elem_count_per_entry * sizeof(float));

			std::vector<unsigned int> tex_per_entry = get_linear_addressing_through_texture_per_entry();
			for(std::vector<unsigned int>::const_iterator it = tex_per_entry.begin(); it != tex_per_entry.end(); ++it)
				buffer_configuration.add_per_entry_linear_addressing_through_texture(*it);
		}