#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/compute/system.hpp>
#include <boost/compute/algorithm/copy.hpp>
#include <boost/compute/algorithm/accumulate.hpp>
#include <boost/compute/container/vector.hpp>
#include <boost/compute/types/fundamental.hpp>
#include <boost/compute/algorithm/inclusive_scan.hpp>
//#include <boost/compute/interop/opencv/core.hpp>
//#include <boost/compute/interop/opencv/highgui.hpp>
#include <boost/compute/random/default_random_engine.hpp>
#include <boost/compute/random/uniform_real_distribution.hpp>
#include <boost/compute/utility/source.hpp>
//#include <ctime>
//#include <random>
//#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
//#undef CL_VERSION_1_2
namespace compute = boost::compute;
int main()
{
//srand ( time(NULL) );
//int seed = int(time);
//std::random_device rd;
//std::default_random_engine generator(rd());
compute::device gpu = compute::system::default_device();
compute::context ctx(gpu);
compute::command_queue queue(ctx, gpu);
size_t steps = 10;
compute::vector<float> random_vector(steps, ctx);
compute::default_random_engine random_engine(queue);
random_engine.seed(time(NULL), queue);
compute::uniform_real_distribution<float> random_distribution(0.f, 1.f);
random_distribution.generate(
random_vector.begin(), random_vector.end(), random_engine, queue
);
float result = compute::accumulate(random_vector.begin(), random_vector.end(), 0, queue);
std::cout << "result: " << result << std::endl;
std::cout << "vector: [ ";
boost::compute::copy(
random_vector.begin(), random_vector.end(),
std::ostream_iterator<float>(std::cout, ", "),
queue
);
std::cout << "]" << std::endl;
}