SkePU  1.2
 All Classes Namespaces Files Functions Variables Enumerations Friends Macros Groups Pages
2dmapoverlap.h
Go to the documentation of this file.
1 
5 #ifndef MAPOVERLAP_2D_H
6 #define MAPOVERLAP_2D_H
7 
8 #ifdef SKEPU_OPENCL
9 #include <string>
10 #include <vector>
11 #ifdef USE_MAC_OPENCL
12 #include <OpenCL/opencl.h>
13 #else
14 #include <CL/cl.h>
15 #endif
16 #include "device_cl.h"
17 #endif
18 
19 #include "environment.h"
20 #include "../matrix.h"
21 #include "operator_macros.h"
22 #include "exec_plan.h"
23 
24 namespace skepu
25 {
26 
27 
50 template <typename MapOverlap2DFunc>
52 {
53 
54 public:
55 
56  MapOverlap2D(MapOverlap2DFunc* mapOverlapFunc);
57 
58  ~MapOverlap2D();
59 
60  void finishAll()
61  {
62  m_environment->finishAll();
63  }
64  void setExecPlan(ExecPlan& plan)
65  {
66  m_execPlan = &plan;
67  }
68  void setExecPlan(ExecPlan *plan)
69  {
70  m_execPlanMulti = plan;
71  }
72 
73 private:
74  Environment<int>* m_environment;
75  MapOverlap2DFunc* m_mapOverlapFunc;
76 
78  ExecPlan *m_execPlanMulti;
79 
81  ExecPlan *m_execPlan;
82 
84  ExecPlan m_defPlan;
85 
86 public:
87  template <typename T>
88  void operator()(Matrix<T>& input);
89 
90  template <typename T>
91  void operator()(Matrix<T>& input, Matrix<T>& output);
92 
93  template <typename T>
94  void operator()(Matrix<T>& input, Matrix<T>& output, Matrix<T>& filter, bool useTiling=false);
95 
96  template <typename T>
97  void operator()(Matrix<T>& input, Matrix<T>& output, size_t filter_rows, size_t filter_cols, bool useTiling=false);
98 
99 public:
100  template <typename T>
101  void CPU(Matrix<T>& input);
102 
103  template <typename T>
104  void CPU(Matrix<T>& input, Matrix<T>& output);
105 
106  template <typename T>
107  void CPU(Matrix<T>& input, Matrix<T>& output, Matrix<T>& filter);
108 
109  template <typename T>
110  void CPU(Matrix<T>& input, Matrix<T>& output, size_t filter_rows, size_t filter_cols);
111 
112 #ifdef SKEPU_OPENMP
113 public:
114  template <typename T>
115  void OMP(Matrix<T>& input);
116 
117  template <typename T>
118  void OMP(Matrix<T>& input, Matrix<T>& output);
119 
120  template <typename T>
121  void OMP(Matrix<T>& input, Matrix<T>& output, Matrix<T>& filter);
122 
123  template <typename T>
124  void OMP(Matrix<T>& input, Matrix<T>& output, size_t filter_rows, size_t filter_cols);
125 #endif
126 
127 #ifdef SKEPU_CUDA
128 public:
129  template <typename T>
130  void CU(Matrix<T>& input, int useNumGPU = 1);
131 
132  template <typename T>
133  void CU(Matrix<T>& input, Matrix<T>& output, int useNumGPU = 1);
134 
135  template <typename T>
136  void CU(Matrix<T>& input, Matrix<T>& output, Matrix<T>& filter, bool useTiling=false, int useNumGPU=1);
137 
138  template <typename T>
139  void CU(Matrix<T>& input, Matrix<T>& output, size_t filter_rows, size_t filter_cols, bool useTiling=false, int useNumGPU=1);
140 
141 private:
142  unsigned int cudaDeviceID;
143 
144  template <typename T>
145  void mapOverlapSingleThread_CU(Matrix<T>& input, Matrix<T>& output, unsigned int deviceID);
146 
147  template <typename T>
148  void mapOverlapMultipleThread_CU(Matrix<T>& input, Matrix<T>& output, size_t numDevices);
149 #endif
150 
151 #ifdef SKEPU_OPENCL
152 public:
153  template <typename T>
154  void CL(Matrix<T>& input, int useNumGPU = 1);
155 
156  template <typename T>
157  void CL(Matrix<T>& input, Matrix<T>& output, int useNumGPU = 1);
158 
159  template <typename T>
160  void CL(Matrix<T>& input, Matrix<T>& output, Matrix<T>& filter, int useNumGPU = 1);
161 
162  template <typename T>
163  void CL(Matrix<T>& input, Matrix<T>& output, size_t filter_rows, size_t filter_cols, int useNumGPU = 1);
164 
165 private:
166  template <typename T>
167  void mapOverlapSingleThread_CL(Matrix<T>& input, Matrix<T>& output, unsigned int deviceID);
168 
169  template <typename T>
170  void mapOverlapMultipleThread_CL(Matrix<T>& input, Matrix<T>& output, size_t numDevices);
171 
172 private:
173  std::vector<std::pair<cl_kernel, Device_CL*> > m_kernels_2D_CL;
174 
175  std::vector<std::pair<cl_kernel, Device_CL*> > m_kernels_Mat_ConvolFilter_CL;
176  std::vector<std::pair<cl_kernel, Device_CL*> > m_kernels_Mat_Convol_CL;
177 
178  void replaceText(std::string& text, std::string find, std::string replace);
179  void createOpenCLProgram();
180 #endif
181 
182 };
183 
184 
185 
186 
187 
188 }
189 
190 #include "2dmapoverlap.inl"
191 
192 #include "2dmapoverlap_cpu.inl"
193 
194 #ifdef SKEPU_OPENMP
195 #include "2dmapoverlap_omp.inl"
196 #endif
197 
198 #ifdef SKEPU_OPENCL
199 #include "2dmapoverlap_cl.inl"
200 #endif
201 
202 #ifdef SKEPU_CUDA
203 #include "2dmapoverlap_cu.inl"
204 #endif
205 
206 #endif
207 
208 
MapOverlap2D(MapOverlap2DFunc *mapOverlapFunc)
Definition: 2dmapoverlap.inl:25
Contains the definitions of OpenCL specific member functions for the MapOverlap2D skeleton...
Includes the macro files needed for the defined backends.
void finishAll()
Definition: environment.inl:575
Contains the definitions of CUDA specific member functions for the MapOverlap2D skeleton.
~MapOverlap2D()
Definition: 2dmapoverlap.inl:91
void OMP(Matrix< T > &input)
Definition: 2dmapoverlap_omp.inl:23
Contains a class declaration for the object that represents an OpenCL device.
A class representing the MapOverlap skeleton for 2D overlap for Matrix operands (useful for convoluti...
Definition: 2dmapoverlap.h:51
void CPU(Matrix< T > &input)
Definition: 2dmapoverlap_cpu.inl:21
Contains the definitions of CPU specific member functions for the MapOverlap2D skeleton.
A class that describes an execution plan.
Definition: exec_plan.h:47
void CU(Matrix< T > &input, int useNumGPU=1)
Definition: 2dmapoverlap_cu.inl:29
void CL(Matrix< T > &input, int useNumGPU=1)
Definition: 2dmapoverlap_cl.inl:157
Contains a class declaration for Environment class.
Contains the definitions of OpenCL specific member functions for the MapOverlap2D skeleton...
A class representing the column-wise iterator for the Matrix data-type.
void operator()(Matrix< T > &input)
Definition: 2dmapoverlap.inl:108
Contains the definitions of non-backend specific member functions for the MapOverlap2D skeleton...
Contains a class that stores information about which back ends to use when executing.