22 #include "skepu/src/malloc_allocator.h"
27 #include <OpenCL/opencl.h>
66 typedef typename std::vector<T>::size_type size_type;
68 typedef ptrdiff_t difference_type;
71 typedef T
const & const_reference;
80 friend std::ostream& operator<< (std::ostream& output, Vector<T>& vec)
82 for(size_type i = 0; i < vec.size(); ++i)
84 output<<vec.
at(i) <<
" ";
105 for(size_type i = 0; i <
size(); i++)
107 m_data[i] = (T)( rand() %
max +
min );
119 void save(
const std::string& filename)
121 std::ofstream file(filename.c_str());
125 for(size_type i = 0; i <
size(); ++i)
133 std::cout<<
"Unable to open file\n";
146 void load(
const std::string& filename, size_type numElements = 0)
148 std::ifstream file(filename.c_str());
154 std::istringstream ss(line);
169 for(size_type i = 0; i < numElements; ++i)
180 std::cout<<
"Unable to open file\n";
204 explicit Vector(size_type num,
const T& val = T());
206 Vector(T *
const ptr, size_type
size,
bool deallocEnabled =
true);
220 const T&
operator[](
const size_type index)
const;
227 bool operator<(const Vector<T>& c1);
229 bool operator<=(const Vector<T>& c1);
242 size_type
size()
const;
246 void resize(size_type num, T val = T());
254 proxy_elem
at(size_type loc);
255 const T&
at(size_type loc)
const;
258 const T&
back()
const;
261 const T&
front()
const;
265 void assign( size_type num,
const T& val );
267 template <
typename input_iterator>
268 void assign( input_iterator start, input_iterator
end );
272 iterator erase( iterator loc );
273 iterator erase( iterator start, iterator
end );
275 iterator insert( iterator loc,
const T& val );
277 void insert( iterator loc, size_type num,
const T& val );
295 device_pointer_type_cl
updateDevice_CL(T* start, size_type numElements, Device_CL* device,
bool copy);
297 bool isVectorOnDevice_CL(Device_CL* device,
bool multi=
false);
302 device_pointer_type_cu
updateDevice_CU(T* start, size_type numElements,
unsigned int deviceID,
bool copy,
bool writeAccess,
bool markOnlyLocalCopiesInvalid =
false,
unsigned int streamID = 0);
313 const T&
operator()(
const size_type index)
const;
325 std::string m_nameVerbose;
328 void setValidFlag(
bool val)
335 mutable bool m_valid;
336 size_type m_capacity;
338 bool m_deallocEnabled;
339 bool m_noValidDeviceCopy;
343 std::map<std::pair< cl_device_id, T* >, device_pointer_type_cl > m_deviceMemPointers_CL;
348 std::map<std::pair< T*, size_type >, device_pointer_type_cu > m_deviceMemPointers_CU[
MAX_GPU_DEVICES];
351 mutable std::map<std::pair< T*, size_type >, device_pointer_type_cu > m_deviceMemPointers_Modified_CU[
MAX_GPU_DEVICES];
357 void updateHost_CL()
const;
358 void invalidateDeviceData_CL();
359 void releaseDeviceAllocations_CL();
363 void updateHost_CU(
int deviceID = -1)
const;
364 void invalidateDeviceData_CU(
int deviceID = -1);
365 void releaseDeviceAllocations_CU(
int deviceID = -1);
374 #include "src/vector_iterator.inl"
375 #include "src/vector_proxy.inl"
376 #include "src/vector.inl"
381 #include "src/vector_cl.inl"
385 #include "src/vector_cu.inl"
T & operator()(const size_type index)
Definition: vector.inl:639
Contains a class declaration for an object which represents an OpenCL device memory allocation for co...
Contains a class declaration for an object which represents an CUDA device memory allocation for Vect...
void save(const std::string &filename)
Saves content of vector to a file.
Definition: vector.h:119
void pop_back()
Definition: vector.inl:571
iterator begin()
Definition: vector.inl:278
bool empty() const
Definition: vector.inl:349
#define MAX_GPU_DEVICES
Definition: globals.h:43
void load(const std::string &filename, size_type numElements=0)
Loads the vector from a file.
Definition: vector.h:146
~Vector()
Definition: vector.inl:92
size_type size() const
Definition: vector.inl:308
void randomize(int min=0, int max=RAND_MAX)
Randomizes the vector.
Definition: vector.h:101
A class representing an OpenCL device memory allocation for container.
Definition: device_mem_pointer_cl.h:38
void assign(size_type num, const T &val)
Definition: vector.inl:455
void updateHostAndReleaseDeviceAllocations()
Definition: vector.inl:187
proxy_elem back()
Definition: vector.inl:410
T min(T a, T b)
Definition: mapoverlap_convol_kernels.h:212
bool operator>(const Vector< T > &c1)
Definition: vector.inl:722
bool operator>=(const Vector< T > &c1)
Definition: vector.inl:760
bool operator==(const Vector< T > &c1)
Definition: vector.inl:657
void resize(size_type num, T val=T())
Definition: vector.inl:326
iterator end()
Definition: vector.inl:288
proxy_elem operator[](const size_type index)
Definition: vector.inl:213
device_pointer_type_cu updateDevice_CU(T *start, size_type numElements, unsigned int deviceID, bool copy, bool writeAccess, bool markOnlyLocalCopiesInvalid=false, unsigned int streamID=0)
Update device with vector content.
Definition: vector_cu.inl:162
void releaseDeviceAllocations()
Definition: vector.inl:170
proxy_elem at(size_type loc)
Definition: vector.inl:387
void flush_CL()
Flushes the vector.
Definition: vector_cl.inl:77
T max(T a, T b)
Definition: mapoverlap_convol_kernels.h:203
Contains a class declaration for the Matrix container.
void flush()
Definition: vector.inl:619
A vector container class, implemented as a wrapper for std::vector.
Definition: vector.h:61
bool isModified_CU(unsigned int deviceID)
Definition: vector_cu.inl:437
A class representing a CUDA device memory allocation for container.
Definition: device_mem_pointer_cu.h:58
void invalidateDeviceData()
Definition: vector.inl:137
size_type max_size() const
Definition: vector.inl:317
Vector()
Definition: vector.inl:13
Contains a class declaration for Environment class.
Vector< T > & operator=(const Vector< T > &other)
Definition: vector.inl:234
void push_back(const T &val)
Definition: vector.inl:582
bool isVectorOnDevice_CU(unsigned int deviceID)
Definition: vector_cu.inl:344
size_type capacity() const
Definition: vector.inl:299
void reserve(size_type size)
Definition: vector.inl:358
device_pointer_type_cl updateDevice_CL(T *start, size_type numElements, Device_CL *device, bool copy)
Update device with vector content.
Definition: vector_cl.inl:20
void copyDataToAnInvalidDeviceCopy(DeviceMemPointer_CU< T > *copy, unsigned int deviceID, unsigned int streamID=0)
Used by updateDevice_CU function to copy data to a device copy.. the device copy could be a new one (...
Definition: vector_cu.inl:16
bool operator!=(const Vector< T > &c1)
Definition: vector.inl:680
void updateHostAndInvalidateDevice()
Definition: vector.inl:160
void flush_CU()
Flushes the vector.
Definition: vector_cu.inl:359
void updateHost() const
Definition: vector.inl:116
void swap(Vector< T > &from)
Definition: vector.inl:596
void clear()
Definition: vector.inl:495
proxy_elem front()
Definition: vector.inl:433