25 #ifndef __SUBTENSOR_H__
26 #define __SUBTENSOR_H__
28 #include "services/error_handling.h"
29 #include "services/daal_memory.h"
30 #include "data_management/data/numeric_types.h"
31 #include "data_management/data/tensor.h"
35 namespace data_management
48 template<
typename DataType>
49 class DAAL_EXPORT SubtensorDescriptor
53 SubtensorDescriptor();
56 ~SubtensorDescriptor();
62 inline DataType* getPtr()
const
66 return (DataType *)_rawPtr;
75 inline services::SharedPtr<DataType> getSharedPtr()
const
79 return services::SharedPtr<DataType>(services::reinterpretPointerCast<DataType, byte>(*_pPtr), (DataType *)_rawPtr);
87 inline size_t getNumberOfDims()
const {
return _tensorNDims-_nFixedDims; }
93 inline size_t* getSubtensorDimSizes()
const {
return _dimNums+_nFixedDims; }
99 inline const TensorOffsetLayout *getLayout()
const {
return _layout; }
105 inline bool getInplaceFlag()
const {
return _inplaceFlag; }
122 inline void setPtr( DataType *ptr )
124 _ptr = services::SharedPtr<DataType>(ptr, services::EmptyDeleter());
128 inline void setPtr( services::SharedPtr<byte>* pPtr, byte * rawPtr )
138 inline bool resizeBuffer()
140 if ( _subtensorSize > _capacity )
144 _buffer = services::SharedPtr<DataType>((DataType *)daal::services::daal_malloc(_subtensorSize *
sizeof(DataType)), services::ServiceDeleter());
148 _capacity = _subtensorSize;
158 _inplaceFlag =
false;
174 size_t setDetails(
size_t tensorNDims,
const size_t *tensorDimNums,
175 size_t nFixedDims,
const size_t *fixedDimNums,
size_t rangeDimIdx,
size_t rangeDimNum,
int rwFlag )
177 if (tensorDimNums == 0 || (nFixedDims > 0 && fixedDimNums == 0) || nFixedDims > tensorNDims)
184 if( _tensorNDims != tensorNDims )
186 if( _dimNums != _tensorNDimsBuffer )
188 daal::services::daal_free( _dimNums );
193 _dimNums = (
size_t*)daal::services::daal_malloc( tensorNDims *
sizeof(
size_t) );
197 _dimNums = _tensorNDimsBuffer;
206 _tensorNDims = tensorNDims;
209 _nFixedDims = nFixedDims;
210 for(
size_t i = 0; i < _nFixedDims; i++ )
212 _dimNums[i] = fixedDimNums[i];
217 if( _nFixedDims != _tensorNDims )
219 _rangeDimIdx = rangeDimIdx;
220 _dimNums[_nFixedDims] = rangeDimNum;
221 _subtensorSize *= rangeDimNum;
224 for(
size_t i = _nFixedDims+1; i < _tensorNDims; i++ )
226 _dimNums[i] = tensorDimNums[i];
227 _subtensorSize *= tensorDimNums[i];
230 return _subtensorSize;
237 inline bool saveOffsetLayout(
const TensorOffsetLayout &layout )
241 _layout =
const_cast<TensorOffsetLayout *
>(&layout);
242 _layoutOwnFlag =
false;
251 inline bool saveOffsetLayoutCopy(
const TensorOffsetLayout &layout )
255 _layout =
new TensorOffsetLayout(layout);
260 _layoutOwnFlag =
true;
269 inline size_t getSize()
const {
return _subtensorSize; }
275 inline size_t getFixedDims()
const {
return _nFixedDims; }
281 inline size_t *getFixedDimNums()
const {
return _dimNums; }
287 inline size_t getRangeDimIdx()
const {
return _rangeDimIdx; }
293 inline size_t getRangeDimNum()
const
295 if( _nFixedDims != _tensorNDims )
297 return _dimNums[_nFixedDims];
306 inline size_t getRWFlag()
const {
return _rwFlag; }
314 _buffer = services::SharedPtr<DataType>();
319 services::SharedPtr<DataType> _ptr;
320 services::SharedPtr<DataType> _buffer;
328 size_t _tensorNDimsBuffer[10];
330 size_t _subtensorSize;
333 TensorOffsetLayout *_layout;
336 services::SharedPtr<byte> *_pPtr;
343 using interface1::SubtensorDescriptor;
daal::data_management::interface1::SubtensorDescriptor::getPtr
DataType * getPtr() const
Definition: subtensor.h:62
daal::data_management::interface1::SubtensorDescriptor::getRangeDimIdx
size_t getRangeDimIdx() const
Definition: subtensor.h:287
daal::data_management::interface1::SubtensorDescriptor::saveOffsetLayout
bool saveOffsetLayout(const TensorOffsetLayout &layout)
Definition: subtensor.h:237
daal::data_management::interface1::SubtensorDescriptor::getRangeDimNum
size_t getRangeDimNum() const
Definition: subtensor.h:293
daal::data_management::interface1::SubtensorDescriptor::reset
void reset()
Definition: subtensor.h:110
daal::data_management::interface1::SubtensorDescriptor::getFixedDimNums
size_t * getFixedDimNums() const
Definition: subtensor.h:281
daal::data_management::interface1::SubtensorDescriptor::getLayout
const TensorOffsetLayout * getLayout() const
Definition: subtensor.h:99
daal::data_management::interface1::SubtensorDescriptor::saveOffsetLayoutCopy
bool saveOffsetLayoutCopy(const TensorOffsetLayout &layout)
Definition: subtensor.h:251
daal::data_management::interface1::SubtensorDescriptor::getInplaceFlag
bool getInplaceFlag() const
Definition: subtensor.h:105
daal::data_management::interface1::SubtensorDescriptor::getNumberOfDims
size_t getNumberOfDims() const
Definition: subtensor.h:87
daal::data_management::interface1::TensorOffsetLayout
Class for a data management component responsible for representation of data layout in the HomogenTen...
Definition: tensor.h:205
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:174
daal::services::daal_malloc
DAAL_EXPORT void * daal_malloc(size_t size, size_t alignment=DAAL_MALLOC_DEFAULT_ALIGNMENT)
daal::data_management::interface1::SubtensorDescriptor
Class with descriptor of the subtensor retrieved from Tensor getSubTensor function.
Definition: subtensor.h:49
daal::data_management::interface1::SubtensorDescriptor::getSubtensorDimSizes
size_t * getSubtensorDimSizes() const
Definition: subtensor.h:93
daal::services::daal_free
DAAL_EXPORT void daal_free(void *ptr)
daal::data_management::interface1::SubtensorDescriptor::getFixedDims
size_t getFixedDims() const
Definition: subtensor.h:275
daal::data_management::interface1::SubtensorDescriptor::setPtr
void setPtr(DataType *ptr)
Definition: subtensor.h:122
daal::data_management::interface1::SubtensorDescriptor::getSharedPtr
services::SharedPtr< DataType > getSharedPtr() const
Definition: subtensor.h:75
daal::data_management::interface1::SubtensorDescriptor::getSize
size_t getSize() const
Definition: subtensor.h:269
daal::data_management::interface1::SubtensorDescriptor::freeBuffer
void freeBuffer()
Definition: subtensor.h:312
daal::data_management::interface1::SubtensorDescriptor::resizeBuffer
bool resizeBuffer()
Definition: subtensor.h:138
daal::data_management::interface1::SubtensorDescriptor::getRWFlag
size_t getRWFlag() const
Definition: subtensor.h:306