C++ API Reference for Intel® Data Analytics Acceleration Library 2020 Update 1

algorithm_container_base_common.h
1 /* file: algorithm_container_base_common.h */
2 /*******************************************************************************
3 * Copyright 2014-2020 Intel Corporation
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *******************************************************************************/
17 
18 /*
19 //++
20 // Implementation of base classes defining algorithm interface.
21 //--
22 */
23 
24 #ifndef __ALGORITHM_CONTAINER_BASE_COMMON_H__
25 #define __ALGORITHM_CONTAINER_BASE_COMMON_H__
26 
27 #include "services/daal_memory.h"
28 #include "services/daal_kernel_defines.h"
29 #include "services/error_handling.h"
30 #include "services/env_detect.h"
31 #include "algorithms/algorithm_types.h"
32 #include "algorithms/algorithm_kernel.h"
33 
34 namespace daal
35 {
36 namespace algorithms
37 {
38 
46 namespace interface1
47 {
48 
55 class AlgorithmContainerIface
56 {
57 public:
58  DAAL_NEW_DELETE();
59 
60  virtual ~AlgorithmContainerIface() {}
61 };
62 
69 class AlgorithmContainerIfaceImpl : public AlgorithmContainerIface
70 {
71 public:
76  AlgorithmContainerIfaceImpl(daal::services::Environment::env *daalEnv) : _env(daalEnv), _kernel(NULL) {}
77 
78  virtual ~AlgorithmContainerIfaceImpl() {}
79 
84  void setEnvironment(daal::services::Environment::env *daalEnv)
85  {
86  _env = daalEnv;
87  }
88 
89 protected:
90  daal::services::Environment::env *_env;
91  Kernel *_kernel;
92 };
93 
103 template<ComputeMode mode> class AlgorithmContainer : public AlgorithmContainerIfaceImpl
104 {
105 public:
110  AlgorithmContainer(daal::services::Environment::env *daalEnv) : AlgorithmContainerIfaceImpl(daalEnv) {}
111 
112  virtual ~AlgorithmContainer() {}
113 
119  virtual services::Status compute() = 0;
120 
125  virtual services::Status finalizeCompute() = 0;
126 
130  virtual services::Status setupCompute() = 0;
131 
135  virtual services::Status resetCompute() = 0;
136 
140  virtual services::Status setupFinalizeCompute() = 0;
141 
145  virtual services::Status resetFinalizeCompute() = 0;
146 };
147 
157 template<ComputeMode mode> class AlgorithmContainerImpl : public AlgorithmContainer<mode>
158 {
159 public:
164  AlgorithmContainerImpl(daal::services::Environment::env *daalEnv = 0) : AlgorithmContainer<mode>(daalEnv), _in(0), _pres(0), _res(0), _par(0) {}
165 
166  virtual ~AlgorithmContainerImpl() {}
167 
174  void setArguments(Input *in, PartialResult *pres, Parameter *par)
175  {
176  _in = in;
177  _pres = pres;
178  _par = par;
179  }
180 
185  void setPartialResult(PartialResult *pres)
186  {
187  _pres = pres;
188  }
189 
194  void setResult(Result *res)
195  {
196  _res = res;
197  }
198 
203  Result *getResult() const
204  {
205  return _res;
206  }
207 
208  virtual services::Status setupCompute() DAAL_C11_OVERRIDE { return services::Status(); }
209 
210  virtual services::Status resetCompute() DAAL_C11_OVERRIDE { return services::Status(); }
211 
212  virtual services::Status setupFinalizeCompute() DAAL_C11_OVERRIDE { return services::Status(); }
213 
214  virtual services::Status resetFinalizeCompute() DAAL_C11_OVERRIDE { return services::Status(); }
215 
216 protected:
217  Input *_in;
218  PartialResult *_pres;
219  Result *_res;
220  Parameter *_par;
221 };
222 
238 template<ComputeMode mode,
239  typename sse2Container
240  DAAL_KERNEL_SSSE3_ONLY(typename ssse3Container)
241  DAAL_KERNEL_SSE42_ONLY(typename sse42Container)
242  DAAL_KERNEL_AVX_ONLY(typename avxContainer)
243  DAAL_KERNEL_AVX2_ONLY(typename avx2Container)
244  DAAL_KERNEL_AVX512_MIC_ONLY(typename avx512_micContainer)
245  DAAL_KERNEL_AVX512_ONLY(typename avx512Container)
246 >
247 class DAAL_EXPORT AlgorithmDispatchContainer : public AlgorithmContainerImpl<mode>
248 {
249 public:
254  AlgorithmDispatchContainer(daal::services::Environment::env *daalEnv);
255 
256  virtual ~AlgorithmDispatchContainer() { delete _cntr; }
257 
258  virtual services::Status compute() DAAL_C11_OVERRIDE
259  {
260  _cntr->setArguments(this->_in, this->_pres, this->_par);
261  return _cntr->compute();
262  }
263 
264  virtual services::Status finalizeCompute() DAAL_C11_OVERRIDE
265  {
266  _cntr->setArguments(this->_in, this->_pres, this->_par);
267  _cntr->setResult(this->_res);
268  return _cntr->finalizeCompute();
269  }
270 
271  virtual services::Status setupCompute() DAAL_C11_OVERRIDE
272  {
273  _cntr->setArguments(this->_in, this->_pres, this->_par);
274  _cntr->setResult(this->_res);
275  return _cntr->setupCompute();
276  }
277 
278  virtual services::Status resetCompute() DAAL_C11_OVERRIDE
279  {
280  return _cntr->resetCompute();
281  }
282 
283 protected:
284  AlgorithmContainerImpl<mode> *_cntr;
285 };
286 
287 #define __DAAL_ALGORITHM_CONTAINER(Mode, ContainerTemplate, ...) \
288  AlgorithmDispatchContainer< Mode, \
289  ContainerTemplate<__VA_ARGS__, sse2> \
290  DAAL_KERNEL_SSSE3_CONTAINER(ContainerTemplate, __VA_ARGS__) \
291  DAAL_KERNEL_SSE42_CONTAINER(ContainerTemplate, __VA_ARGS__) \
292  DAAL_KERNEL_AVX_CONTAINER(ContainerTemplate, __VA_ARGS__) \
293  DAAL_KERNEL_AVX2_CONTAINER(ContainerTemplate, __VA_ARGS__) \
294  DAAL_KERNEL_AVX512_MIC_CONTAINER(ContainerTemplate, __VA_ARGS__) \
295  DAAL_KERNEL_AVX512_CONTAINER(ContainerTemplate, __VA_ARGS__)>
296 
298 } // namespace interface1
299 using interface1::AlgorithmContainerImpl;
300 using interface1::AlgorithmDispatchContainer;
301 
302 }
303 }
304 #endif
daal::algorithms::interface1::AlgorithmContainerIfaceImpl
Implements the abstract interface AlgorithmContainerIfaceImpl. It is associated with the Algorithm cl...
Definition: algorithm_container_base_common.h:69
daal::algorithms::interface1::AlgorithmContainerIfaceImpl::AlgorithmContainerIfaceImpl
AlgorithmContainerIfaceImpl(daal::services::Environment::env *daalEnv)
Definition: algorithm_container_base_common.h:76
daal::algorithms::interface1::AlgorithmContainerImpl::resetFinalizeCompute
virtual services::Status resetFinalizeCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:214
daal::algorithms::interface1::AlgorithmContainerImpl::setResult
void setResult(Result *res)
Definition: algorithm_container_base_common.h:194
daal::algorithms::interface1::AlgorithmContainer::setupCompute
virtual services::Status setupCompute()=0
daal::algorithms::interface1::AlgorithmContainer::finalizeCompute
virtual services::Status finalizeCompute()=0
daal::algorithms::interface1::AlgorithmContainer::resetFinalizeCompute
virtual services::Status resetFinalizeCompute()=0
daal::algorithms::interface1::AlgorithmDispatchContainer::setupCompute
virtual services::Status setupCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:271
daal::algorithms::interface1::Result
Base class to represent final results of the computation. Algorithm-specific final results are repres...
Definition: algorithm_types.h:309
daal::algorithms::interface1::AlgorithmContainerImpl::resetCompute
virtual services::Status resetCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:210
daal::algorithms::interface1::AlgorithmDispatchContainer
Implements a container to dispatch algorithms to cpu-specific implementations.
Definition: algorithm_container_base_common.h:247
daal::algorithms::interface1::AlgorithmContainer
Abstract interface class that provides virtual methods to access and run implementations of the algor...
Definition: algorithm_container_base_common.h:103
daal::algorithms::interface1::AlgorithmContainer::compute
virtual services::Status compute()=0
daal::algorithms::interface1::AlgorithmContainer::AlgorithmContainer
AlgorithmContainer(daal::services::Environment::env *daalEnv)
Definition: algorithm_container_base_common.h:110
daal::algorithms::interface1::AlgorithmContainer::resetCompute
virtual services::Status resetCompute()=0
daal::algorithms::interface1::AlgorithmContainerImpl::getResult
Result * getResult() const
Definition: algorithm_container_base_common.h:203
daal::algorithms::interface1::AlgorithmDispatchContainer::finalizeCompute
virtual services::Status finalizeCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:264
daal::algorithms::interface1::Input
Base class to represent computation input arguments. Algorithm-specific input arguments are represent...
Definition: algorithm_types.h:193
daal::algorithms::interface1::Kernel
Base class to represent algorithm implementation
Definition: algorithm_kernel.h:48
daal::algorithms::interface1::AlgorithmContainerImpl::setupCompute
virtual services::Status setupCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:208
daal::algorithms::interface1::AlgorithmContainerImpl
Abstract interface class that provides virtual methods to access and run implementations of the algor...
Definition: algorithm_container_base_common.h:157
daal::algorithms::interface1::Parameter
Base class to represent computation parameters. Algorithm-specific parameters are represented as deri...
Definition: algorithm_types.h:62
daal::ComputeMode
ComputeMode
Definition: daal_defines.h:110
daal::algorithms::interface1::AlgorithmContainerIfaceImpl::setEnvironment
void setEnvironment(daal::services::Environment::env *daalEnv)
Definition: algorithm_container_base_common.h:84
daal::algorithms::interface1::AlgorithmContainerImpl::setArguments
void setArguments(Input *in, PartialResult *pres, Parameter *par)
Definition: algorithm_container_base_common.h:174
daal::algorithms::interface1::AlgorithmContainerIface
Implements the abstract interface AlgorithmContainerIface. It is associated with the Algorithm class ...
Definition: algorithm_container_base_common.h:55
daal::algorithms::interface1::AlgorithmDispatchContainer::resetCompute
virtual services::Status resetCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:278
daal::algorithms::interface1::AlgorithmContainer::setupFinalizeCompute
virtual services::Status setupFinalizeCompute()=0
daal::algorithms::interface1::AlgorithmDispatchContainer::compute
virtual services::Status compute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:258
daal::algorithms::interface1::AlgorithmContainerImpl::setupFinalizeCompute
virtual services::Status setupFinalizeCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:212
daal_kernel_defines.h
daal::algorithms::interface1::AlgorithmContainerImpl::AlgorithmContainerImpl
AlgorithmContainerImpl(daal::services::Environment::env *daalEnv=0)
Definition: algorithm_container_base_common.h:164
daal::algorithms::interface1::AlgorithmContainerImpl::setPartialResult
void setPartialResult(PartialResult *pres)
Definition: algorithm_container_base_common.h:185
daal::algorithms::interface1::PartialResult
Base class to represent partial results of the computation. Algorithm-specific partial results are re...
Definition: algorithm_types.h:229

For more complete information about compiler optimizations, see our Optimization Notice.