22 #include "skepu/src/malloc_allocator.h"
49 friend std::ostream& operator<< (std::ostream& output, Vector<T>& vec)
53 for(
unsigned int i = 0; i < vec.size(); ++i)
55 output<<vec.at(i) <<
" ";
76 for(
unsigned int i = 0; i < m_data.size(); i++)
78 m_data.at(i) = (T)( rand() % max + min );
90 void save(
const std::string& filename)
92 std::ofstream file(filename.c_str());
96 for(
unsigned int i = 0; i <
size(); ++i)
104 std::cout<<
"Unable to open file\n";
117 void load(
const std::string& filename,
int numElements = 0)
119 std::ifstream file(filename.c_str());
125 std::istringstream ss(line);
140 for(
int i = 0; i < numElements; ++i)
151 std::cout<<
"Unable to open file\n";
160 void release_acquire()
166 DEBUG_TEXT_LEVEL1(
"***** VECTOR RELEASE **** parts: "<< parts <<
"\n")
170 assert (parts == starpu_data_get_nb_children(vector_handle));
171 for (
int x = 0; x < parts; x++)
173 starpu_data_release(starpu_data_get_sub_data(vector_handle, 1, x));
178 DEBUG_TEXT_LEVEL1(
"***** VECTOR RELEASE ****\n")
179 starpu_data_release(vector_handle);
188 starpu_data_handle_t vector_handle;
190 mutable
bool isOnStarPU;
191 mutable
bool isAcquire;
192 mutable
bool isReadBack;
193 mutable
bool isWriteBack;
194 struct starpu_data_filter vector_filter;
195 mutable enum starpu_data_access_mode mode;
203 starpu_data_handle_t registerVector()
210 starpu_vector_data_register(&vector_handle, 0, (uintptr_t)&m_data[0], m_data.size(),
sizeof(m_data[0]));
212 DEBUG_TEXT_LEVEL1(
"***** VECTOR REGISTERING **** "<< m_data.size()<<
"\n")
216 starpu_data_unpartition(vector_handle, 0);
217 DEBUG_TEXT_LEVEL1(
"***** VECTOR UN-PARTITIONING **** parts: "<< parts <<
"\n")
220 return vector_handle;
236 starpu_data_unpartition(vector_handle, 0);
241 starpu_data_unregister(vector_handle);
244 starpu_data_unregister_no_coherency(vector_handle);
261 starpu_vector_data_register(&vector_handle, 0, (uintptr_t)&m_data[0], m_data.size(),
sizeof(m_data[0]));
263 DEBUG_TEXT_LEVEL1(
"***** VECTOR REGISTERING **** "<< m_data.size()<<
"\n")
268 return vector_handle;
272 starpu_data_unpartition(vector_handle, 0);
273 DEBUG_TEXT_LEVEL1(
"***** VECTOR UNPARTITIONING **** parts: "<< parts <<
"\n")
278 vector_filter.nchildren = _parts;
279 starpu_data_partition(vector_handle, &vector_filter);
280 DEBUG_TEXT_LEVEL1(
"***** VECTOR PARTITIONING **** parts: "<< _parts <<
"\n")
284 return vector_handle;
289 #ifdef USE_PINNED_MEMORY
290 typedef typename std::vector<T, malloc_allocator<T> >::size_type size_type;
291 typedef typename std::vector<T, malloc_allocator<T> >::value_type value_type;
292 typedef typename std::vector<T, malloc_allocator<T> >::difference_type difference_type;
293 typedef typename std::vector<T, malloc_allocator<T> >::pointer pointer;
294 typedef typename std::vector<T, malloc_allocator<T> >::reference reference;
295 typedef typename std::vector<T, malloc_allocator<T> >::const_reference const_reference;
296 typedef typename std::vector<T, malloc_allocator<T> >::const_iterator const_iterator;
297 typedef typename std::vector<T, malloc_allocator<T> >::const_reverse_iterator const_reverse_iterator;
299 typedef typename std::vector<T>::size_type size_type;
300 typedef typename std::vector<T>::value_type value_type;
301 typedef typename std::vector<T>::difference_type difference_type;
302 typedef typename std::vector<T>::pointer pointer;
303 typedef typename std::vector<T>::reference reference;
304 typedef typename std::vector<T>::const_reference const_reference;
305 typedef typename std::vector<T>::const_iterator const_iterator;
306 typedef typename std::vector<T>::const_reverse_iterator const_reverse_iterator;
316 explicit Vector(size_type num,
const T& val = T(),
bool redVec =
false);
318 template<
typename input_iterator>
319 Vector(input_iterator start, input_iterator
end);
328 typedef std::reverse_iterator<iterator> reverse_iterator;
335 const T&
operator[](
const size_type index)
const;
340 bool operator<(const Vector<T>& c1);
342 bool operator<=(const Vector<T>& c1);
347 T *getRawType() {
return &m_data[0]; }
352 const_iterator
begin()
const;
355 const_iterator
end()
const;
357 reverse_iterator
rbegin();
358 const_reverse_iterator
rbegin()
const;
360 reverse_iterator
rend();
361 const_reverse_iterator
rend()
const;
367 size_type
size()
const;
371 void resize(size_type num, T val = T());
379 proxy_elem
at(size_type loc);
380 const T&
at(size_type loc)
const;
383 const T&
back()
const;
386 const T&
front()
const;
390 void assign( size_type num,
const T& val );
392 template <
typename input_iterator>
393 void assign( input_iterator start, input_iterator
end );
397 iterator erase( iterator loc );
398 iterator erase( iterator start, iterator
end );
400 iterator insert( iterator loc,
const T& val );
401 void insert( iterator loc, size_type num,
const T& val );
403 template <
typename input_iterator>
404 void insert( iterator loc, input_iterator start, input_iterator
end );
410 void swap(Vector<T>& from);
428 #ifdef USE_PINNED_MEMORY
429 mutable std::vector<T, malloc_allocator<T> > m_data;
431 mutable std::vector<T> m_data;
438 #include "src/vector_iterator.inl"
439 #include "src/vector_proxy.inl"
440 #include "src/vector.inl"
reverse_iterator rend()
Definition: vector.inl:370
T & operator()(const size_type index)
Definition: vector.inl:696
Defines a few macros that can be used to output text when debugging. The macros use std::cerr...
void save(const std::string &filename)
Saves content of vector to a file.
Definition: vector.h:90
void pop_back()
Definition: vector.inl:632
iterator begin()
Definition: vector.inl:316
bool empty() const
Definition: vector.inl:430
~Vector()
Definition: vector.inl:145
void load(const std::string &filename, int numElements=0)
Loads the vector from a file.
Definition: vector.h:117
size_type size() const
Definition: vector.inl:398
void randomize(int min=0, int max=RAND_MAX)
Randomizes the vector.
Definition: vector.h:72
void assign(size_type num, const T &val)
Definition: vector.inl:521
proxy_elem back()
Definition: vector.inl:476
bool operator>(const Vector< T > &c1)
Definition: vector.inl:750
bool operator>=(const Vector< T > &c1)
Definition: vector.inl:774
bool operator==(const Vector< T > &c1)
Definition: vector.inl:714
void resize(size_type num, T val=T())
Definition: vector.inl:416
reverse_iterator rbegin()
Definition: vector.inl:352
iterator end()
Definition: vector.inl:334
proxy_elem operator[](const size_type index)
Definition: vector.inl:271
proxy_elem at(size_type loc)
Definition: vector.inl:453
void flush()
Definition: vector.inl:682
A vector container class, implemented as a wrapper for std::vector. It is configured to use StarPU DS...
Definition: vector.h:40
void acquireReadWrite()
Ensure that data is available for reading and writing purpose on CPU First updates the vector from it...
Definition: vector.inl:206
starpu_data_handle_t registerPartitions(int _parts)
To register and partition Vector with StarPU runtime.
Definition: vector.h:255
size_type max_size() const
Definition: vector.inl:407
Vector()
Definition: vector.inl:55
Vector< T > & operator=(const Vector< T > &other)
Definition: vector.inl:291
void push_back(const T &val)
Definition: vector.inl:646
size_type capacity() const
Definition: vector.inl:389
void reserve(size_type size)
Definition: vector.inl:439
void unregisterVector(bool update=true)
Definition: vector.h:228
bool operator!=(const Vector< T > &c1)
Definition: vector.inl:726
void acquireRead() const
Ensure that data is most updated for reading purpose on CPU.
Definition: vector.inl:173
void swap(Vector< T > &from)
Definition: vector.inl:660
void clear()
Definition: vector.inl:548
proxy_elem front()
Definition: vector.inl:499