12 #include <OpenCL/opencl.h>
51 template <
typename MapFunc>
57 Map(MapFunc* mapFunc);
67 m_mapFunc->setConstant(constant1);
82 void setExecPlan(ExecPlan *plan)
84 m_execPlanMulti = plan;
88 Environment<int>* m_environment;
92 ExecPlan *m_execPlanMulti;
101 template <
typename T>
104 template <
typename T>
105 void operator()(Vector<T>& input, Vector<T>& output,
int groupId = -1);
107 template <
typename T>
110 template <
typename T>
113 template <
typename InputIterator>
114 void operator()(InputIterator inputBegin, InputIterator inputEnd);
116 template <
typename InputIterator,
typename OutputIterator>
117 void operator()(InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin);
119 template <
typename T>
120 void operator()(Vector<T>& input1, Vector<T>& input2, Vector<T>& output);
122 template <
typename T>
125 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
126 void operator()(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin);
128 template <
typename T>
129 void operator()(Vector<T>& input1, Vector<T>& input2, Vector<T>& input3, Vector<T>& output);
131 template <
typename T>
134 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator,
typename OutputIterator>
135 void operator()(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End, OutputIterator outputBegin);
137 template <
typename T>
140 template <
typename T>
141 void operator()(SparseMatrix<T>& input, SparseMatrix<T>& output);
143 template <
typename T>
144 void operator()(SparseMatrix<T>& input1, SparseMatrix<T>& input2, SparseMatrix<T>& output);
146 template <
typename T>
147 void operator()(SparseMatrix<T>& input1, SparseMatrix<T>& input2, SparseMatrix<T>& input3, SparseMatrix<T>& output);
151 template <
typename T>
152 void CPU(Vector<T>& input);
154 template <
typename T>
155 void CPU(Vector<T>& input, Vector<T>& output);
157 template <
typename T>
160 template <
typename T>
163 template <
typename InputIterator>
164 void CPU(InputIterator inputBegin, InputIterator inputEnd);
166 template <
typename InputIterator,
typename OutputIterator>
167 void CPU(InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin);
169 template <
typename T>
170 void CPU(Vector<T>& input1, Vector<T>& input2, Vector<T>& output);
172 template <
typename T>
175 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
176 void CPU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin);
178 template <
typename T>
179 void CPU(Vector<T>& input1, Vector<T>& input2, Vector<T>& input3, Vector<T>& output);
181 template <
typename T>
184 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator,
typename OutputIterator>
185 void CPU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End, OutputIterator outputBegin);
187 template <
typename T>
188 void CPU(SparseMatrix<T>& input);
190 template <
typename T>
191 void CPU(SparseMatrix<T>& input, SparseMatrix<T>& output);
193 template <
typename T>
194 void CPU(SparseMatrix<T>& input1, SparseMatrix<T>& input2, SparseMatrix<T>& output);
196 template <
typename T>
197 void CPU(SparseMatrix<T>& input1, SparseMatrix<T>& input2, SparseMatrix<T>& input3, SparseMatrix<T>& output);
201 template <
typename T>
202 void OMP(Vector<T>& input);
204 template <
typename T>
205 void OMP(Vector<T>& input, Vector<T>& output);
207 template <
typename T>
210 template <
typename T>
213 template <
typename InputIterator>
214 void OMP(InputIterator inputBegin, InputIterator inputEnd);
216 template <
typename InputIterator,
typename OutputIterator>
217 void OMP(InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin);
219 template <
typename T>
220 void OMP(Vector<T>& input1, Vector<T>& input2, Vector<T>& output);
222 template <
typename T>
225 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
226 void OMP(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin);
228 template <
typename T>
229 void OMP(Vector<T>& input1, Vector<T>& input2, Vector<T>& input3, Vector<T>& output);
231 template <
typename T>
234 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator,
typename OutputIterator>
235 void OMP(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End, OutputIterator outputBegin);
237 template <
typename T>
238 void OMP(SparseMatrix<T>& input);
240 template <
typename T>
241 void OMP(SparseMatrix<T>& input, SparseMatrix<T>& output);
243 template <
typename T>
244 void OMP(SparseMatrix<T>& input1, SparseMatrix<T>& input2, SparseMatrix<T>& output);
246 template <
typename T>
247 void OMP(SparseMatrix<T>& input1, SparseMatrix<T>& input2, SparseMatrix<T>& input3, SparseMatrix<T>& output);
252 template <
typename T>
253 void CU(Vector<T>& input,
int useNumGPU = 1);
255 template <
typename T>
256 void CU(Vector<T>& input, Vector<T>& output,
int useNumGPU = 1);
258 template <
typename T>
261 template <
typename T>
264 template <
typename InputIterator>
265 void CU(InputIterator inputBegin, InputIterator inputEnd,
int useNumGPU = 1);
267 template <
typename InputIterator,
typename OutputIterator>
268 void CU(InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin,
int useNumGPU = 1);
270 template <
typename InputIterator,
typename OutputIterator>
271 void CU_2(InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin,
int useNumGPU = 1);
273 template <
typename T>
274 void CU(Vector<T>& input1, Vector<T>& input2, Vector<T>& output,
int useNumGPU = 1);
276 template <
typename T>
279 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
280 void CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
int useNumGPU = 1);
282 template <
typename T>
283 void CU(Vector<T>& input1, Vector<T>& input2, Vector<T>& input3, Vector<T>& output,
int useNumGPU = 1);
285 template <
typename T>
288 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator,
typename OutputIterator>
289 void CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End, OutputIterator outputBegin,
int useNumGPU = 1);
291 template <
typename T>
292 void CU(SparseMatrix<T>& input,
int useNumGPU = 1);
294 template <
typename T>
295 void CU(SparseMatrix<T>& input, SparseMatrix<T>& output,
int useNumGPU = 1);
297 template <
typename T>
298 void CU(SparseMatrix<T>& input1, SparseMatrix<T>& input2, SparseMatrix<T>& output,
int useNumGPU = 1);
300 template <
typename T>
301 void CU(SparseMatrix<T>& input1, SparseMatrix<T>& input2, SparseMatrix<T>& input3, SparseMatrix<T>& output,
int useNumGPU = 1);
304 unsigned int cudaDeviceID;
306 template <
typename T>
307 void mapSingleThread_CU(SparseMatrix<T> &input, SparseMatrix<T> &output,
unsigned int deviceID);
309 template <
typename T>
310 void mapSingleThread_CU(SparseMatrix<T> &input1, SparseMatrix<T> &input2, SparseMatrix<T> &output,
unsigned int deviceID);
312 template <
typename T>
313 void mapSingleThread_CU(SparseMatrix<T> &input1, SparseMatrix<T> &input2, SparseMatrix<T> &input3, SparseMatrix<T> &output,
unsigned int deviceID);
315 template <
typename InputIterator,
typename OutputIterator>
316 void mapSingleThread_CU(InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin,
unsigned int deviceID);
318 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
319 void mapSingleThread_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
unsigned int deviceID);
321 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator,
typename OutputIterator>
322 void mapSingleThread_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End, OutputIterator outputBegin,
unsigned int deviceID);
325 template <
typename InputIterator,
typename OutputIterator>
326 void mapMultiStream_CU(InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin,
unsigned int deviceID);
328 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
329 void mapMultiStream_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
unsigned int deviceID);
331 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator,
typename OutputIterator>
332 void mapMultiStream_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End, OutputIterator outputBegin,
unsigned int deviceID);
334 template <
typename InputIterator,
typename OutputIterator>
335 void mapMultiStreamMultiGPU_CU(InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin,
int useNumGPU);
337 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
338 void mapMultiStreamMultiGPU_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
int useNumGPU);
340 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator,
typename OutputIterator>
341 void mapMultiStreamMultiGPU_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End, OutputIterator outputBegin,
int useNumGPU);
347 template <
typename T>
348 void CL(Vector<T>& input,
int useNumGPU = 1);
350 template <
typename T>
351 void CL(Vector<T>& input, Vector<T>& output,
int useNumGPU = 1);
353 template <
typename T>
356 template <
typename T>
359 template <
typename InputIterator>
360 void CL(InputIterator inputBegin, InputIterator inputEnd,
int useNumGPU = 1);
362 template <
typename InputIterator,
typename OutputIterator>
363 void CL(InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin,
int useNumGPU = 1);
365 template <
typename T>
366 void CL(Vector<T>& input1, Vector<T>& input2, Vector<T>& output,
int useNumGPU = 1);
368 template <
typename T>
371 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
372 void CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
int useNumGPU = 1);
374 template <
typename T>
375 void CL(Vector<T>& input1, Vector<T>& input2, Vector<T>& input3, Vector<T>& output,
int useNumGPU = 1);
377 template <
typename T>
380 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator,
typename OutputIterator>
381 void CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End, OutputIterator outputBegin,
int useNumGPU = 1);
383 template <
typename T>
384 void CL(SparseMatrix<T>& input,
int useNumGPU = 1);
386 template <
typename T>
387 void CL(SparseMatrix<T>& input, SparseMatrix<T>& output,
int useNumGPU = 1);
389 template <
typename T>
390 void CL(SparseMatrix<T>& input1, SparseMatrix<T>& input2, SparseMatrix<T>& output,
int useNumGPU = 1);
392 template <
typename T>
393 void CL(SparseMatrix<T>& input1, SparseMatrix<T>& input2, SparseMatrix<T>& input3, SparseMatrix<T>& output,
int useNumGPU = 1);
396 template <
typename InputIterator,
typename OutputIterator>
397 void mapNumDevices_CL(InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin,
size_t numDevices);
399 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
400 void mapNumDevices_CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
size_t numDevices);
402 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator,
typename OutputIterator>
403 void mapNumDevices_CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End, OutputIterator outputBegin,
size_t numDevices);
406 std::vector<std::pair<cl_kernel, Device_CL*> > m_kernels_CL;
408 void createOpenCLProgram();
Contains the definitions of CPU specific member functions for the Map skeleton.
void CPU(Vector< T > &input)
Definition: map_cpu.inl:21
void setConstant(U constant1)
Definition: map.h:65
Contains the definitions of map methods for sparse matrices. All (CPU, OpenMP, CUDA,OpenCL) in one file.
Contains a class declaration for the SparseMatrix container.
Includes the macro files needed for the defined backends.
void finishAll()
Definition: environment.inl:575
Contains the definitions of OpenCL specific member functions for the Map skeleton.
void operator()(Vector< T > &input)
Definition: map.inl:100
Contains the definitions of non-backend specific member functions for the Map skeleton.
~Map()
Definition: map.inl:82
Map(MapFunc *mapFunc)
Definition: map.inl:20
Contains a class declaration for the object that represents an OpenCL device.
Contains the definitions of OpenMP specific member functions for the Map skeleton.
Contains a class declaration for the Matrix container.
Contains the definitions of CUDA specific member functions for the Map skeleton.
A class that describes an execution plan.
Definition: exec_plan.h:47
Contains a class declaration for the Vector container.
void finishAll()
Definition: map.h:73
Contains a class declaration for Environment class.
A class representing the column-wise iterator for the Matrix data-type.
void OMP(Vector< T > &input)
Definition: map_omp.inl:24
A class representing the Map skeleton.
Definition: map.h:52
void CU(Vector< T > &input, int useNumGPU=1)
Definition: map_cu.inl:418
void CL(Vector< T > &input, int useNumGPU=1)
Definition: map_cl.inl:234
Contains a class that stores information about which back ends to use when executing.