SkePU(integratedwithStarPU)  0.8.1
 All Classes Namespaces Files Functions Enumerations Friends Macros Groups Pages
generate.h
Go to the documentation of this file.
1 
5 #ifndef GENERATE_H
6 #define GENERATE_H
7 
8 
9 #include <starpu.h>
10 #ifdef SKEPU_OPENCL
11  #include <starpu_opencl.h>
12 #endif
13 
14 
15 #ifdef SKEPU_OPENCL
16 #include <string>
17 #include <vector>
18 #ifdef USE_MAC_OPENCL
19 #include <OpenCL/opencl.h>
20 #else
21 #include <CL/cl.h>
22 #endif
23 #include "src/device_cl.h"
24 #endif
25 
26 #include "src/environment.h"
27 
28 #include "skepu/vector.h"
29 #include "skepu/matrix.h"
30 
31 #include "src/operator_macros.h"
32 #include "src/exec_plan.h"
33 
34 namespace skepu
35 {
36 
61 template <typename GenerateFunc>
62 class Generate
63 {
64 
65 /* inf is different each part so for ebery part it will be created and destroyed */
66 typedef struct
67 {
68  Generate<GenerateFunc> *pGenerate;
69  int rowOffset;
70  int colOffset;
71 }ArgumentBuffer;
72 
73 public:
74 
75  Generate(GenerateFunc* generateFunc);
76 
77  ~Generate();
78 
82  template <typename U>
83  void setConstant(U constant1) {m_generateFunc->setConstant(constant1);}
84 
88  void finishAll() {m_environment->finishAll();}
89  void setExecPlan(ExecPlan& plan) {m_execPlan = plan;}
90 
91 public:
92  Environment<int>* m_environment;
93  GenerateFunc* m_generateFunc;
94  ExecPlan m_execPlan;
95 
96  struct starpu_codelet *codelet;
97 
98 #ifdef USE_STARPU_HISTORY_MODEL
99  starpu_perfmodel *generate_perf_model;
100 #endif
101 
102 public:
103  template <typename T>
104  void operator()(unsigned int numElements, Vector<T>& output, int parts=1);
105 
106  template <typename T>
107  void operator()(unsigned int numRows, unsigned int numCols, Matrix<T>& output, int parts=1);
108 
109 public:
110  template <typename T>
111  static void cpu_func(void *buffers[], void *arg);
112 
113  template <typename T>
114  static void cpu_func_mat(void *buffers[], void *arg);
115 
116 #ifdef SKEPU_OPENMP
117 public:
118  template <typename T>
119  static void omp_func(void *buffers[], void *arg);
120 
121  template <typename T>
122  static void omp_func_mat(void *buffers[], void *arg);
123 #endif
124 
125 #ifdef SKEPU_CUDA
126 public:
127  template <typename T>
128  static void cuda_func(void *buffers[], void *arg);
129 
130  template <typename T>
131  static void cuda_func_mat(void *buffers[], void *arg);
132 #endif
133 
134 #ifdef SKEPU_OPENCL
135 public:
136  template <typename T>
137  static void opencl_func(void *buffers[], void *arg);
138 
139  template <typename T>
140  static void opencl_func_mat(void *buffers[], void *arg);
141 public:
142  struct starpu_opencl_program opencl_program;
143  char kernelNameArray[1024];
144 
145  void replaceText(std::string& text, std::string find, std::string replace);
146  void createOpenCLProgram();
147 #endif
148 
149  std::string perfmodel_str;
150 
151 };
152 
153 }
154 
155 #include "src/generate.inl"
156 
157 #include "src/generate_cpu.inl"
158 
159 #ifdef SKEPU_OPENMP
160 #include "src/generate_omp.inl"
161 #endif
162 
163 #ifdef SKEPU_OPENCL
164 #include "src/generate_cl.inl"
165 #endif
166 
167 #ifdef SKEPU_CUDA
168 #include "src/generate_cu.inl"
169 #endif
170 
171 #endif
172 
Contains the definitions of CUDA specific functions for the Generate skeleton.
Generate(GenerateFunc *generateFunc)
Definition: generate.inl:21
static void cpu_func_mat(void *buffers[], void *arg)
Definition: generate_cpu.inl:53
Includes the macro files needed for the defined backends.
static void opencl_func_mat(void *buffers[], void *arg)
Definition: generate_cl.inl:182
static void cuda_func_mat(void *buffers[], void *arg)
Definition: generate_cu.inl:74
Contains the definitions of CPU specific functions for the Generate skeleton.
void finishAll()
Definition: environment.inl:119
void setConstant(U constant1)
Definition: generate.h:83
A class representing the Generate skeleton.
Definition: generate.h:62
static void cpu_func(void *buffers[], void *arg)
Definition: generate_cpu.inl:22
static void cuda_func(void *buffers[], void *arg)
Definition: generate_cu.inl:31
Contains a class declaration for the object that represents an OpenCL device.
static void omp_func_mat(void *buffers[], void *arg)
Definition: generate_omp.inl:62
Contains the definitions of non-backend specific member functions for the Generate skeleton...
void finishAll()
Definition: generate.h:88
static void omp_func(void *buffers[], void *arg)
Definition: generate_omp.inl:27
~Generate()
Definition: generate.inl:109
A class that describes an execution plan, not used very much in this case as decision is mostly left ...
Definition: exec_plan.h:75
static void opencl_func(void *buffers[], void *arg)
Definition: generate_cl.inl:106
Contains a class declaration for the Vector container.
Contains a class declaration for Environment class.
void replaceText(std::string &text, std::string find, std::string replace)
Definition: generate_cl.inl:28
void createOpenCLProgram()
Definition: generate_cl.inl:49
Contains a class that stores information about which back ends to use when executing.
Contains the definitions of OpenCL specific functions for the Generate skeleton.
Contains the definitions of OpenMP specific functions for the Generate skeleton.
void operator()(unsigned int numElements, Vector< T > &output, int parts=1)
Definition: generate.inl:132