23 #ifndef __SUBTENSOR_H__
24 #define __SUBTENSOR_H__
26 #include "services/error_handling.h"
27 #include "services/daal_memory.h"
28 #include "data_management/data/numeric_types.h"
29 #include "data_management/data/tensor.h"
33 namespace data_management
46 template<
typename DataType>
47 class DAAL_EXPORT SubtensorDescriptor
51 SubtensorDescriptor();
54 ~SubtensorDescriptor();
60 inline DataType* getPtr()
const
64 return (DataType *)_rawPtr;
73 inline services::SharedPtr<DataType> getSharedPtr()
const
77 return services::SharedPtr<DataType>(services::reinterpretPointerCast<DataType, byte>(*_pPtr), (DataType *)_rawPtr);
85 inline size_t getNumberOfDims()
const {
return _tensorNDims-_nFixedDims; }
91 inline size_t* getSubtensorDimSizes()
const {
return _dimNums+_nFixedDims; }
97 inline const TensorOffsetLayout *getLayout()
const {
return _layout; }
103 inline bool getInplaceFlag()
const {
return _inplaceFlag; }
120 inline void setPtr( DataType *ptr )
122 _ptr = services::SharedPtr<DataType>(ptr, services::EmptyDeleter());
126 inline void setPtr( services::SharedPtr<byte>* pPtr, byte * rawPtr )
136 inline bool resizeBuffer()
138 if ( _subtensorSize > _capacity )
142 _buffer = services::SharedPtr<DataType>((DataType *)daal::services::daal_malloc(_subtensorSize *
sizeof(DataType)), services::ServiceDeleter());
146 _capacity = _subtensorSize;
156 _inplaceFlag =
false;
172 size_t setDetails(
size_t tensorNDims,
const size_t *tensorDimNums,
173 size_t nFixedDims,
const size_t *fixedDimNums,
size_t rangeDimIdx,
size_t rangeDimNum,
int rwFlag )
175 if (tensorDimNums == 0 || (nFixedDims > 0 && fixedDimNums == 0) || nFixedDims > tensorNDims)
182 if( _tensorNDims != tensorNDims )
184 if( _dimNums != _tensorNDimsBuffer )
186 daal::services::daal_free( _dimNums );
191 _dimNums = (
size_t*)daal::services::daal_malloc( tensorNDims *
sizeof(
size_t) );
195 _dimNums = _tensorNDimsBuffer;
204 _tensorNDims = tensorNDims;
207 _nFixedDims = nFixedDims;
208 for(
size_t i = 0; i < _nFixedDims; i++ )
210 _dimNums[i] = fixedDimNums[i];
215 if( _nFixedDims != _tensorNDims )
217 _rangeDimIdx = rangeDimIdx;
218 _dimNums[_nFixedDims] = rangeDimNum;
219 _subtensorSize *= rangeDimNum;
222 for(
size_t i = _nFixedDims+1; i < _tensorNDims; i++ )
224 _dimNums[i] = tensorDimNums[i];
225 _subtensorSize *= tensorDimNums[i];
228 return _subtensorSize;
235 inline bool saveOffsetLayout(
const TensorOffsetLayout &layout )
239 _layout =
const_cast<TensorOffsetLayout *
>(&layout);
240 _layoutOwnFlag =
false;
249 inline bool saveOffsetLayoutCopy(
const TensorOffsetLayout &layout )
253 _layout =
new TensorOffsetLayout(layout);
258 _layoutOwnFlag =
true;
267 inline size_t getSize()
const {
return _subtensorSize; }
273 inline size_t getFixedDims()
const {
return _nFixedDims; }
279 inline size_t *getFixedDimNums()
const {
return _dimNums; }
285 inline size_t getRangeDimIdx()
const {
return _rangeDimIdx; }
291 inline size_t getRangeDimNum()
const
293 if( _nFixedDims != _tensorNDims )
295 return _dimNums[_nFixedDims];
304 inline size_t getRWFlag()
const {
return _rwFlag; }
312 _buffer = services::SharedPtr<DataType>();
317 services::SharedPtr<DataType> _ptr;
318 services::SharedPtr<DataType> _buffer;
326 size_t _tensorNDimsBuffer[10];
328 size_t _subtensorSize;
331 TensorOffsetLayout *_layout;
334 services::SharedPtr<byte> *_pPtr;
341 using interface1::SubtensorDescriptor;
daal::data_management::interface1::SubtensorDescriptor::getRangeDimNum
size_t getRangeDimNum() const
Definition: subtensor.h:291
daal
Definition: algorithm_base_common.h:31
daal::data_management::interface1::SubtensorDescriptor::getFixedDims
size_t getFixedDims() const
Definition: subtensor.h:273
daal::data_management::interface1::SubtensorDescriptor::getRangeDimIdx
size_t getRangeDimIdx() const
Definition: subtensor.h:285
daal::data_management::interface1::SubtensorDescriptor::getNumberOfDims
size_t getNumberOfDims() const
Definition: subtensor.h:85
daal::data_management::interface1::SubtensorDescriptor::saveOffsetLayoutCopy
bool saveOffsetLayoutCopy(const TensorOffsetLayout &layout)
Definition: subtensor.h:249
daal::data_management::interface1::SubtensorDescriptor::getSize
size_t getSize() const
Definition: subtensor.h:267
daal::data_management::interface1::SubtensorDescriptor::getInplaceFlag
bool getInplaceFlag() const
Definition: subtensor.h:103
daal::data_management::interface1::SubtensorDescriptor::getPtr
DataType * getPtr() const
Definition: subtensor.h:60
daal::data_management::interface1::SubtensorDescriptor::freeBuffer
void freeBuffer()
Definition: subtensor.h:310
daal::data_management::interface1::SubtensorDescriptor::getSharedPtr
services::SharedPtr< DataType > getSharedPtr() const
Definition: subtensor.h:73
daal::data_management::interface1::SubtensorDescriptor::getSubtensorDimSizes
size_t * getSubtensorDimSizes() const
Definition: subtensor.h:91
daal::data_management::interface1::SubtensorDescriptor::reset
void reset()
Definition: subtensor.h:108
daal::services::daal_malloc
DAAL_EXPORT void * daal_malloc(size_t size, size_t alignment=DAAL_MALLOC_DEFAULT_ALIGNMENT)
daal::data_management::interface1::SubtensorDescriptor::setPtr
void setPtr(DataType *ptr)
Definition: subtensor.h:120
daal::data_management::interface1::SubtensorDescriptor::getRWFlag
size_t getRWFlag() const
Definition: subtensor.h:304
daal::services::daal_free
DAAL_EXPORT void daal_free(void *ptr)
daal::data_management::interface1::SubtensorDescriptor::saveOffsetLayout
bool saveOffsetLayout(const TensorOffsetLayout &layout)
Definition: subtensor.h:235
daal::data_management::interface1::TensorOffsetLayout
Class for a data management component responsible for representation of data layout in the HomogenTen...
Definition: tensor.h:189
daal::data_management::interface1::SubtensorDescriptor::getLayout
const TensorOffsetLayout * getLayout() const
Definition: subtensor.h:97
daal::data_management::interface1::SubtensorDescriptor
Class with descriptor of the subtensor retrieved from Tensor getSubTensor function.
Definition: subtensor.h:47
daal::data_management::interface1::SubtensorDescriptor::setDetails
size_t setDetails(size_t tensorNDims, const size_t *tensorDimNums, size_t nFixedDims, const size_t *fixedDimNums, size_t rangeDimIdx, size_t rangeDimNum, int rwFlag)
Definition: subtensor.h:172
daal::data_management::interface1::SubtensorDescriptor::resizeBuffer
bool resizeBuffer()
Definition: subtensor.h:136
daal::data_management::interface1::SubtensorDescriptor::getFixedDimNums
size_t * getFixedDimNums() const
Definition: subtensor.h:279