C++ API Reference for Intel® Data Analytics Acceleration Library 2019 Update 4

algorithm_container_base_common.h
1 /* file: algorithm_container_base_common.h */
2 /*******************************************************************************
3 * Copyright 2014-2019 Intel Corporation.
4 *
5 * This software and the related documents are Intel copyrighted materials, and
6 * your use of them is governed by the express license under which they were
7 * provided to you (License). Unless the License provides otherwise, you may not
8 * use, modify, copy, publish, distribute, disclose or transmit this software or
9 * the related documents without Intel's prior written permission.
10 *
11 * This software and the related documents are provided as is, with no express
12 * or implied warranties, other than those that are expressly stated in the
13 * License.
14 *******************************************************************************/
15 
16 /*
17 //++
18 // Implementation of base classes defining algorithm interface.
19 //--
20 */
21 
22 #ifndef __ALGORITHM_CONTAINER_BASE_COMMON_H__
23 #define __ALGORITHM_CONTAINER_BASE_COMMON_H__
24 
25 #include "services/daal_memory.h"
26 #include "services/daal_kernel_defines.h"
27 #include "services/error_handling.h"
28 #include "services/env_detect.h"
29 #include "algorithms/algorithm_types.h"
30 #include "algorithms/algorithm_kernel.h"
31 
32 namespace daal
33 {
34 namespace algorithms
35 {
36 
44 namespace interface1
45 {
46 
53 class AlgorithmContainerIface
54 {
55 public:
56  DAAL_NEW_DELETE();
57 
58  virtual ~AlgorithmContainerIface() {}
59 };
60 
67 class AlgorithmContainerIfaceImpl : public AlgorithmContainerIface
68 {
69 public:
74  AlgorithmContainerIfaceImpl(daal::services::Environment::env *daalEnv) : _env(daalEnv), _kernel(NULL) {}
75 
76  virtual ~AlgorithmContainerIfaceImpl() {}
77 
82  void setEnvironment(daal::services::Environment::env *daalEnv)
83  {
84  _env = daalEnv;
85  }
86 
87 protected:
88  daal::services::Environment::env *_env;
89  Kernel *_kernel;
90 };
91 
101 template<ComputeMode mode> class AlgorithmContainer : public AlgorithmContainerIfaceImpl
102 {
103 public:
108  AlgorithmContainer(daal::services::Environment::env *daalEnv) : AlgorithmContainerIfaceImpl(daalEnv) {}
109 
110  virtual ~AlgorithmContainer() {}
111 
117  virtual services::Status compute() = 0;
118 
123  virtual services::Status finalizeCompute() = 0;
124 
128  virtual services::Status setupCompute() = 0;
129 
133  virtual services::Status resetCompute() = 0;
134 
138  virtual services::Status setupFinalizeCompute() = 0;
139 
143  virtual services::Status resetFinalizeCompute() = 0;
144 };
145 
155 template<ComputeMode mode> class AlgorithmContainerImpl : public AlgorithmContainer<mode>
156 {
157 public:
162  AlgorithmContainerImpl(daal::services::Environment::env *daalEnv = 0) : AlgorithmContainer<mode>(daalEnv), _in(0), _pres(0), _res(0), _par(0) {}
163 
164  virtual ~AlgorithmContainerImpl() {}
165 
172  void setArguments(Input *in, PartialResult *pres, Parameter *par)
173  {
174  _in = in;
175  _pres = pres;
176  _par = par;
177  }
178 
183  void setPartialResult(PartialResult *pres)
184  {
185  _pres = pres;
186  }
187 
192  void setResult(Result *res)
193  {
194  _res = res;
195  }
196 
201  Result *getResult() const
202  {
203  return _res;
204  }
205 
206  virtual services::Status setupCompute() DAAL_C11_OVERRIDE { return services::Status(); }
207 
208  virtual services::Status resetCompute() DAAL_C11_OVERRIDE { return services::Status(); }
209 
210  virtual services::Status setupFinalizeCompute() DAAL_C11_OVERRIDE { return services::Status(); }
211 
212  virtual services::Status resetFinalizeCompute() DAAL_C11_OVERRIDE { return services::Status(); }
213 
214 protected:
215  Input *_in;
216  PartialResult *_pres;
217  Result *_res;
218  Parameter *_par;
219 };
220 
236 template<ComputeMode mode,
237  typename sse2Container
238  DAAL_KERNEL_SSSE3_ONLY(typename ssse3Container)
239  DAAL_KERNEL_SSE42_ONLY(typename sse42Container)
240  DAAL_KERNEL_AVX_ONLY(typename avxContainer)
241  DAAL_KERNEL_AVX2_ONLY(typename avx2Container)
242  DAAL_KERNEL_AVX512_MIC_ONLY(typename avx512_micContainer)
243  DAAL_KERNEL_AVX512_ONLY(typename avx512Container)
244 >
245 class DAAL_EXPORT AlgorithmDispatchContainer : public AlgorithmContainerImpl<mode>
246 {
247 public:
252  AlgorithmDispatchContainer(daal::services::Environment::env *daalEnv);
253 
254  virtual ~AlgorithmDispatchContainer() { delete _cntr; }
255 
256  virtual services::Status compute() DAAL_C11_OVERRIDE
257  {
258  _cntr->setArguments(this->_in, this->_pres, this->_par);
259  return _cntr->compute();
260  }
261 
262  virtual services::Status finalizeCompute() DAAL_C11_OVERRIDE
263  {
264  _cntr->setArguments(this->_in, this->_pres, this->_par);
265  _cntr->setResult(this->_res);
266  return _cntr->finalizeCompute();
267  }
268 
269  virtual services::Status setupCompute() DAAL_C11_OVERRIDE
270  {
271  _cntr->setArguments(this->_in, this->_pres, this->_par);
272  _cntr->setResult(this->_res);
273  return _cntr->setupCompute();
274  }
275 
276  virtual services::Status resetCompute() DAAL_C11_OVERRIDE
277  {
278  return _cntr->resetCompute();
279  }
280 
281 protected:
282  AlgorithmContainerImpl<mode> *_cntr;
283 };
284 
285 #define __DAAL_ALGORITHM_CONTAINER(Mode, ContainerTemplate, ...) \
286  AlgorithmDispatchContainer< Mode, \
287  ContainerTemplate<__VA_ARGS__, sse2> \
288  DAAL_KERNEL_SSSE3_CONTAINER(ContainerTemplate, __VA_ARGS__) \
289  DAAL_KERNEL_SSE42_CONTAINER(ContainerTemplate, __VA_ARGS__) \
290  DAAL_KERNEL_AVX_CONTAINER(ContainerTemplate, __VA_ARGS__) \
291  DAAL_KERNEL_AVX2_CONTAINER(ContainerTemplate, __VA_ARGS__) \
292  DAAL_KERNEL_AVX512_MIC_CONTAINER(ContainerTemplate, __VA_ARGS__) \
293  DAAL_KERNEL_AVX512_CONTAINER(ContainerTemplate, __VA_ARGS__)>
294 
296 } // namespace interface1
297 using interface1::AlgorithmContainerImpl;
298 using interface1::AlgorithmDispatchContainer;
299 
300 }
301 }
302 #endif
daal::algorithms::interface1::AlgorithmContainerIfaceImpl::AlgorithmContainerIfaceImpl
AlgorithmContainerIfaceImpl(daal::services::Environment::env *daalEnv)
Definition: algorithm_container_base_common.h:74
daal::algorithms::interface1::AlgorithmContainer::setupCompute
virtual services::Status setupCompute()=0
daal::algorithms::interface1::AlgorithmContainerImpl::resetCompute
virtual services::Status resetCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:208
daal::algorithms::interface1::AlgorithmContainerImpl::AlgorithmContainerImpl
AlgorithmContainerImpl(daal::services::Environment::env *daalEnv=0)
Definition: algorithm_container_base_common.h:162
daal
Definition: algorithm_base_common.h:31
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:155
daal::algorithms::interface1::Result
Base class to represent final results of the computation. Algorithm-specific final results are repres...
Definition: algorithm_types.h:307
daal::algorithms::interface1::AlgorithmDispatchContainer::finalizeCompute
virtual services::Status finalizeCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:262
daal::algorithms::interface1::AlgorithmContainerImpl::setPartialResult
void setPartialResult(PartialResult *pres)
Definition: algorithm_container_base_common.h:183
daal::algorithms::interface1::AlgorithmDispatchContainer
Implements a container to dispatch algorithms to cpu-specific implementations.
Definition: algorithm_container_base_common.h:245
daal::algorithms::interface1::Kernel
Base class to represent algorithm implementation
Definition: algorithm_kernel.h:46
daal::algorithms::interface1::AlgorithmDispatchContainer::setupCompute
virtual services::Status setupCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:269
daal::algorithms::interface1::AlgorithmContainerImpl::getResult
Result * getResult() const
Definition: algorithm_container_base_common.h:201
daal::algorithms::interface1::PartialResult
Base class to represent partial results of the computation. Algorithm-specific partial results are re...
Definition: algorithm_types.h:227
daal::algorithms::interface1::AlgorithmDispatchContainer::compute
virtual services::Status compute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:256
daal::algorithms::interface1::AlgorithmContainer::AlgorithmContainer
AlgorithmContainer(daal::services::Environment::env *daalEnv)
Definition: algorithm_container_base_common.h:108
daal::algorithms::interface1::Parameter
Base class to represent computation parameters. Algorithm-specific parameters are represented as deri...
Definition: algorithm_types.h:60
daal::algorithms::interface1::AlgorithmContainerIfaceImpl::setEnvironment
void setEnvironment(daal::services::Environment::env *daalEnv)
Definition: algorithm_container_base_common.h:82
daal::algorithms::interface1::AlgorithmContainerImpl::setArguments
void setArguments(Input *in, PartialResult *pres, Parameter *par)
Definition: algorithm_container_base_common.h:172
daal::algorithms::interface1::AlgorithmContainer::finalizeCompute
virtual services::Status finalizeCompute()=0
daal::algorithms::interface1::AlgorithmContainerIfaceImpl
Implements the abstract interface AlgorithmContainerIfaceImpl. It is associated with the Algorithm cl...
Definition: algorithm_container_base_common.h:67
daal::algorithms::interface1::AlgorithmContainer::resetFinalizeCompute
virtual services::Status resetFinalizeCompute()=0
daal::algorithms::interface1::AlgorithmContainer::compute
virtual services::Status compute()=0
daal::algorithms::interface1::AlgorithmContainerIface
Implements the abstract interface AlgorithmContainerIface. It is associated with the Algorithm class ...
Definition: algorithm_container_base_common.h:53
daal::algorithms::interface1::AlgorithmContainer::resetCompute
virtual services::Status resetCompute()=0
daal::algorithms::interface1::AlgorithmContainerImpl::setupFinalizeCompute
virtual services::Status setupFinalizeCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:210
daal::algorithms::interface1::AlgorithmContainerImpl::resetFinalizeCompute
virtual services::Status resetFinalizeCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:212
daal::algorithms::interface1::AlgorithmContainerImpl::setResult
void setResult(Result *res)
Definition: algorithm_container_base_common.h:192
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:101
daal::algorithms::interface1::Input
Base class to represent computation input arguments. Algorithm-specific input arguments are represent...
Definition: algorithm_types.h:191
daal::ComputeMode
ComputeMode
Definition: daal_defines.h:108
daal_kernel_defines.h
daal::algorithms::interface1::AlgorithmContainer::setupFinalizeCompute
virtual services::Status setupFinalizeCompute()=0
daal::algorithms::interface1::AlgorithmDispatchContainer::resetCompute
virtual services::Status resetCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:276
daal::algorithms::interface1::AlgorithmContainerImpl::setupCompute
virtual services::Status setupCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:206

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