PARALUTION  1.0.0
PARALUTION
local_vector.hpp
Go to the documentation of this file.
1 #ifndef PARALUTION_LOCAL_VECTOR_HPP_
2 #define PARALUTION_LOCAL_VECTOR_HPP_
3 
4 #include "vector.hpp"
5 #include "base_vector.hpp"
6 #include "host/host_vector.hpp"
7 
8 namespace paralution {
9 
10 template <typename ValueType>
11 class LocalMatrix;
12 
13 template <typename ValueType>
14 class LocalStencil;
15 
16 // Local vector
17 template <typename ValueType>
18 class LocalVector : public Vector<ValueType> {
19 
20 public:
21 
22  LocalVector();
23  virtual ~LocalVector();
24 
25  virtual void MoveToAccelerator(void);
26  virtual void MoveToAcceleratorAsync(void);
27  virtual void MoveToHost(void);
28  virtual void MoveToHostAsync(void);
29  virtual void Sync(void);
30 
31  virtual void info(void) const;
32  virtual int get_size(void) const;
33 
34  virtual bool Check(void) const;
35 
37  virtual void Allocate(std::string name, const int size);
38 
40  void SetDataPtr(ValueType **ptr, std::string name, const int size);
42  void LeaveDataPtr(ValueType **ptr);
43 
45  void Assemble(const int *i, const ValueType *v,
46  int size, std::string name, const int n=0);
47 
48  virtual void Clear();
49  virtual void Zeros();
50  virtual void Ones();
51  virtual void SetValues(const ValueType val);
52  virtual void SetRandom(const ValueType a = -1.0, const ValueType b = 1.0, const int seed = 0);
53 
55  ValueType& operator[](const int i);
57  const ValueType& operator[](const int i) const;
58 
59  virtual void ReadFileASCII(const std::string filename);
60  virtual void WriteFileASCII(const std::string filename) const;
61  virtual void ReadFileBinary(const std::string filename);
62  virtual void WriteFileBinary(const std::string filename) const;
63 
64  virtual void CopyFrom(const LocalVector<ValueType> &src);
65  virtual void CopyFromAsync(const LocalVector<ValueType> &src);
66  virtual void CopyFromFloat(const LocalVector<float> &src);
67  virtual void CopyFromDouble(const LocalVector<double> &src);
68 
70  void CopyFrom(const LocalVector<ValueType> &src,
71  const int src_offset,
72  const int dst_offset,
73  const int size);
74 
76  void CopyFromPermute(const LocalVector<ValueType> &src,
77  const LocalVector<int> &permutation);
78 
80  void CopyFromPermuteBackward(const LocalVector<ValueType> &src,
81  const LocalVector<int> &permutation);
82 
84  void CloneFrom(const LocalVector<ValueType> &src);
85 
88  void CopyFromData(const ValueType *data);
89 
92  void CopyToData(ValueType *data) const;
93 
95  void Permute(const LocalVector<int> &permutation);
96 
98  void PermuteBackward(const LocalVector<int> &permutation);
99 
101  void Restriction(const LocalVector<ValueType> &vec_fine, const LocalVector<int> &map);
102 
104  void Prolongation(const LocalVector<ValueType> &vec_coarse, const LocalVector<int> &map);
105 
106  virtual void AddScale(const LocalVector<ValueType> &x, const ValueType alpha);
107  virtual void ScaleAdd(const ValueType alpha, const LocalVector<ValueType> &x);
108  virtual void ScaleAddScale(const ValueType alpha, const LocalVector<ValueType> &x, const ValueType beta);
110  void ScaleAddScale(const ValueType alpha, const LocalVector<ValueType> &x, const ValueType beta,
111  const int src_offset,
112  const int dst_offset,
113  const int size);
114 
115  virtual void ScaleAdd2(const ValueType alpha, const LocalVector<ValueType> &x, const ValueType beta, const LocalVector<ValueType> &y, const ValueType gamma);
116  virtual void Scale(const ValueType alpha);
117  virtual void PartialSum(const LocalVector<ValueType> &x);
118  virtual ValueType Dot(const LocalVector<ValueType> &x) const;
119  virtual ValueType DotNonConj(const LocalVector<ValueType> &x) const;
120  virtual ValueType Norm(void) const;
121  virtual ValueType Reduce(void) const;
122  virtual ValueType Asum(void) const;
123  virtual int Amax(ValueType &value) const;
124  virtual void PointWiseMult(const LocalVector<ValueType> &x);
125  virtual void PointWiseMult(const LocalVector<ValueType> &x, const LocalVector<ValueType> &y);
126  virtual void Power(const double power);
127 
128 protected:
129 
130  virtual bool is_host(void) const;
131  virtual bool is_accel(void) const;
132 
133 private:
134 
137 
140 
143 
144  friend class LocalVector<double>;
145  friend class LocalVector<float>;
146  friend class LocalVector<std::complex<double> >;
147  friend class LocalVector<std::complex<float> >;
148  friend class LocalVector<int>;
149 
150  friend class LocalMatrix<double>;
151  friend class LocalMatrix<float>;
152  friend class LocalMatrix<std::complex<double> >;
153  friend class LocalMatrix<std::complex<float> >;
154 
155  friend class LocalStencil<double>;
156  friend class LocalStencil<float>;
157  friend class LocalStencil<std::complex<double> >;
158  friend class LocalStencil<std::complex<float> >;
159 
160  friend class LocalMatrix<ValueType>;
161 
162 };
163 
164 
165 }
166 
167 #endif // PARALUTION_LOCAL_VECTOR_HPP_
virtual void info(void) const
Print the object information (properties, backends)
Definition: local_vector.cpp:515
virtual void CopyFrom(const LocalVector< ValueType > &src)
Copy values from another local vector.
Definition: local_vector.cpp:248
virtual ValueType Dot(const LocalVector< ValueType > &x) const
Compute dot (scalar) product, return this^T y.
Definition: local_vector.cpp:745
void Permute(const LocalVector< int > &permutation)
Perform inplace permutation (forward) of the vector.
Definition: local_vector.cpp:922
virtual void PartialSum(const LocalVector< ValueType > &x)
Computes partial sum.
Definition: local_vector.cpp:729
IndexType i
Definition: cuda_kernels_coo.hpp:195
virtual void Allocate(std::string name, const int size)
Allocate a local vector with name and size.
Definition: local_vector.cpp:53
virtual void Power(const double power)
Perform power operation to a vector.
Definition: local_vector.cpp:1098
virtual void AddScale(const LocalVector< ValueType > &x, const ValueType alpha)
Perform vector update of type this = this + alpha*x.
Definition: local_vector.cpp:627
virtual bool is_accel(void) const
Return true if the object is on the accelerator.
Definition: local_vector.cpp:306
virtual void ScaleAdd(const ValueType alpha, const LocalVector< ValueType > &x)
Perform vector update of type this = alpha*this + x.
Definition: local_vector.cpp:643
virtual void SetRandom(const ValueType a=-1.0, const ValueType b=1.0, const int seed=0)
Set random values from interval [a,b].
Definition: local_vector.cpp:220
void CopyFromPermute(const LocalVector< ValueType > &src, const LocalVector< int > &permutation)
Copy a local vector under specified permutation (forward permutation)
Definition: local_vector.cpp:956
virtual ValueType Asum(void) const
Compute the sum of the absolute values of the vector (L1 norm), return = sum(|this|) ...
Definition: local_vector.cpp:809
virtual int get_size(void) const
Return the size of the vector.
Definition: local_vector.cpp:46
virtual void SetValues(const ValueType val)
Set the values of the vector to given argument.
Definition: local_vector.cpp:208
Definition: backend_manager.hpp:10
virtual void WriteFileASCII(const std::string filename) const
Write vector to ASCII file.
Definition: local_vector.cpp:560
void CopyFromData(const ValueType *data)
Copy (import) vector described in one array (values) The object data has to be allocated (call Alloca...
Definition: local_vector.cpp:894
virtual ValueType Reduce(void) const
Reduce the vector.
Definition: local_vector.cpp:795
virtual void CopyFromFloat(const LocalVector< float > &src)
Copy values from float vector.
Definition: local_vector.cpp:277
virtual ValueType Norm(void) const
Compute L2 norm of the vector, return = srqt(this^T this)
Definition: local_vector.cpp:781
virtual void PointWiseMult(const LocalVector< ValueType > &x)
Perform point-wise multiplication (element-wise) of type this = this * x.
Definition: local_vector.cpp:838
virtual void MoveToAccelerator(void)
Move the object to the Accelerator backend.
Definition: local_vector.cpp:327
const IndexType const IndexType const IndexType const ValueType const ValueType const ValueType ValueType * y
Definition: cuda_kernels_coo.hpp:91
virtual void MoveToAcceleratorAsync(void)
Move the object to the Accelerator backend with async move.
Definition: local_vector.cpp:381
virtual void ScaleAddScale(const ValueType alpha, const LocalVector< ValueType > &x, const ValueType beta)
Perform vector update of type this = alpha*this + x*beta.
Definition: local_vector.cpp:659
Definition: base_vector.hpp:10
virtual void MoveToHostAsync(void)
Move the object to the Host backend with async move.
Definition: local_vector.cpp:408
friend class LocalVector< float >
Definition: local_vector.hpp:145
void power(const int mic_dev, const int size, const double val, ValueType *vec)
Definition: mic_vector_kernel.cpp:241
void CopyToData(ValueType *data) const
Copy (export) vector described in one array (values) The output array has to be allocated.
Definition: local_vector.cpp:909
friend class LocalVector< double >
Definition: local_vector.hpp:144
void Assemble(const int *i, const ValueType *v, int size, std::string name, const int n=0)
Assembling.
Definition: local_vector.cpp:119
virtual bool Check(void) const
Return true if the vector is ok (empty vector is also ok) and false if some of values are NaN...
Definition: local_vector.cpp:92
HostVector< ValueType > * vector_host_
Host Vector.
Definition: local_vector.hpp:139
virtual void Zeros()
Set the values of the vector to zero.
Definition: local_vector.cpp:184
virtual ~LocalVector()
Definition: local_vector.cpp:35
ValueType & operator[](const int i)
Access operator (only for host data!)
Definition: local_vector.cpp:489
virtual void MoveToHost(void)
Move the object to the Host backend.
Definition: local_vector.cpp:354
void LeaveDataPtr(ValueType **ptr)
Get a pointer from the vector data and free the vector object.
Definition: local_vector.cpp:162
virtual ValueType DotNonConj(const LocalVector< ValueType > &x) const
Compute non-conjugate dot (scalar) product, return this^T y.
Definition: local_vector.cpp:763
Definition: backend_manager.cpp:43
virtual void CopyFromDouble(const LocalVector< double > &src)
Copy values from double vector.
Definition: local_vector.cpp:288
virtual void CopyFromAsync(const LocalVector< ValueType > &src)
Async copy.
Definition: local_vector.cpp:261
void Restriction(const LocalVector< ValueType > &vec_fine, const LocalVector< int > &map)
Restriction operator based on restriction mapping vector.
Definition: local_vector.cpp:998
Definition: local_stencil.hpp:18
AcceleratorVector< ValueType > * vector_accel_
Accelerator Vector.
Definition: local_vector.hpp:142
BaseVector< ValueType > * vector_
Pointer from the base vector class to the current allocated vector (host_ or accel_) ...
Definition: local_vector.hpp:136
void CopyFromPermuteBackward(const LocalVector< ValueType > &src, const LocalVector< int > &permutation)
Copy a local vector under specified permutation (backward permutation)
Definition: local_vector.cpp:977
const IndexType const IndexType const IndexType const ValueType const ValueType const ValueType * x
Definition: cuda_kernels_coo.hpp:91
LocalVector()
Definition: local_vector.cpp:20
friend class LocalVector< int >
Definition: local_vector.hpp:148
Definition: local_matrix.hpp:15
virtual int Amax(ValueType &value) const
Compute the absolute max value of the vector, return = index(max(|this|))
Definition: local_vector.cpp:823
virtual void Clear()
Clear (free) the vector.
Definition: local_vector.cpp:174
b(1:n)
Base class for all host/accelerator vectors.
Definition: base_vector.hpp:26
virtual void Scale(const ValueType alpha)
Perform vector scaling this = alpha*this.
Definition: local_vector.cpp:717
void PermuteBackward(const LocalVector< int > &permutation)
Perform inplace permutation (backward) of the vector.
Definition: local_vector.cpp:939
virtual bool is_host(void) const
Return true if the object is on the host.
Definition: local_vector.cpp:299
virtual void WriteFileBinary(const std::string filename) const
Write vector to binary file.
Definition: local_vector.cpp:604
virtual void Sync(void)
Definition: local_vector.cpp:435
void Prolongation(const LocalVector< ValueType > &vec_coarse, const LocalVector< int > &map)
Prolongation operator based on restriction(!) mapping vector.
Definition: local_vector.cpp:1048
Definition: host_vector.hpp:13
virtual void ReadFileBinary(const std::string filename)
Read vector from binary file.
Definition: local_vector.cpp:583
virtual void ReadFileASCII(const std::string filename)
Read vector from ASCII file.
Definition: local_vector.cpp:537
void SetDataPtr(ValueType **ptr, std::string name, const int size)
Initialize a vector with externally allocated data.
Definition: local_vector.cpp:146
void CloneFrom(const LocalVector< ValueType > &src)
Clone the entire vector (values,backend descr) from another LocalVector.
Definition: local_vector.cpp:313
virtual void ScaleAdd2(const ValueType alpha, const LocalVector< ValueType > &x, const ValueType beta, const LocalVector< ValueType > &y, const ValueType gamma)
Perform vector update of type this = alpha*this + x*beta + y*gamma.
Definition: local_vector.cpp:700
virtual void Ones()
Set the values of the vector to one.
Definition: local_vector.cpp:196