11 #include <starpu_opencl.h>
19 #include <OpenCL/opencl.h>
35 #include "skepu/matrix.h"
87 template <
typename MapOverlapFunc,
typename T, skepu_container_type c_type=VECTOR>
116 if(!temp_output.empty())
119 for(
typename Vector<T>::iterator it = temp_output.begin(); outputBegin != output->end(); ++outputBegin, ++it)
130 if(!temp_output.empty())
133 for(
typename Vector<T>::iterator it = temp_output.begin(); outputBegin != output->end(); ++outputBegin, ++it)
164 void finishAll() {m_environment->
finishAll();}
165 void setExecPlan(
ExecPlan& plan) {m_execPlan = plan;}
169 MapOverlapFunc* m_mapOverlapFunc;
172 struct starpu_codelet *codelet;
173 struct starpu_codelet *codelet_three;
175 #ifdef USE_STARPU_HISTORY_MODEL
176 starpu_perfmodel *mapoverlap_perf_model;
187 static void cpu_func(
void *buffers[],
void *arg);
191 static void omp_func(
void *buffers[],
void *arg);
196 static void cuda_func(
void *buffers[],
void *arg);
201 static void opencl_func(
void *buffers[],
void *arg);
204 struct starpu_opencl_program opencl_codelet;
205 char kernelNameArray[1024];
207 void replaceText(std::string& text, std::string find, std::string replace);
212 std::string perfmodel_str;
252 template <
typename MapOverlapFunc,
typename T>
266 MapOverlap<MapOverlapFunc, T, MATRIX> *pMapOverlap;
269 }ArgumentBufferConvol;
273 Matrix<T> temp_output;
290 MapOverlap(MapOverlapFunc* mapOverlapFunc, Matrix<T> *input, Matrix<T> *output,
OverlapPolicy overlapPolicy=OVERLAP_ROW_WISE,
EdgePolicy poly=CONSTANT, T pad = T(),
int xblocks=1,
int yblocks=1);
295 Matrix<T>& getOutput()
297 if(!temp_output.empty())
299 typename Matrix<T>::iterator outputBegin = output->begin();
300 for(
typename Matrix<T>::iterator it = temp_output.begin(); outputBegin != output->end(); ++outputBegin, ++it)
311 if(!temp_output.empty())
313 typename Matrix<T>::iterator outputBegin = output->begin();
314 for(
typename Matrix<T>::iterator it = temp_output.begin(); outputBegin != output->end(); ++outputBegin, ++it)
323 void setInput(Matrix<T> *in)
328 void setOutput(Matrix<T> *out)
333 void setFilter(Matrix<T> *fil)
338 void setFilterSize(
int rows,
int cols)
351 overlapType = _overlapType;
356 void finishAll() {m_environment->
finishAll();}
357 void setExecPlan(ExecPlan& plan) {m_execPlan = plan;}
360 Environment<int>* m_environment;
361 MapOverlapFunc* m_mapOverlapFunc;
364 struct starpu_codelet *codelet_row;
365 struct starpu_codelet *codelet_col;
366 struct starpu_codelet *codelet_convol;
367 struct starpu_codelet *codelet_convol_filter;
369 #ifdef USE_STARPU_HISTORY_MODEL
370 starpu_perfmodel *mapoverlap_perf_model_row;
371 starpu_perfmodel *mapoverlap_perf_model_col;
372 starpu_perfmodel *mapoverlap_perf_model_convol;
373 starpu_perfmodel *mapoverlap_perf_model_convol_filter;
377 void mapoverlap_matrix(Matrix<T>& input,
EdgePolicy poly = CONSTANT, T pad = T(),
OverlapPolicy overlapPolicy=OVERLAP_ROW_WISE,
int xblocks=1,
int yblocks=1);
379 void mapoverlap_matrix(Matrix<T>& input, Matrix<T>& output,
EdgePolicy poly = CONSTANT, T pad = T(),
OverlapPolicy overlapPolicy=OVERLAP_ROW_WISE,
int xblocks=1,
int yblocks=1);
384 void operator()(Matrix<T>& input, Matrix<T>& output,
EdgePolicy poly = CONSTANT, T pad = T(),
OverlapPolicy overlapPolicy=OVERLAP_ROW_WISE,
int xblocks=1,
int yblocks=1);
386 void operator()(Matrix<T>& input, Matrix<T>& output, Matrix<T>& filter);
388 void operator()(Matrix<T>& input, Matrix<T>& output,
unsigned int filter_rows,
unsigned int filter_cols);
391 static void cpu_func_row(
void *buffers[],
void *arg);
393 static void cpu_func_col(
void *buffers[],
void *arg);
395 static void cpu_func_convol_filter(
void *buffers[],
void *arg);
397 static void cpu_func_convol(
void *buffers[],
void *arg);
401 static void omp_func_row(
void *buffers[],
void *arg);
403 static void omp_func_col(
void *buffers[],
void *arg);
405 static void omp_func_convol_filter(
void *buffers[],
void *arg);
407 static void omp_func_convol(
void *buffers[],
void *arg);
413 static void cuda_func_row(
void *buffers[],
void *arg);
415 static void cuda_func_col(
void *buffers[],
void *arg);
417 static void cuda_func_convol_filter(
void *buffers[],
void *arg);
419 static void cuda_func_convol(
void *buffers[],
void *arg);
424 static void opencl_func_row(
void *buffers[],
void *arg);
426 static void opencl_func_col(
void *buffers[],
void *arg);
428 static void opencl_func_convol_filter(
void *buffers[],
void *arg);
430 static void opencl_func_convol(
void *buffers[],
void *arg);
433 struct starpu_opencl_program opencl_codelet;
438 char kernelNameArray_Row[1024];
439 char kernelNameArray_Col[1024];
440 char kernelNameArray_Convol[1024];
441 char kernelNameArray_ConvolFilter[1024];
444 void replaceText(std::string& text, std::string find, std::string replace);
449 std::string perfmodel_str_row;
450 std::string perfmodel_str_col;
451 std::string perfmodel_str_convol_filter;
452 std::string perfmodel_str_convol;
Contains the definitions of OpenCL specific functions for the MapOverlap skeleton.
static void omp_func(void *buffers[], void *arg)
Definition: mapoverlap_omp.inl:28
void createOpenCLProgram()
Definition: mapoverlap_cl.inl:51
Includes the macro files needed for the defined backends.
static void cuda_func(void *buffers[], void *arg)
Definition: mapoverlap_cu.inl:30
void finishAll()
Definition: environment.inl:119
Contains the definitions of CUDA specific functions for the MapOverlap skeleton.
Contains the definitions of non-backend specific functions for the MapOverlap skeleton.
Contains a class declaration for the object that represents an OpenCL device.
Contains the definitions of CPU specific functions for the MapOverlap skeleton.
A vector container class, implemented as a wrapper for std::vector. It is configured to use StarPU DS...
Definition: vector.h:40
void run_async()
Definition: mapoverlap.inl:230
EdgePolicy
Definition: mapoverlap.h:56
A class that describes an execution plan, not used very much in this case as decision is mostly left ...
Definition: exec_plan.h:75
Contains a class definition for Task.
A class representing a Task for the farm skeleton.
Definition: task.h:31
void operator()(Vector< T > &input, EdgePolicy poly=CONSTANT, T pad=T())
Definition: mapoverlap.inl:256
Contains a class declaration for the Vector container.
Contains the definitions of OpenMP specific functions for the MapOverlap skeleton.
Contains a class declaration for Environment class.
A class representing the MapOverlap skeleton.
Definition: mapoverlap.h:88
void replaceText(std::string &text, std::string find, std::string replace)
Definition: mapoverlap_cl.inl:30
static void opencl_func(void *buffers[], void *arg)
Definition: mapoverlap_cl.inl:102
An vector iterator class.
Definition: vector_iterator.inl:15
OverlapPolicy
Definition: mapoverlap.h:44
static void cpu_func(void *buffers[], void *arg)
Definition: mapoverlap_cpu.inl:21
MapOverlap(MapOverlapFunc *mapOverlapFunc)
Definition: mapoverlap.inl:23
~MapOverlap()
Definition: mapoverlap.inl:210
Contains a class that stores information about which back ends to use when executing.