39 #include "hex-arrays.h" 70 : ArrayView<T>(), cl_handle_(nullptr) { }
72 : ArrayView<T>(n, const_cast<T*>(ptr)), cl_handle_(nullptr) { }
73 clArrayView (ArrayView<T> v, std::size_t i = 0, std::size_t n = 0)
74 : ArrayView<T>(v, i, n), cl_handle_(nullptr) { }
76 : ArrayView<T>(v), cl_handle_(v.cl_handle_) { }
78 : ArrayView<T>(v), cl_handle_(nullptr) { }
80 : ArrayView<T>(), cl_handle_(nullptr)
82 std::swap (ArrayView<T>::array_, v.ArrayView<T>::array_);
83 std::swap (ArrayView<T>::N_, v.ArrayView<T>::N_ );
84 std::swap (cl_handle_, v.cl_handle_ );
99 std::size_t
size ()
const {
return ArrayView<T>::size(); }
100 T
const &
operator [] (std::size_t i)
const {
return ArrayView<T>::operator[](i); }
101 T &
operator [] (std::size_t i) {
return ArrayView<T>::operator[](i); }
102 T
const *
data ()
const {
return ArrayView<T>::data(); }
103 T *
data () {
return ArrayView<T>::data(); }
104 const_iterator
begin ()
const {
return ArrayView<T>::begin(); }
105 iterator
begin () {
return ArrayView<T>::begin(); }
106 const_iterator
end ()
const {
return ArrayView<T>::end(); }
107 iterator
end () {
return ArrayView<T>::end(); }
108 T
const &
front (std::size_t i = 0)
const {
return ArrayView<T>::front(i); }
109 T &
front (std::size_t i = 0) {
return ArrayView<T>::front(i); }
110 T
const &
back (std::size_t i = 0)
const {
return ArrayView<T>::back(i); }
111 T &
back (std::size_t i = 0) {
return ArrayView<T>::back(i); }
119 return cl_handle_ !=
nullptr;
122 void connect (cl_context context, cl_mem_flags flags)
125 if (cl_handle_ !=
nullptr)
126 HexException(
"[clArray::connect] Array is already connected!");
129 cl_handle_ = clCreateBuffer(context, flags,
size() *
sizeof(T),
data(),
nullptr);
135 if (cl_handle_ !=
nullptr)
136 clReleaseMemObject(cl_handle_);
139 cl_handle_ =
nullptr;
144 return clEnqueueWriteBuffer(queue, cl_handle_, CL_TRUE, 0,
size() *
sizeof(T),
data(), 0,
nullptr,
nullptr);
149 return clEnqueueReadBuffer(queue, cl_handle_, CL_TRUE, 0,
size() *
sizeof(T),
data(), 0,
nullptr,
nullptr);
173 #define CL_ALIGNMENT 4096 174 template <
class T,
class Alloc = AlignedAllocator<T,CL_ALIGNMENT>>
class clArray :
public clArrayView<T>
176 template <class T, class Alloc = PlainAllocator<T>> class
clArray :
public clArrayView<T>
199 for (std::size_t i = 0; i < n; i++)
204 for (std::size_t i = 0; i < n; i++)
207 clArray (ArrayView<T> v, std::size_t i = 0, std::size_t n = 0)
210 for (std::size_t j = 0; j <
size(); j++)
216 for (
auto it = list.begin(); it != list.end(); it++)
238 for (std::size_t j = 0; j <
size(); j++)
246 if (newsize !=
size())
251 ArrayView<T>::array_ = Alloc::alloc(newsize);
252 ArrayView<T>::N_ = newsize;
296 void connect (cl_context context, cl_mem_flags flags = CL_MEM_COPY_HOST_PTR | CL_MEM_READ_WRITE)
322 #endif // WITH_OPENCL T & front(std::size_t i=0)
Definition: clarrays.h:109
clArray(std::initializer_list< T > list)
Definition: clarrays.h:213
clArray(clArray< T, Alloc > &&rvrf)
Definition: clarrays.h:223
T DataType
Definition: clarrays.h:61
cl_mem const & handle() const
Definition: clarrays.h:316
T * data()
Definition: clarrays.h:103
cl_mem const & handle() const
Definition: clarrays.h:152
clArray(ArrayView< T > &&rvrf)
Definition: clarrays.h:219
const_iterator begin() const
Definition: clarrays.h:104
const_iterator end() const
Definition: clarrays.h:280
T DataType
Definition: clarrays.h:185
clArrayView(clArrayView< T > &&v)
Definition: clarrays.h:79
clArrayView(ArrayView< T > &&v)
Definition: clarrays.h:77
iterator end()
Definition: clarrays.h:107
iterator begin()
Definition: clarrays.h:279
void connect(cl_context context, cl_mem_flags flags=CL_MEM_COPY_HOST_PTR|CL_MEM_READ_WRITE)
Definition: clarrays.h:296
T * data()
Definition: clarrays.h:277
clArrayView()
Definition: clarrays.h:69
T const * data() const
Definition: clarrays.h:102
Definition: clarrays.h:174
std::size_t size() const
Definition: clarrays.h:99
T & back(std::size_t i=0)
Definition: clarrays.h:285
iterator end()
Definition: clarrays.h:281
clArrayView(ArrayView< T > v, std::size_t i=0, std::size_t n=0)
Definition: clarrays.h:73
OpenCL array wrapper.
Definition: clarrays.h:48
void connect(cl_context context, cl_mem_flags flags)
Definition: clarrays.h:122
T const & front(std::size_t i=0) const
Definition: clarrays.h:108
const_iterator begin() const
Definition: clarrays.h:278
const_iterator end() const
Definition: clarrays.h:106
T const * const_iterator
Definition: clarrays.h:63
clArrayView(std::size_t n, T const *ptr)
Definition: clarrays.h:71
T const & back(std::size_t i=0) const
Definition: clarrays.h:110
cl_mem cl_handle_
Memory handle to the data copy on the GPU.
Definition: clarrays.h:53
T const * const_iterator
Definition: clarrays.h:187
T * iterator
Definition: clarrays.h:62
T const & back(std::size_t i=0) const
Definition: clarrays.h:284
T const * data() const
Definition: clarrays.h:276
clArray(std::size_t n, T x=T(0))
Definition: clarrays.h:197
T * iterator
Definition: clarrays.h:186
T const & front(std::size_t i=0) const
Definition: clarrays.h:282
T & front(std::size_t i=0)
Definition: clarrays.h:283
clArray(std::size_t n, T const *px)
Definition: clarrays.h:202
void disconnect()
Definition: clarrays.h:132
clArray(ArrayView< T > v, std::size_t i=0, std::size_t n=0)
Definition: clarrays.h:207
T const & operator[](std::size_t i) const
Definition: clarrays.h:100
clArrayView(clArrayView< T > const &v)
Definition: clarrays.h:75
void resize(std::size_t newsize)
Definition: clarrays.h:244
iterator begin()
Definition: clarrays.h:105
cl_int EnqueueUpload(cl_command_queue queue)
Definition: clarrays.h:142
T & back(std::size_t i=0)
Definition: clarrays.h:111
cl_int EnqueueUpload(cl_command_queue queue)
Definition: clarrays.h:311
cl_int EnqueueDownload(cl_command_queue queue)
Definition: clarrays.h:306
void disconnect()
Definition: clarrays.h:301
bool is_connected() const
Definition: clarrays.h:291
bool is_connected() const
Definition: clarrays.h:117
clArray()
Definition: clarrays.h:193
std::size_t size() const
Definition: clarrays.h:273
cl_int EnqueueDownload(cl_command_queue queue)
Definition: clarrays.h:147
virtual ~clArray()
Definition: clarrays.h:260
virtual ~clArrayView()
Definition: clarrays.h:91