48 #ifndef __ALGORITHM_CONTAINER_BASE_COMMON_H__ 49 #define __ALGORITHM_CONTAINER_BASE_COMMON_H__ 51 #include "services/daal_memory.h" 52 #include "services/daal_kernel_defines.h" 53 #include "services/error_handling.h" 54 #include "services/env_detect.h" 55 #include "algorithms/algorithm_types.h" 56 #include "algorithms/algorithm_kernel.h" 79 class AlgorithmContainerIface
84 virtual ~AlgorithmContainerIface() {}
93 class AlgorithmContainerIfaceImpl :
public AlgorithmContainerIface
100 AlgorithmContainerIfaceImpl(daal::services::Environment::env *daalEnv) : _env(daalEnv), _kernel(NULL) {}
102 virtual ~AlgorithmContainerIfaceImpl() {}
108 void setEnvironment(daal::services::Environment::env *daalEnv)
114 daal::services::Environment::env *_env;
127 template<ComputeMode mode>
class AlgorithmContainer :
public AlgorithmContainerIfaceImpl
134 AlgorithmContainer(daal::services::Environment::env *daalEnv) : AlgorithmContainerIfaceImpl(daalEnv) {}
136 virtual ~AlgorithmContainer() {}
143 virtual services::Status compute() = 0;
149 virtual services::Status finalizeCompute() = 0;
154 virtual services::Status setupCompute() = 0;
159 virtual services::Status resetCompute() = 0;
164 virtual services::Status setupFinalizeCompute() = 0;
169 virtual services::Status resetFinalizeCompute() = 0;
181 template<ComputeMode mode>
class AlgorithmContainerImpl :
public AlgorithmContainer<mode>
188 AlgorithmContainerImpl(daal::services::Environment::env *daalEnv = 0) : AlgorithmContainer<mode>(daalEnv), _in(0), _pres(0), _res(0), _par(0) {}
190 virtual ~AlgorithmContainerImpl() {}
198 void setArguments(Input *in, PartialResult *pres, Parameter *par)
209 void setPartialResult(PartialResult *pres)
218 void setResult(Result *res)
227 Result *getResult()
const 232 virtual services::Status setupCompute() DAAL_C11_OVERRIDE {
return services::Status(); }
234 virtual services::Status resetCompute() DAAL_C11_OVERRIDE {
return services::Status(); }
236 virtual services::Status setupFinalizeCompute() DAAL_C11_OVERRIDE {
return services::Status(); }
238 virtual services::Status resetFinalizeCompute() DAAL_C11_OVERRIDE {
return services::Status(); }
242 PartialResult *_pres;
262 template<ComputeMode mode,
263 typename sse2Container
264 DAAL_KERNEL_SSSE3_ONLY(
typename ssse3Container)
265 DAAL_KERNEL_SSE42_ONLY(
typename sse42Container)
266 DAAL_KERNEL_AVX_ONLY(
typename avxContainer)
267 DAAL_KERNEL_AVX2_ONLY(
typename avx2Container)
268 DAAL_KERNEL_AVX512_mic_ONLY(
typename avx512_micContainer)
269 DAAL_KERNEL_AVX512_ONLY(
typename avx512Container)
271 class DAAL_EXPORT AlgorithmDispatchContainer :
public AlgorithmContainerImpl<mode>
278 AlgorithmDispatchContainer(daal::services::Environment::env *daalEnv);
280 virtual ~AlgorithmDispatchContainer() {
delete _cntr; }
282 virtual services::Status compute() DAAL_C11_OVERRIDE
284 _cntr->setArguments(this->_in, this->_pres, this->_par);
285 return _cntr->compute();
288 virtual services::Status finalizeCompute() DAAL_C11_OVERRIDE
290 _cntr->setArguments(this->_in, this->_pres, this->_par);
291 _cntr->setResult(this->_res);
292 return _cntr->finalizeCompute();
295 virtual services::Status setupCompute() DAAL_C11_OVERRIDE
297 _cntr->setArguments(this->_in, this->_pres, this->_par);
298 _cntr->setResult(this->_res);
299 return _cntr->setupCompute();
302 virtual services::Status resetCompute() DAAL_C11_OVERRIDE
304 return _cntr->resetCompute();
308 AlgorithmContainerImpl<mode> *_cntr;
311 #define __DAAL_ALGORITHM_CONTAINER(Mode, ContainerTemplate, ...) \ 312 AlgorithmDispatchContainer< Mode, \ 313 ContainerTemplate<__VA_ARGS__, sse2> \ 314 DAAL_KERNEL_SSSE3_CONTAINER(ContainerTemplate, __VA_ARGS__) \ 315 DAAL_KERNEL_SSE42_CONTAINER(ContainerTemplate, __VA_ARGS__) \ 316 DAAL_KERNEL_AVX_CONTAINER(ContainerTemplate, __VA_ARGS__) \ 317 DAAL_KERNEL_AVX2_CONTAINER(ContainerTemplate, __VA_ARGS__) \ 318 DAAL_KERNEL_AVX512_mic_CONTAINER(ContainerTemplate, __VA_ARGS__) \ 319 DAAL_KERNEL_AVX512_CONTAINER(ContainerTemplate, __VA_ARGS__)> 323 using interface1::AlgorithmContainerImpl;
324 using interface1::AlgorithmDispatchContainer;
daal::algorithms::interface1::AlgorithmContainerImpl::getResult
Result * getResult() const
Definition: algorithm_container_base_common.h:227
daal::algorithms::interface1::AlgorithmContainerIfaceImpl::AlgorithmContainerIfaceImpl
AlgorithmContainerIfaceImpl(daal::services::Environment::env *daalEnv)
Definition: algorithm_container_base_common.h:100
daal::algorithms::interface1::AlgorithmContainerImpl::resetCompute
virtual services::Status resetCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:234
daal::algorithms::interface1::AlgorithmContainerImpl::AlgorithmContainerImpl
AlgorithmContainerImpl(daal::services::Environment::env *daalEnv=0)
Definition: algorithm_container_base_common.h:188
daal::services::interface1::Environment::_envStruct
The environment structure.
Definition: env_detect.h:95
daal::services::interface1::Status
Class that holds the results of API calls. In case of API routine failure it contains the list of err...
Definition: error_handling.h:491
daal
Definition: algorithm_base_common.h:57
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:181
daal::algorithms::interface1::Result
Base class to represent final results of the computation. Algorithm-specific final results are repres...
Definition: algorithm_types.h:331
daal::algorithms::interface1::AlgorithmDispatchContainer::finalizeCompute
virtual services::Status finalizeCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:288
daal::algorithms::interface1::AlgorithmContainerImpl::setPartialResult
void setPartialResult(PartialResult *pres)
Definition: algorithm_container_base_common.h:209
daal::algorithms::interface1::AlgorithmDispatchContainer
Implements a container to dispatch algorithms to cpu-specific implementations.
Definition: algorithm_container_base_common.h:271
daal::algorithms::interface1::Kernel
Base class to represent algorithm implementation
Definition: algorithm_kernel.h:72
daal::algorithms::interface1::AlgorithmDispatchContainer::setupCompute
virtual services::Status setupCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:295
daal::algorithms::interface1::PartialResult
Base class to represent partial results of the computation. Algorithm-specific partial results are re...
Definition: algorithm_types.h:253
daal::algorithms::interface1::AlgorithmDispatchContainer::compute
virtual services::Status compute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:282
daal::algorithms::interface1::AlgorithmContainer::AlgorithmContainer
AlgorithmContainer(daal::services::Environment::env *daalEnv)
Definition: algorithm_container_base_common.h:134
daal::algorithms::interface1::Parameter
Base class to represent computation parameters. Algorithm-specific parameters are represented as deri...
Definition: algorithm_types.h:86
daal::algorithms::interface1::AlgorithmContainerIfaceImpl::setEnvironment
void setEnvironment(daal::services::Environment::env *daalEnv)
Definition: algorithm_container_base_common.h:108
daal::algorithms::interface1::AlgorithmContainerImpl::setArguments
void setArguments(Input *in, PartialResult *pres, Parameter *par)
Definition: algorithm_container_base_common.h:198
daal::algorithms::interface1::AlgorithmContainerIfaceImpl
Implements the abstract interface AlgorithmContainerIfaceImpl. It is associated with the Algorithm cl...
Definition: algorithm_container_base_common.h:93
daal::algorithms::interface1::AlgorithmContainerIface
Implements the abstract interface AlgorithmContainerIface. It is associated with the Algorithm class ...
Definition: algorithm_container_base_common.h:79
daal::algorithms::interface1::AlgorithmContainerImpl::setupFinalizeCompute
virtual services::Status setupFinalizeCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:236
daal::algorithms::interface1::AlgorithmContainerImpl::resetFinalizeCompute
virtual services::Status resetFinalizeCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:238
daal::algorithms::interface1::AlgorithmContainerImpl::setResult
void setResult(Result *res)
Definition: algorithm_container_base_common.h:218
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:127
daal::ComputeMode
ComputeMode
Definition: daal_defines.h:130
daal::algorithms::interface1::AlgorithmDispatchContainer::resetCompute
virtual services::Status resetCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:302
daal::algorithms::interface1::AlgorithmContainerImpl::setupCompute
virtual services::Status setupCompute() DAAL_C11_OVERRIDE
Definition: algorithm_container_base_common.h:232