/usr/include/boost/numeric/ublas/opencl
Edit: /usr/include/boost/numeric/ublas/opencl/vector.hpp (2255B)
// Boost.uBLAS
//
// Copyright (c) 2018 Fady Essam
// Copyright (c) 2018 Stefan Seefeld
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or
// copy at http://www.boost.org/LICENSE_1_0.txt)
#ifndef boost_numeric_ublas_opencl_vector_hpp_
#define boost_numeric_ublas_opencl_vector_hpp_
#include
#include
#include
#include
#include
#include
namespace boost { namespace numeric { namespace ublas { namespace opencl {
class storage;
namespace compute = boost::compute;
} // namespace opencl
template
class vector : public boost::compute::vector
{
typedef std::size_t size_type;
public:
vector() : compute::vector() {}
vector(size_type size, compute::context context)
: compute::vector(size, context)
{ device_ = context.get_device();}
vector(size_type size, T value, compute::command_queue queue)
: compute::vector(size, value, queue.get_context())
{
queue.finish();
device_ = queue.get_device();
}
template
vector(vector const &v, compute::command_queue &queue)
: vector(v.size(), queue.get_context())
{
this->from_host(v, queue);
}
const compute::device device() const { return device_;}
compute::device device() { return device_;}
template
void from_host(ublas::vector const &v, compute::command_queue & queue)
{
assert(this->device() == queue.get_device());
compute::copy(v.begin(),
v.end(),
this->begin(),
queue);
queue.finish();
}
template
void to_host(ublas::vector& v, compute::command_queue& queue) const
{
assert(this->device() == queue.get_device());
compute::copy(this->begin(),
this->end(),
v.begin(),
queue);
queue.finish();
}
void fill(T value, compute::command_queue & queue)
{
assert(this->device() == queue.get_device());
compute::fill(this->begin(), this->end(), value, queue);
queue.finish();
}
private:
compute::device device_;
};
}}}
#endif