49 #ifndef __SUBTENSOR_H__ 50 #define __SUBTENSOR_H__ 52 #include "services/error_handling.h" 53 #include "services/daal_memory.h" 54 #include "data_management/data/numeric_types.h" 55 #include "data_management/data/tensor.h" 59 namespace data_management
72 template<
typename DataType>
73 class DAAL_EXPORT SubtensorDescriptor
77 SubtensorDescriptor();
80 ~SubtensorDescriptor();
86 inline DataType* getPtr()
const 90 return (DataType *)_rawPtr;
99 inline services::SharedPtr<DataType> getSharedPtr()
const 103 return services::SharedPtr<DataType>(services::reinterpretPointerCast<DataType, byte>(*_pPtr), (DataType *)_rawPtr);
111 inline size_t getNumberOfDims()
const {
return _tensorNDims-_nFixedDims; }
117 inline size_t* getSubtensorDimSizes()
const {
return _dimNums+_nFixedDims; }
123 inline const TensorOffsetLayout *getLayout()
const {
return _layout; }
129 inline bool getInplaceFlag()
const {
return _inplaceFlag; }
146 inline void setPtr( DataType *ptr )
148 _ptr = services::SharedPtr<DataType>(ptr, services::EmptyDeleter());
152 inline void setPtr( services::SharedPtr<byte>* pPtr, byte * rawPtr )
162 inline bool resizeBuffer()
164 if ( _subtensorSize > _capacity )
168 _buffer = services::SharedPtr<DataType>((DataType *)daal::services::daal_malloc(_subtensorSize *
sizeof(DataType)), services::ServiceDeleter());
172 _capacity = _subtensorSize;
182 _inplaceFlag =
false;
198 size_t setDetails(
size_t tensorNDims,
const size_t *tensorDimNums,
199 size_t nFixedDims,
const size_t *fixedDimNums,
size_t rangeDimIdx,
size_t rangeDimNum,
int rwFlag )
201 if (tensorDimNums == 0 || (nFixedDims > 0 && fixedDimNums == 0) || nFixedDims > tensorNDims)
208 if( _tensorNDims != tensorNDims )
210 if( _dimNums != _tensorNDimsBuffer )
212 daal::services::daal_free( _dimNums );
217 _dimNums = (
size_t*)daal::services::daal_malloc( tensorNDims *
sizeof(
size_t) );
221 _dimNums = _tensorNDimsBuffer;
230 _tensorNDims = tensorNDims;
233 _nFixedDims = nFixedDims;
234 for(
size_t i = 0; i < _nFixedDims; i++ )
236 _dimNums[i] = fixedDimNums[i];
241 if( _nFixedDims != _tensorNDims )
243 _rangeDimIdx = rangeDimIdx;
244 _dimNums[_nFixedDims] = rangeDimNum;
245 _subtensorSize *= rangeDimNum;
248 for(
size_t i = _nFixedDims+1; i < _tensorNDims; i++ )
250 _dimNums[i] = tensorDimNums[i];
251 _subtensorSize *= tensorDimNums[i];
254 return _subtensorSize;
261 inline bool saveOffsetLayout(
const TensorOffsetLayout &layout )
265 _layout =
const_cast<TensorOffsetLayout *
>(&layout);
266 _layoutOwnFlag =
false;
275 inline bool saveOffsetLayoutCopy(
const TensorOffsetLayout &layout )
279 _layout =
new TensorOffsetLayout(layout);
284 _layoutOwnFlag =
true;
293 inline size_t getSize()
const {
return _subtensorSize; }
299 inline size_t getFixedDims()
const {
return _nFixedDims; }
305 inline size_t *getFixedDimNums()
const {
return _dimNums; }
311 inline size_t getRangeDimIdx()
const {
return _rangeDimIdx; }
317 inline size_t getRangeDimNum()
const 319 if( _nFixedDims != _tensorNDims )
321 return _dimNums[_nFixedDims];
330 inline size_t getRWFlag()
const {
return _rwFlag; }
338 _buffer = services::SharedPtr<DataType>();
343 services::SharedPtr<DataType> _ptr;
344 services::SharedPtr<DataType> _buffer;
352 size_t _tensorNDimsBuffer[10];
354 size_t _subtensorSize;
357 TensorOffsetLayout *_layout;
360 services::SharedPtr<byte> *_pPtr;
367 using interface1::SubtensorDescriptor;
daal::data_management::interface1::SubtensorDescriptor::getNumberOfDims
size_t getNumberOfDims() const
Definition: subtensor.h:111
daal
Definition: algorithm_base_common.h:57
daal::data_management::interface1::SubtensorDescriptor::getRangeDimNum
size_t getRangeDimNum() const
Definition: subtensor.h:317
daal::data_management::interface1::SubtensorDescriptor::getRangeDimIdx
size_t getRangeDimIdx() const
Definition: subtensor.h:311
daal::data_management::interface1::SubtensorDescriptor::saveOffsetLayoutCopy
bool saveOffsetLayoutCopy(const TensorOffsetLayout &layout)
Definition: subtensor.h:275
daal::data_management::interface1::SubtensorDescriptor::getSize
size_t getSize() const
Definition: subtensor.h:293
daal::data_management::interface1::SubtensorDescriptor::getLayout
const TensorOffsetLayout * getLayout() const
Definition: subtensor.h:123
daal::data_management::interface1::SubtensorDescriptor::freeBuffer
void freeBuffer()
Definition: subtensor.h:336
daal::data_management::interface1::SubtensorDescriptor::getFixedDimNums
size_t * getFixedDimNums() const
Definition: subtensor.h:305
daal::data_management::interface1::SubtensorDescriptor::getSharedPtr
services::SharedPtr< DataType > getSharedPtr() const
Definition: subtensor.h:99
daal::data_management::interface1::SubtensorDescriptor::getRWFlag
size_t getRWFlag() const
Definition: subtensor.h:330
daal::data_management::interface1::SubtensorDescriptor::getSubtensorDimSizes
size_t * getSubtensorDimSizes() const
Definition: subtensor.h:117
daal::data_management::interface1::SubtensorDescriptor::reset
void reset()
Definition: subtensor.h:134
daal::services::interface1::SharedPtr
Shared pointer that retains shared ownership of an object through a pointer. Several SharedPtr object...
Definition: daal_shared_ptr.h:187
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:146
daal::data_management::interface1::SubtensorDescriptor::getPtr
DataType * getPtr() const
Definition: subtensor.h:86
daal::services::daal_free
DAAL_EXPORT void daal_free(void *ptr)
daal::data_management::interface1::SubtensorDescriptor::getInplaceFlag
bool getInplaceFlag() const
Definition: subtensor.h:129
daal::services::interface1::ServiceDeleter
Implementation of DeleterIface to destroy a pointer by the daal_free function.
Definition: daal_shared_ptr.h:110
daal::data_management::interface1::SubtensorDescriptor::saveOffsetLayout
bool saveOffsetLayout(const TensorOffsetLayout &layout)
Definition: subtensor.h:261
daal::data_management::interface1::TensorOffsetLayout
Class for a data management component responsible for representation of data layout in the HomogenTen...
Definition: tensor.h:215
daal::data_management::interface1::SubtensorDescriptor::getFixedDims
size_t getFixedDims() const
Definition: subtensor.h:299
daal::data_management::interface1::SubtensorDescriptor
Class with descriptor of the subtensor retrieved from Tensor getSubTensor function.
Definition: subtensor.h:73
daal::services::interface1::EmptyDeleter
Implementation of DeleterIface without pointer destroying.
Definition: daal_shared_ptr.h:125
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:198
daal::data_management::interface1::SubtensorDescriptor::resizeBuffer
bool resizeBuffer()
Definition: subtensor.h:162