PARALUTION  1.0.0
PARALUTION
base_stencil.hpp
Go to the documentation of this file.
1 #ifndef PARALUTION_BASE_STENCIL_HPP_
2 #define PARALUTION_BASE_STENCIL_HPP_
3 
4 #include "base_vector.hpp"
5 
6 namespace paralution {
7 
8 // Forward declartions
9 template <typename ValueType>
11 template <typename ValueType>
13 
14 
15 template <typename ValueType>
17 
18 template <typename ValueType>
20 template <typename ValueType>
22 
23 template <typename ValueType>
25 template <typename ValueType>
27 
28 
29 template <typename ValueType>
31 template <typename ValueType>
33 
34 
36 template <typename ValueType>
37 class BaseStencil {
38 
39 public:
40 
41  BaseStencil();
42  virtual ~BaseStencil();
43 
45  int get_nrow(void) const;
47  int get_ncol(void) const;
49  int get_ndim(void) const;
51  virtual int get_nnz(void) const = 0;
52 
54  virtual void info(void) const = 0;
56  virtual unsigned int get_stencil_id(void) const = 0 ;
58  virtual void set_backend(const Paralution_Backend_Descriptor local_backend);
59  // Set the grid size
60  virtual void SetGrid(const int size);
61 
63  virtual void Apply(const BaseVector<ValueType> &in, BaseVector<ValueType> *out) const = 0;
65  virtual void ApplyAdd(const BaseVector<ValueType> &in, const ValueType scalar,
66  BaseVector<ValueType> *out) const = 0;
67 
68 protected:
69 
71  int ndim_;
73  int size_;
74 
75 
78 
79  friend class BaseVector<ValueType>;
80  friend class HostVector<ValueType>;
81  friend class AcceleratorVector<ValueType>;
82  friend class GPUAcceleratorVector<ValueType>;
83  friend class OCLAcceleratorVector<ValueType>;
84  friend class MICAcceleratorVector<ValueType>;
85 
86 };
87 
88 template <typename ValueType>
89 class HostStencil : public BaseStencil<ValueType> {
90 
91 public:
92 
93  HostStencil();
94  virtual ~HostStencil();
95 
96 };
97 
98 template <typename ValueType>
99 class AcceleratorStencil : public BaseStencil<ValueType> {
100 
101 public:
102 
104  virtual ~AcceleratorStencil();
105 
107  virtual void CopyFromHost(const HostStencil<ValueType> &src) = 0;
108 
110  virtual void CopyToHost(HostStencil<ValueType> *dst) const = 0;
111 
112 };
113 
114 template <typename ValueType>
115 class GPUAcceleratorStencil : public AcceleratorStencil<ValueType> {
116 
117 public:
118 
120  virtual ~GPUAcceleratorStencil();
121 
122 };
123 
124 template <typename ValueType>
125 class OCLAcceleratorStencil : public AcceleratorStencil<ValueType> {
126 
127 public:
128 
130  virtual ~OCLAcceleratorStencil();
131 
132 };
133 
134 template <typename ValueType>
135 class MICAcceleratorStencil : public AcceleratorStencil<ValueType> {
136 
137 public:
138 
140  virtual ~MICAcceleratorStencil();
141 
142 };
143 
144 
145 }
146 
147 #endif // PARALUTION_BASE_STENCIL_HPP_
virtual void ApplyAdd(const BaseVector< ValueType > &in, const ValueType scalar, BaseVector< ValueType > *out) const =0
Apply and add the stencil to vector, out = out + scalar*this*in;.
virtual void set_backend(const Paralution_Backend_Descriptor local_backend)
Copy the backend descriptor information.
Definition: base_stencil.cpp:60
virtual void info(void) const =0
Shows simple info about the object.
Definition: base_stencil.hpp:12
int get_ncol(void) const
Return the number of columns in the stencil.
Definition: base_stencil.cpp:48
virtual void CopyToHost(HostStencil< ValueType > *dst) const =0
Copy (accelerator stencil) to host stencil.
AcceleratorStencil()
Definition: base_stencil.cpp:89
Definition: backend_manager.hpp:10
int get_ndim(void) const
Return the dimension of the stencil.
Definition: base_stencil.cpp:54
Backend descriptor - keeps information about the hardware - OpenMP (threads); CUDA (blocksizes...
Definition: backend_manager.hpp:19
Definition: base_stencil.hpp:30
Paralution_Backend_Descriptor local_backend_
Backend descriptor (local copy)
Definition: base_stencil.hpp:77
Definition: base_vector.hpp:16
virtual ~HostStencil()
Definition: base_stencil.cpp:83
Definition: base_stencil.hpp:16
const IndexType const IndexType const IndexType const ValueType const ValueType scalar
Definition: cuda_kernels_coo.hpp:91
Definition: base_vector.hpp:10
Base class for all host/accelerator stencils.
Definition: base_stencil.hpp:37
virtual unsigned int get_stencil_id(void) const =0
Return the stencil format id (see stencil_formats.hpp)
OCLAcceleratorStencil()
Definition: base_stencil.cpp:107
virtual ~OCLAcceleratorStencil()
Definition: base_stencil.cpp:111
int get_nrow(void) const
Return the number of rows in the stencil.
Definition: base_stencil.cpp:32
Definition: base_stencil.hpp:32
Definition: base_stencil.hpp:21
Definition: base_vector.hpp:22
int size_
Number of columns.
Definition: base_stencil.hpp:73
BaseStencil()
Definition: base_stencil.cpp:13
virtual ~AcceleratorStencil()
Definition: base_stencil.cpp:93
Definition: backend_manager.cpp:43
virtual ~GPUAcceleratorStencil()
Definition: base_stencil.cpp:102
Definition: base_stencil.hpp:26
virtual void SetGrid(const int size)
Definition: base_stencil.cpp:67
Definition: base_stencil.hpp:10
virtual int get_nnz(void) const =0
Return the nnz per row.
virtual void CopyFromHost(const HostStencil< ValueType > &src)=0
Copy (accelerator stencil) from host stencil.
Definition: base_vector.hpp:19
MICAcceleratorStencil()
Definition: base_stencil.cpp:116
Base class for all host/accelerator vectors.
Definition: base_vector.hpp:26
virtual void Apply(const BaseVector< ValueType > &in, BaseVector< ValueType > *out) const =0
Apply the stencil to vector, out = this*in;.
Definition: base_stencil.hpp:19
GPUAcceleratorStencil()
Definition: base_stencil.cpp:98
HostStencil()
Definition: base_stencil.cpp:79
virtual ~MICAcceleratorStencil()
Definition: base_stencil.cpp:120
int ndim_
Number of rows.
Definition: base_stencil.hpp:71
virtual ~BaseStencil()
Definition: base_stencil.cpp:24
Definition: base_stencil.hpp:24