12 #include <OpenCL/opencl.h>
35 #define subvector( mv, i, type ) ((type)(mv).device_arr[i].device_el)
50 Arr * allocData(
int numinputs)
52 Arr *data = (Arr *) malloc(numinputs*
sizeof(Arr));
57 void addData(
int index,
size_t size,
void * data)
59 host_arr[index].host_el = data;
60 host_arr[index].size = size;
93 template <
typename MapArrayFunc>
99 MapArray(MapArrayFunc* mapArrayFunc);
106 template <
typename U>
109 m_mapArrayFunc->setConstant(constant1);
117 void setExecPlan(ExecPlan& plan)
121 void setExecPlan(ExecPlan *plan)
123 m_execPlanMulti = plan;
127 Environment<int>* m_environment;
128 MapArrayFunc* m_mapArrayFunc;
131 ExecPlan *m_execPlanMulti;
134 ExecPlan *m_execPlan;
140 template <
typename T>
141 void operator()(Vector<T>& input1, Vector<T>& input2, Vector<T>& output,
int groupId = -1);
143 template <
typename T>
146 template <
typename T>
149 template <
typename T>
150 void operator()(Vector<T>& input1, SparseMatrix<T>& input2, Vector<T>& output);
152 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
153 void operator()(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin);
155 template <
typename in,
typename out>
156 void operator()(Vector<in>& input, MultiVector P, Vector<out>& output);
158 template<
typename InputIterator,
typename OutputIterator>
159 void operator()(InputIterator inputBegin, InputIterator inputEnd, MultiVector P, OutputIterator outputbegin);
163 template <
typename in,
typename out>
164 void CPU(Vector<in>& input, MultiVector P, Vector<out>& output);
166 template <
typename T>
167 void CPU(Vector<T>& input1, Vector<T>& input2, Vector<T>& output);
169 template <
typename T>
172 template <
typename T>
173 void CPU(Vector<T>& input1,
Matrix<T>& input2, Vector<T>& output);
175 template <
typename T>
176 void CPU(Vector<T>& input1, SparseMatrix<T>& input2, Vector<T>& output);
178 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
179 void CPU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin);
183 template <
typename in,
typename out>
184 void OMP(Vector<in>& input, MultiVector P, Vector<out>& output);
186 template<
typename InputIterator,
typename OutputIterator>
187 void OMP(InputIterator inputBegin, InputIterator inputEnd, MultiVector P, OutputIterator outputbegin);
189 template <
typename T>
190 void OMP(Vector<T>& input1, Vector<T>& input2, Vector<T>& output);
192 template <
typename T>
195 template <
typename T>
196 void OMP(Vector<T>& input1,
Matrix<T>& input2, Vector<T>& output);
198 template <
typename T>
199 void OMP(Vector<T>& input1, SparseMatrix<T>& input2, Vector<T>& output);
201 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
202 void OMP(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin);
207 template <
typename in,
typename out>
208 void CU(Vector<in>& input, MultiVector P, Vector<out>& output,
int useNumGPU = 1);
210 template<
typename InputIterator,
typename OutputIterator>
211 void CU(InputIterator inputBegin, InputIterator inputEnd, MultiVector P, OutputIterator outputbegin,
int useNumGPU = 1);
213 template <
typename T>
214 void CU(Vector<T>& input1, Vector<T>& input2, Vector<T>& output,
int useNumGPU = 1);
216 template <
typename T>
219 template <
typename T>
220 void CU(Vector<T>& input1,
Matrix<T>& input2, Vector<T>& output,
int useNumGPU = 1);
222 template <
typename T>
223 void CU(Vector<T>& input1, SparseMatrix<T>& input2, Vector<T>& output,
int useNumGPU = 1);
225 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
226 void CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
int useNumGPU = 1);
229 unsigned int cudaDeviceID;
231 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
232 void mapArraySingleThread_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
unsigned int deviceID);
234 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
235 void mapArrayMultiStream_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
unsigned int deviceID);
237 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
238 void mapArrayMultiStreamMultiGPU_CU(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
int useNumGPU);
243 template <
typename in,
typename out>
244 void CL(Vector<in>& input, MultiVector P, Vector<out>& output,
int useNumGPU = 1);
246 template <
typename T>
247 void CL(Vector<T>& input1, Vector<T>& input2, Vector<T>& output,
int useNumGPU = 1);
249 template <
typename T>
252 template <
typename T>
253 void CL(Vector<T>& input1,
Matrix<T>& input2, Vector<T>& output,
int useNumGPU = 1);
255 template <
typename T>
256 void CL(Vector<T>& input1, SparseMatrix<T>& input2, Vector<T>& output,
int useNumGPU = 1);
258 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
259 void CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
int useNumGPU = 1);
262 template <
typename Input1Iterator,
typename Input2Iterator,
typename OutputIterator>
263 void mapArrayNumDevices_CL(Input1Iterator input1Begin, Input1Iterator input1End, Input2Iterator input2Begin, Input2Iterator input2End, OutputIterator outputBegin,
size_t numDevices);
266 std::vector<std::pair<cl_kernel, Device_CL*> > m_kernels_CL;
268 void createOpenCLProgram();
Contains the definitions of CUDA specific member functions for the MapArray skeleton.
Contains a class declaration for the SparseMatrix container.
Contains the definitions of non-backend specific member functions for the MapArray skeleton...
A class representing the MapArray skeleton.
Definition: maparray.h:94
Includes the macro files needed for the defined backends.
void CU(Vector< in > &input, MultiVector P, Vector< out > &output, int useNumGPU=1)
Definition: maparray_cu.inl:155
MapArray(MapArrayFunc *mapArrayFunc)
Definition: maparray.inl:21
void OMP(Vector< in > &input, MultiVector P, Vector< out > &output)
Definition: maparray_omp.inl:54
void CPU(Vector< in > &input, MultiVector P, Vector< out > &output)
Definition: maparray_cpu.inl:21
void finishAll()
Definition: environment.inl:575
Contains the definitions of OpenCL specific member functions for the MapArray skeleton.
Contains the definitions of CPU specific member functions for the MapArray skeleton.
void operator()(Vector< T > &input1, Vector< T > &input2, Vector< T > &output, int groupId=-1)
Definition: maparray.inl:102
Contains a class declaration for the object that represents an OpenCL device.
Contains a class declaration for the Matrix container.
Contains a class declaration for the Vector container.
Contains a class declaration for Environment class.
A class representing the column-wise iterator for the Matrix data-type.
~MapArray()
Definition: maparray.inl:83
void setConstant(U constant1)
Definition: maparray.h:107
Contains the definitions of OpenMP specific member functions for the MapArray skeleton.
Contains a class that stores information about which back ends to use when executing.