12 #include <OpenCL/opencl.h>
53 template <
typename MapFunc,
typename ReduceFunc>
59 MapReduce(MapFunc* mapFunc, ReduceFunc* reduceFunc);
64 void setConstant(T constant1)
66 m_mapFunc->setConstant(constant1);
80 m_execPlanMulti = plan;
86 ReduceFunc* m_reduceFunc;
101 template <
typename T>
104 template <
typename InputIterator>
105 typename InputIterator::value_type
operator()(InputIterator inputBegin, InputIterator inputEnd);
107 template <
typename T>
110 template <
typename T>
113 template <
typename Input1Iterator,
typename Input2Iterator>
114 typename Input1Iterator::value_type
operator()(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End);
116 template <
typename T>
119 template <
typename T>
122 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator>
123 typename Input1Iterator::value_type
operator()(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End);
126 template <
typename T>
129 template <
typename T>
132 template <
typename InputIterator>
133 typename InputIterator::value_type
CPU(InputIterator inputBegin, InputIterator inputEnd);
135 template <
typename T>
138 template <
typename T>
141 template <
typename Input1Iterator,
typename Input2Iterator>
142 typename Input1Iterator::value_type
CPU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End);
144 template <
typename T>
147 template <
typename T>
150 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator>
151 typename Input1Iterator::value_type
CPU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End);
155 template <
typename T>
158 template <
typename T>
161 template <
typename InputIterator>
162 typename InputIterator::value_type
OMP(InputIterator inputBegin, InputIterator inputEnd);
164 template <
typename T>
167 template <
typename T>
170 template <
typename Input1Iterator,
typename Input2Iterator>
171 typename Input1Iterator::value_type
OMP(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End);
173 template <
typename T>
176 template <
typename T>
179 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator>
180 typename Input1Iterator::value_type
OMP(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End);
185 template <
typename T>
188 template <
typename T>
191 template <
typename InputIterator>
192 typename InputIterator::value_type
CU(InputIterator inputBegin, InputIterator inputEnd,
int useNumGPU = 1);
194 template <
typename T>
197 template <
typename T>
200 template <
typename Input1Iterator,
typename Input2Iterator>
201 typename Input1Iterator::value_type
CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End,
int useNumGPU = 1);
203 template <
typename T>
206 template <
typename T>
209 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator>
210 typename Input1Iterator::value_type
CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End,
int useNumGPU = 1);
213 unsigned int cudaDeviceID;
215 template <
typename InputIterator>
216 typename InputIterator::value_type mapReduceSingleThread_CU(InputIterator inputBegin, InputIterator inputEnd,
unsigned int deviceID);
218 template <
typename Input1Iterator,
typename Input2Iterator>
219 typename Input1Iterator::value_type mapReduceSingleThread_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End,
unsigned int deviceID);
221 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator>
222 typename Input1Iterator::value_type mapReduceSingleThread_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End,
unsigned int deviceID);
225 template <
typename InputIterator>
226 typename InputIterator::value_type mapReduceMultiStream_CU(InputIterator inputBegin, InputIterator inputEnd,
unsigned int deviceID);
228 template <
typename Input1Iterator,
typename Input2Iterator>
229 typename Input1Iterator::value_type mapReduceMultiStream_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End,
unsigned int deviceID);
231 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator>
232 typename Input1Iterator::value_type mapReduceMultiStream_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End,
unsigned int deviceID);
234 template <
typename InputIterator>
235 typename InputIterator::value_type mapReduceMultiStreamMultiGPU_CU(InputIterator inputBegin, InputIterator inputEnd,
int useNumGPU);
237 template <
typename Input1Iterator,
typename Input2Iterator>
238 typename Input1Iterator::value_type mapReduceMultiStreamMultiGPU_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End,
int useNumGPU);
240 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator>
241 typename Input1Iterator::value_type mapReduceMultiStreamMultiGPU_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End,
int useNumGPU);
247 template <
typename T>
250 template <
typename T>
253 template <
typename InputIterator>
254 typename InputIterator::value_type
CL(InputIterator inputBegin, InputIterator inputEnd,
int useNumGPU = 1);
256 template <
typename T>
259 template <
typename T>
262 template <
typename Input1Iterator,
typename Input2Iterator>
263 typename Input1Iterator::value_type
CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End,
int useNumGPU = 1);
265 template <
typename T>
268 template <
typename T>
271 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator>
272 typename Input1Iterator::value_type
CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End,
int useNumGPU = 1);
275 template <
typename InputIterator>
276 typename InputIterator::value_type mapReduceSingle_CL(InputIterator inputBegin, InputIterator inputEnd,
unsigned int deviceID);
278 template <
typename InputIterator>
279 typename InputIterator::value_type mapReduceNumDevices_CL(InputIterator inputBegin, InputIterator inputEnd,
size_t numDevices);
281 template <
typename Input1Iterator,
typename Input2Iterator>
282 typename Input1Iterator::value_type mapReduceSingle_CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End,
unsigned int deviceID);
284 template <
typename Input1Iterator,
typename Input2Iterator>
285 typename Input1Iterator::value_type mapReduceNumDevices_CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End,
size_t numDevices);
287 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator>
288 typename Input1Iterator::value_type mapReduceSingle_CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End,
unsigned int deviceID);
290 template <
typename Input1Iterator,
typename Input2Iterator,
typename Input3Iterator>
291 typename Input1Iterator::value_type mapReduceNumDevices_CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, Input3Iterator input3Begin, Input3Iterator input3End,
size_t numDevices);
294 std::vector<std::pair<cl_kernel, Device_CL*> > m_mapReduceKernels_CL;
295 std::vector<std::pair<cl_kernel, Device_CL*> > m_reduceKernels_CL;
297 void createOpenCLProgram();
Contains a class declaration for the SparseMatrix container.
~MapReduce()
Definition: mapreduce.inl:86
Includes the macro files needed for the defined backends.
void finishAll()
Definition: environment.inl:575
T operator()(Vector< T > &input)
Definition: mapreduce.inl:105
MapReduce(MapFunc *mapFunc, ReduceFunc *reduceFunc)
Definition: mapreduce.inl:23
Contains the definitions of non-backend specific member functions for the MapReduce skeleton...
Contains a class declaration for the object that represents an OpenCL device.
T CPU(Vector< T > &input)
Definition: mapreduce_cpu.inl:23
T CU(Vector< T > &input, int useNumGPU=1)
Definition: mapreduce_cu.inl:349
Contains a class declaration for the Matrix container.
A vector container class, implemented as a wrapper for std::vector.
Definition: vector.h:61
A class representing the MapReduce skeleton.
Definition: mapreduce.h:54
A class that describes an execution plan.
Definition: exec_plan.h:47
T CL(Vector< T > &input, int useNumGPU=1)
Definition: mapreduce_cl.inl:385
Contains the definitions of OpenMP specific member functions for the MapReduce skeleton.
Contains a class declaration for the Vector container.
Contains the definitions of OpenCL specific member functions for the MapReduce skeleton.
Contains a class declaration for Environment class.
Contains the definitions of CUDA specific member functions for the MapReduce skeleton.
Contains the definitions of CPU specific member functions for the MapReduce skeleton.
A class representing the column-wise iterator for the Matrix data-type.
T OMP(Vector< T > &input)
Definition: mapreduce_omp.inl:27
Contains a class that stores information about which back ends to use when executing.