PARALUTION  1.0.0
PARALUTION
base_vector.hpp
Go to the documentation of this file.
1 #ifndef PARALUTION_BASE_VECTOR_HPP_
2 #define PARALUTION_BASE_VECTOR_HPP_
3 
4 #include "backend_manager.hpp"
5 
6 namespace paralution {
7 
8 // Forward declarations
9 template <typename ValueType>
10 class HostVector;
11 
12 template <typename ValueType>
13 class AcceleratorVector;
14 
15 template <typename ValueType>
17 
18 template <typename ValueType>
20 
21 template <typename ValueType>
23 
25 template <typename ValueType>
26 class BaseVector {
27 
28 public:
29 
30  BaseVector();
31  virtual ~BaseVector();
32 
34  virtual void info(void) const = 0;
35 
37  int get_size(void) const;
38 
40  void set_backend(const Paralution_Backend_Descriptor local_backend);
41 
43  virtual bool Check(void) const;
44 
46  virtual void Allocate(const int n) = 0;
47 
49  virtual void SetDataPtr(ValueType **ptr, const int size) = 0;
51  virtual void LeaveDataPtr(ValueType **ptr) = 0;
52 
54  virtual void Assemble(const int *i, const ValueType *v,
55  int size, const int n);
56 
58  virtual void Clear(void) = 0;
60  virtual void Zeros(void) = 0;
62  virtual void Ones(void) = 0;
64  virtual void SetValues(const ValueType val) = 0;
65 
67  virtual void Permute(const BaseVector<int> &permutation) = 0;
69  virtual void PermuteBackward(const BaseVector<int> &permutation) = 0;
70 
72  virtual void CopyFrom(const BaseVector<ValueType> &vec) = 0;
74  virtual void CopyFromAsync(const BaseVector<ValueType> &vec);
76  virtual void CopyFromFloat(const BaseVector<float> &vec);
78  virtual void CopyFromDouble(const BaseVector<double> &vec);
80  virtual void CopyTo(BaseVector<ValueType> *vec) const = 0;
82  virtual void CopyToAsync(BaseVector<ValueType> *vec) const;
85  virtual void CopyFrom(const BaseVector<ValueType> &src,
86  const int src_offset,
87  const int dst_offset,
88  const int size) = 0;
89 
91  virtual void CopyFromPermute(const BaseVector<ValueType> &src,
92  const BaseVector<int> &permutation) = 0;
94  virtual void CopyFromPermuteBackward(const BaseVector<ValueType> &src,
95  const BaseVector<int> &permutation) = 0;
96 
97  virtual void CopyFromData(const ValueType *data);
98  virtual void CopyToData(ValueType *data) const;
99 
101  virtual bool Restriction(const BaseVector<ValueType> &vec_fine, const BaseVector<int> &map);
102 
104  virtual bool Prolongation(const BaseVector<ValueType> &vec_coarse, const BaseVector<int> &map);
105 
107  virtual void AddScale(const BaseVector<ValueType> &x, const ValueType alpha) = 0;
109  virtual void ScaleAdd(const ValueType alpha, const BaseVector<ValueType> &x) = 0;
111  virtual void ScaleAddScale(const ValueType alpha, const BaseVector<ValueType> &x,
112  const ValueType beta) = 0;
113 
114  virtual void ScaleAddScale(const ValueType alpha, const BaseVector<ValueType> &x,
115  const ValueType beta,
116  const int src_offset,
117  const int dst_offset,
118  const int size) = 0;
119 
121  virtual void ScaleAdd2(const ValueType alpha, const BaseVector<ValueType> &x,
122  const ValueType beta, const BaseVector<ValueType> &y,
123  const ValueType gamma) = 0;
125  virtual void Scale(const ValueType alpha) = 0;
127  virtual void PartialSum(const BaseVector<ValueType> &x) = 0;
129  virtual ValueType Dot(const BaseVector<ValueType> &x) const = 0;
131  virtual ValueType DotNonConj(const BaseVector<ValueType> &x) const = 0;
133  virtual ValueType Norm(void) const = 0;
135  virtual ValueType Reduce(void) const = 0;
137  virtual ValueType Asum(void) const = 0;
139  virtual int Amax(ValueType &value) const = 0;
141  virtual void PointWiseMult(const BaseVector<ValueType> &x) = 0;
143  virtual void PointWiseMult(const BaseVector<ValueType> &x, const BaseVector<ValueType> &y) = 0;
144  virtual void Power(const double power) = 0;
145 
146 protected:
147 
149  int size_;
150 
153 
154 };
155 
156 template <typename ValueType>
157 class AcceleratorVector : public BaseVector<ValueType> {
158 
159 public:
160 
162  virtual ~AcceleratorVector();
163 
165  virtual void CopyFromHost(const HostVector<ValueType> &src) = 0;
167  virtual void CopyToHost(HostVector<ValueType> *dst) const = 0;
168 
170  virtual void CopyFromHostAsync(const HostVector<ValueType> &src);
172  virtual void CopyToHostAsync(HostVector<ValueType> *dst) const;
173 
174 };
175 
176 
177 }
178 
179 #endif // PARALUTION_BASE_VECTOR_HPP_
virtual void CopyFromPermuteBackward(const BaseVector< ValueType > &src, const BaseVector< int > &permutation)=0
Copy a vector under specified permutation (backward permutation)
virtual void CopyToData(ValueType *data) const
Definition: base_vector.cpp:77
IndexType i
Definition: cuda_kernels_coo.hpp:195
virtual int Amax(ValueType &value) const =0
Compute the absolute max value of the vector, return = max(|this|)
int get_size(void) const
Returns the size of the vector.
Definition: base_vector.cpp:31
virtual void CopyTo(BaseVector< ValueType > *vec) const =0
Copy values to another vector.
virtual void CopyFromPermute(const BaseVector< ValueType > &src, const BaseVector< int > &permutation)=0
Copy a vector under specified permutation (forward permutation)
virtual void PointWiseMult(const BaseVector< ValueType > &x)=0
Perform point-wise multiplication (element-wise) of type this = this * x.
virtual void SetValues(const ValueType val)=0
Set the values of the vector to given argument.
virtual void LeaveDataPtr(ValueType **ptr)=0
Get a pointer from the vector data and free the vector object.
Definition: backend_manager.hpp:10
Backend descriptor - keeps information about the hardware - OpenMP (threads); CUDA (blocksizes...
Definition: backend_manager.hpp:19
Definition: base_vector.hpp:16
virtual bool Restriction(const BaseVector< ValueType > &vec_fine, const BaseVector< int > &map)
Restriction operator based on restriction mapping vector.
Definition: base_vector.cpp:110
virtual void CopyToHost(HostVector< ValueType > *dst) const =0
Copy (host vector) from accelerator vector.
virtual ~BaseVector()
Definition: base_vector.cpp:23
virtual void Ones(void)=0
Set the values of the vector to one.
virtual void PermuteBackward(const BaseVector< int > &permutation)=0
Perform inplace permutation (backward) of the vector.
const IndexType const IndexType const IndexType const ValueType const ValueType const ValueType ValueType * y
Definition: cuda_kernels_coo.hpp:91
Definition: base_vector.hpp:10
virtual void Scale(const ValueType alpha)=0
Perform vector scaling this = alpha*this.
virtual void CopyFromFloat(const BaseVector< float > &vec)
Copy values from another (float) vector.
Definition: base_vector.cpp:87
virtual void Assemble(const int *i, const ValueType *v, int size, const int n)
Assembling.
Definition: base_vector.cpp:56
void power(const int mic_dev, const int size, const double val, ValueType *vec)
Definition: mic_vector_kernel.cpp:241
virtual void CopyFrom(const BaseVector< ValueType > &vec)=0
Copy values from another vector.
virtual bool Prolongation(const BaseVector< ValueType > &vec_coarse, const BaseVector< int > &map)
Prolongation operator based on restriction(!) mapping vector.
Definition: base_vector.cpp:116
virtual void Zeros(void)=0
Set the values of the vector to zero.
virtual void info(void) const =0
Shows info about the object.
virtual void AddScale(const BaseVector< ValueType > &x, const ValueType alpha)=0
Perform vector update of type this = this + alpha*x.
Definition: base_vector.hpp:22
virtual void CopyFromAsync(const BaseVector< ValueType > &vec)
Async copy values from another vector.
Definition: base_vector.cpp:123
virtual bool Check(void) const
Check if everything is ok.
Definition: base_vector.cpp:45
virtual void SetDataPtr(ValueType **ptr, const int size)=0
Initialize a vector with externally allocated data.
virtual void Permute(const BaseVector< int > &permutation)=0
Perform inplace permutation (forward) of the vector.
Definition: backend_manager.cpp:43
virtual ValueType Reduce(void) const =0
Reduce vector.
virtual void ScaleAdd2(const ValueType alpha, const BaseVector< ValueType > &x, const ValueType beta, const BaseVector< ValueType > &y, const ValueType gamma)=0
Perform vector update of type this = alpha*this + x*beta + y*gamma.
virtual ValueType Asum(void) const =0
Compute sum of absolute values of the vector (L1 norm), return = sum(|this|)
virtual void PartialSum(const BaseVector< ValueType > &x)=0
Compute partial sum.
const IndexType const IndexType const IndexType const ValueType const ValueType const ValueType * x
Definition: cuda_kernels_coo.hpp:91
virtual void CopyToHostAsync(HostVector< ValueType > *dst) const
Async copy (host vector) from accelerator vector.
Definition: base_vector.cpp:166
virtual void Allocate(const int n)=0
Allocate a local vector with name and size.
virtual ValueType Dot(const BaseVector< ValueType > &x) const =0
Compute dot (scalar) product, return this^T y.
virtual void CopyFromHostAsync(const HostVector< ValueType > &src)
Async copy (accelerator vector) from host vector.
Definition: base_vector.cpp:157
Paralution_Backend_Descriptor local_backend_
Backend descriptor (local copy)
Definition: base_vector.hpp:152
int size_
The size of the vector.
Definition: base_vector.hpp:149
virtual ValueType DotNonConj(const BaseVector< ValueType > &x) const =0
Compute non-conjugated dot (scalar) product, return this^T y.
virtual void CopyFromHost(const HostVector< ValueType > &src)=0
Copy (accelerator vector) from host vector.
virtual void Power(const double power)=0
Definition: base_vector.hpp:19
Base class for all host/accelerator vectors.
Definition: base_vector.hpp:26
virtual ValueType Norm(void) const =0
Compute L2 norm of the vector, return = srqt(this^T this)
virtual void CopyFromDouble(const BaseVector< double > &vec)
Copy values from another (double) vector.
Definition: base_vector.cpp:98
virtual void ScaleAdd(const ValueType alpha, const BaseVector< ValueType > &x)=0
Perform vector update of type this = alpha*this + x.
virtual void Clear(void)=0
Clear (free) the vector.
virtual void ScaleAddScale(const ValueType alpha, const BaseVector< ValueType > &x, const ValueType beta)=0
Perform vector update of type this = alpha*this + x*beta.
virtual void CopyToAsync(BaseVector< ValueType > *vec) const
Async copy values to another vector.
Definition: base_vector.cpp:133
AcceleratorVector()
Definition: base_vector.cpp:148
virtual ~AcceleratorVector()
Definition: base_vector.cpp:152
void set_backend(const Paralution_Backend_Descriptor local_backend)
Copy the backend descriptor information.
Definition: base_vector.cpp:38
BaseVector()
Definition: base_vector.cpp:13
virtual void CopyFromData(const ValueType *data)
Definition: base_vector.cpp:67