22 #ifndef __ALGORITHM_CONTAINER_BASE_COMMON_H__
23 #define __ALGORITHM_CONTAINER_BASE_COMMON_H__
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"
53 class AlgorithmContainerIface
58 virtual ~AlgorithmContainerIface() {}
67 class AlgorithmContainerIfaceImpl :
public AlgorithmContainerIface
74 AlgorithmContainerIfaceImpl(daal::services::Environment::env *daalEnv) : _env(daalEnv), _kernel(NULL) {}
76 virtual ~AlgorithmContainerIfaceImpl() {}
82 void setEnvironment(daal::services::Environment::env *daalEnv)
88 daal::services::Environment::env *_env;
101 template<ComputeMode mode>
class AlgorithmContainer :
public AlgorithmContainerIfaceImpl
108 AlgorithmContainer(daal::services::Environment::env *daalEnv) : AlgorithmContainerIfaceImpl(daalEnv) {}
110 virtual ~AlgorithmContainer() {}
117 virtual services::Status compute() = 0;
123 virtual services::Status finalizeCompute() = 0;
128 virtual services::Status setupCompute() = 0;
133 virtual services::Status resetCompute() = 0;
138 virtual services::Status setupFinalizeCompute() = 0;
143 virtual services::Status resetFinalizeCompute() = 0;
155 template<ComputeMode mode>
class AlgorithmContainerImpl :
public AlgorithmContainer<mode>
162 AlgorithmContainerImpl(daal::services::Environment::env *daalEnv = 0) : AlgorithmContainer<mode>(daalEnv), _in(0), _pres(0), _res(0), _par(0) {}
164 virtual ~AlgorithmContainerImpl() {}
172 void setArguments(Input *in, PartialResult *pres, Parameter *par)
183 void setPartialResult(PartialResult *pres)
192 void setResult(Result *res)
201 Result *getResult()
const
206 virtual services::Status setupCompute() DAAL_C11_OVERRIDE {
return services::Status(); }
208 virtual services::Status resetCompute() DAAL_C11_OVERRIDE {
return services::Status(); }
210 virtual services::Status setupFinalizeCompute() DAAL_C11_OVERRIDE {
return services::Status(); }
212 virtual services::Status resetFinalizeCompute() DAAL_C11_OVERRIDE {
return services::Status(); }
216 PartialResult *_pres;
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)
245 class DAAL_EXPORT AlgorithmDispatchContainer : public AlgorithmContainerImpl<mode>
252 AlgorithmDispatchContainer(daal::services::Environment::env *daalEnv);
254 virtual ~AlgorithmDispatchContainer() {
delete _cntr; }
256 virtual services::Status compute() DAAL_C11_OVERRIDE
258 _cntr->setArguments(this->_in, this->_pres, this->_par);
259 return _cntr->compute();
262 virtual services::Status finalizeCompute() DAAL_C11_OVERRIDE
264 _cntr->setArguments(this->_in, this->_pres, this->_par);
265 _cntr->setResult(this->_res);
266 return _cntr->finalizeCompute();
269 virtual services::Status setupCompute() DAAL_C11_OVERRIDE
271 _cntr->setArguments(this->_in, this->_pres, this->_par);
272 _cntr->setResult(this->_res);
273 return _cntr->setupCompute();
276 virtual services::Status resetCompute() DAAL_C11_OVERRIDE
278 return _cntr->resetCompute();
282 AlgorithmContainerImpl<mode> *_cntr;
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__)>
297 using interface1::AlgorithmContainerImpl;
298 using interface1::AlgorithmDispatchContainer;
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::ComputeMode
ComputeMode
Definition: daal_defines.h:104
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