49 #ifndef __HOMOGEN_TENSOR_H__
50 #define __HOMOGEN_TENSOR_H__
52 #include "services/daal_defines.h"
53 #include "data_management/data/tensor.h"
54 #include "data_management/data/data_serialize.h"
58 namespace data_management
72 template<
typename DataType = DAAL_DATA_TYPE>
73 class DAAL_EXPORT HomogenTensor :
public Tensor
76 DECLARE_SERIALIZABLE_TAG();
77 DECLARE_SERIALIZABLE_IMPL();
79 DAAL_CAST_OPERATOR(HomogenTensor<DataType>);
86 Tensor(&_layout), _allocatedSize(0), _layout(services::Collection<size_t>(0, 0))
94 static services::SharedPtr<HomogenTensor<DataType> > create(services::Status *stat = NULL)
96 DAAL_DEFAULT_CREATE_TEMPLATE_IMPL(HomogenTensor, DataType);
106 HomogenTensor(
size_t nDim,
const size_t *dimSizes, DataType *data) : Tensor(&_layout), _layout(services::Collection<size_t>(nDim, dimSizes))
108 _ptr = services::SharedPtr<byte>((byte*)data, services::EmptyDeleter());
113 _allocatedSize = getSize();
114 _memStatus = userAllocated;
119 this->_status |= services::ErrorNullParameterNotSupported;
132 static services::SharedPtr<HomogenTensor<DataType> > create(
size_t nDim,
const size_t *dimSizes, DataType *data,
133 services::Status *stat = NULL)
135 return create(nDim, dimSizes, services::SharedPtr<DataType>(data, services::EmptyDeleter()), stat);
145 HomogenTensor(
size_t nDim,
const size_t *dimSizes,
const services::SharedPtr<DataType>& data) : Tensor(&_layout), _layout(services::Collection<size_t>(nDim, dimSizes))
147 _ptr = services::reinterpretPointerCast<byte, DataType>(data);
152 _allocatedSize = getSize();
153 _memStatus = userAllocated;
158 this->_status |= services::ErrorNullParameterNotSupported;
171 static services::SharedPtr<HomogenTensor<DataType> > create(
size_t nDim,
const size_t *dimSizes,
172 const services::SharedPtr<DataType>& data,
173 services::Status *stat = NULL)
175 DAAL_DEFAULT_CREATE_TEMPLATE_IMPL_EX(HomogenTensor, DataType, nDim, dimSizes, data);
184 HomogenTensor(
const services::Collection<size_t> &dims, DataType *data);
193 static services::SharedPtr<HomogenTensor<DataType> > create(
const services::Collection<size_t> &dims, DataType *data,
194 services::Status *stat = NULL)
196 return create(dims, services::SharedPtr<DataType>(data, services::EmptyDeleter()), stat);
205 HomogenTensor(
const services::Collection<size_t> &dims,
const services::SharedPtr<DataType> &data);
214 static services::SharedPtr<HomogenTensor<DataType> > create(
const services::Collection<size_t> &dims,
215 const services::SharedPtr<DataType> &data,
216 services::Status *stat = NULL)
218 DAAL_DEFAULT_CREATE_TEMPLATE_IMPL_EX(HomogenTensor, DataType, dims, data);
227 HomogenTensor(
const TensorOffsetLayout &layout, DataType *data) : Tensor(&_layout), _layout(layout)
229 const services::Collection<size_t>& dims = layout.getDimensions();
230 _ptr = services::SharedPtr<byte>((byte*)data, services::EmptyDeleter());
235 _allocatedSize = getSize();
236 _memStatus = userAllocated;
239 size_t nDim = dims.size();
243 this->_status |= services::ErrorNullParameterNotSupported;
255 static services::SharedPtr<HomogenTensor<DataType> > create(
const TensorOffsetLayout &layout, DataType *data,
256 services::Status *stat = NULL)
258 return create(layout, services::SharedPtr<DataType>(data, services::EmptyDeleter()), stat);
267 HomogenTensor(
const TensorOffsetLayout &layout,
const services::SharedPtr<DataType> &data) : Tensor(&_layout), _layout(layout)
269 const services::Collection<size_t>& dims = layout.getDimensions();
270 _ptr = services::reinterpretPointerCast<byte, DataType>(data);
275 _allocatedSize = getSize();
276 _memStatus = userAllocated;
279 size_t nDim = dims.size();
283 this->_status |= services::ErrorNullParameterNotSupported;
295 static services::SharedPtr<HomogenTensor<DataType> > create(
const TensorOffsetLayout &layout,
const services::SharedPtr<DataType> &data,
296 services::Status *stat = NULL)
298 DAAL_DEFAULT_CREATE_TEMPLATE_IMPL_EX(HomogenTensor, DataType, layout, data);
307 HomogenTensor(
const services::Collection<size_t> &dims, AllocationFlag memoryAllocationFlag) : Tensor(&_layout),
308 _allocatedSize(0), _layout(dims)
310 if( memoryAllocationFlag == doAllocate )
312 this->_status |= allocateDataMemoryImpl();
323 static services::SharedPtr<HomogenTensor<DataType> > create(
const services::Collection<size_t> &dims, AllocationFlag memoryAllocationFlag,
324 services::Status *stat = NULL)
326 DAAL_DEFAULT_CREATE_TEMPLATE_IMPL_EX(HomogenTensor, DataType, dims, memoryAllocationFlag);
336 HomogenTensor(
const services::Collection<size_t> &dims, AllocationFlag memoryAllocationFlag,
const DataType initValue):
337 Tensor(&_layout), _allocatedSize(0), _layout(dims)
339 if( memoryAllocationFlag == doAllocate )
341 this->_status |= allocateDataMemoryImpl();
342 this->_status |= assign(initValue);
354 static services::SharedPtr<HomogenTensor<DataType> > create(
const services::Collection<size_t> &dims, AllocationFlag memoryAllocationFlag,
355 const DataType initValue, services::Status *stat = NULL)
357 DAAL_DEFAULT_CREATE_TEMPLATE_IMPL_EX(HomogenTensor, DataType, dims, memoryAllocationFlag, initValue);
361 virtual ~HomogenTensor()
363 freeDataMemoryImpl();
371 DataType *getArray()
const
373 return (DataType*)_ptr.get();
380 services::SharedPtr<DataType> getArraySharedPtr()
const
382 return services::reinterpretPointerCast<DataType, byte>(_ptr);
389 services::Status setArray( DataType *
const ptr )
392 DAAL_CHECK_STATUS(s, freeDataMemoryImpl());
395 return services::Status(services::ErrorNullParameterNotSupported);
397 _ptr = services::SharedPtr<byte>((byte*)ptr, services::EmptyDeleter());
398 _memStatus = userAllocated;
406 services::Status setArray(
const services::SharedPtr<DataType>& ptr )
409 DAAL_CHECK_STATUS(s, freeDataMemoryImpl());
412 return services::Status(services::ErrorNullParameterNotSupported);
415 _memStatus = userAllocated;
423 TensorOffsetLayout& getTensorLayout()
432 virtual TensorOffsetLayout createDefaultSubtensorLayout() const DAAL_C11_OVERRIDE
434 return TensorOffsetLayout(_layout);
441 virtual TensorOffsetLayout createRawSubtensorLayout() const DAAL_C11_OVERRIDE
443 TensorOffsetLayout layout(_layout);
444 layout.sortOffsets();
449 virtual services::Status setDimensions(
size_t nDim,
const size_t *dimSizes) DAAL_C11_OVERRIDE
453 return services::Status(services::ErrorNullParameterNotSupported);
456 _layout = TensorOffsetLayout(services::Collection<size_t>(nDim, dimSizes));
457 return services::Status();
460 virtual services::Status setDimensions(
const services::Collection<size_t>& dimensions) DAAL_C11_OVERRIDE
462 if(!dimensions.size())
464 return services::Status(services::ErrorNullParameterNotSupported);
467 _layout = TensorOffsetLayout(dimensions);
468 return services::Status();
475 services::Status assign(
const DataType initValue)
477 size_t size = getSize();
479 DataType * ptr = (DataType*)_ptr.get();
480 for(
size_t i = 0; i < size; i++)
484 return services::Status();
487 services::Status getSubtensorEx(
size_t fixedDims,
const size_t *fixedDimNums,
size_t rangeDimIdx,
size_t rangeDimNum,
488 ReadWriteMode rwflag, SubtensorDescriptor<double> &block,
489 const TensorOffsetLayout& layout) DAAL_C11_OVERRIDE;
490 services::Status getSubtensorEx(
size_t fixedDims,
const size_t *fixedDimNums,
size_t rangeDimIdx,
size_t rangeDimNum,
491 ReadWriteMode rwflag, SubtensorDescriptor<float> &block,
492 const TensorOffsetLayout& layout) DAAL_C11_OVERRIDE;
493 services::Status getSubtensorEx(
size_t fixedDims,
const size_t *fixedDimNums,
size_t rangeDimIdx,
size_t rangeDimNum,
494 ReadWriteMode rwflag, SubtensorDescriptor<int> &block,
495 const TensorOffsetLayout& layout) DAAL_C11_OVERRIDE;
497 services::Status getSubtensor(
size_t fixedDims,
const size_t* fixedDimNums,
size_t rangeDimIdx,
size_t rangeDimNum,
498 ReadWriteMode rwflag, SubtensorDescriptor<double>& subtensor ) DAAL_C11_OVERRIDE
500 return getSubtensorEx(fixedDims, fixedDimNums, rangeDimIdx, rangeDimNum, rwflag, subtensor, _layout );
503 services::Status getSubtensor(
size_t fixedDims,
const size_t* fixedDimNums,
size_t rangeDimIdx,
size_t rangeDimNum,
504 ReadWriteMode rwflag, SubtensorDescriptor<float>& subtensor ) DAAL_C11_OVERRIDE
506 return getSubtensorEx(fixedDims, fixedDimNums, rangeDimIdx, rangeDimNum, rwflag, subtensor, _layout );
509 services::Status getSubtensor(
size_t fixedDims,
const size_t* fixedDimNums,
size_t rangeDimIdx,
size_t rangeDimNum,
510 ReadWriteMode rwflag, SubtensorDescriptor<int>& subtensor ) DAAL_C11_OVERRIDE
512 return getSubtensorEx(fixedDims, fixedDimNums, rangeDimIdx, rangeDimNum, rwflag, subtensor, _layout );
515 services::Status releaseSubtensor(SubtensorDescriptor<double> &block) DAAL_C11_OVERRIDE;
516 services::Status releaseSubtensor(SubtensorDescriptor<float> &block) DAAL_C11_OVERRIDE;
517 services::Status releaseSubtensor(SubtensorDescriptor<int> &block) DAAL_C11_OVERRIDE;
519 DAAL_DEPRECATED_VIRTUAL
virtual services::SharedPtr<Tensor> getSampleTensor(
size_t firstDimIndex) DAAL_C11_OVERRIDE
521 services::Collection<size_t> newDims = getDimensions();
522 if(!_ptr || newDims.size() == 0 || newDims[0] <= firstDimIndex) {
return services::SharedPtr<Tensor>(); }
524 const size_t *_dimOffsets = &((_layout.getOffsets())[0]);
525 services::SharedPtr<DataType> shiftedPtr(services::reinterpretPointerCast<DataType, byte>(_ptr), (DataType*)_ptr.get() + _dimOffsets[0] * firstDimIndex);
527 return HomogenTensor<DataType>::create(newDims, shiftedPtr, &st);
532 HomogenTensor(services::Status &st) :
533 Tensor(&_layout, st), _allocatedSize(0), _layout(services::Collection<size_t>(0, 0))
536 HomogenTensor(
size_t nDim,
const size_t *dimSizes,
const services::SharedPtr<DataType>& data, services::Status &st) :
537 Tensor(&_layout, st), _layout(services::Collection<size_t>(nDim, dimSizes))
539 _ptr = services::reinterpretPointerCast<byte, DataType>(data);
544 _allocatedSize = getSize();
545 _memStatus = userAllocated;
550 st |= services::ErrorNullParameterNotSupported;
555 HomogenTensor(
const services::Collection<size_t> &dims,
const services::SharedPtr<DataType> &data, services::Status &st);
557 HomogenTensor(
const TensorOffsetLayout &layout,
const services::SharedPtr<DataType> &data,
558 services::Status &st) :
559 Tensor(&_layout, st), _layout(layout)
561 const services::Collection<size_t>& dims = layout.getDimensions();
562 _ptr = services::reinterpretPointerCast<byte, DataType>(data);
567 _allocatedSize = getSize();
568 _memStatus = userAllocated;
571 size_t nDim = dims.size();
575 st |= services::ErrorNullParameterNotSupported;
580 HomogenTensor(
const services::Collection<size_t> &dims, AllocationFlag memoryAllocationFlag,
581 services::Status &st) :
582 Tensor(&_layout, st), _allocatedSize(0), _layout(dims)
584 if( memoryAllocationFlag == doAllocate )
586 st |= allocateDataMemoryImpl();
590 HomogenTensor(
const services::Collection<size_t> &dims, AllocationFlag memoryAllocationFlag,
const DataType initValue,
591 services::Status &st):
592 Tensor(&_layout, st), _allocatedSize(0), _layout(dims)
594 if(memoryAllocationFlag == doAllocate)
596 st |= allocateDataMemoryImpl();
599 st |= assign(initValue);
603 template<
typename Archive,
bool onDeserialize>
604 services::Status serialImpl( Archive *archive )
606 Tensor::serialImpl<Archive, onDeserialize>( archive );
608 archive->setObj( &_layout );
610 bool isAllocated = (_memStatus != notAllocated);
611 archive->set( isAllocated );
615 freeDataMemoryImpl();
619 allocateDataMemoryImpl();
623 if(_memStatus != notAllocated)
625 archive->set( (DataType*)_ptr.get(), getSize() );
628 return services::Status();
631 virtual services::Status allocateDataMemoryImpl(daal::MemType type = daal::dram) DAAL_C11_OVERRIDE
634 DAAL_CHECK_STATUS(s, freeDataMemoryImpl());
636 size_t size = getSize();
640 return services::Status();
643 _ptr = services::SharedPtr<byte>((byte *)daal::services::daal_malloc(size *
sizeof(DataType)), services::ServiceDeleter());
647 return services::Status(services::ErrorMemoryAllocationFailed);
650 _allocatedSize = getSize();
651 _memStatus = internallyAllocated;
652 return services::Status();
656 virtual services::Status freeDataMemoryImpl() DAAL_C11_OVERRIDE
659 _ptr = services::SharedPtr<byte>();
661 _memStatus = notAllocated;
662 return services::Status();
666 template <
typename T>
667 services::Status getTSubtensor(
size_t fixedDims,
const size_t *fixedDimNums,
size_t rangeDimIdx,
size_t rangeDimNum,
int rwFlag,
668 SubtensorDescriptor<T> &block,
const TensorOffsetLayout& layout );
669 template <
typename T>
670 services::Status releaseTSubtensor( SubtensorDescriptor<T> &block );
673 services::SharedPtr<byte> _ptr;
674 size_t _allocatedSize;
675 TensorOffsetLayout _layout;
680 using interface1::HomogenTensor;
daal::data_management::interface1::HomogenTensor::createDefaultSubtensorLayout
virtual TensorOffsetLayout createDefaultSubtensorLayout() const DAAL_C11_OVERRIDE
Definition: homogen_tensor.h:432
daal::data_management::interface1::HomogenTensor::HomogenTensor
HomogenTensor(const TensorOffsetLayout &layout, const services::SharedPtr< DataType > &data)
Definition: homogen_tensor.h:267
daal
Definition: algorithm_base_common.h:57
daal::data_management::interface1::Tensor
Class for a data management component responsible for representation of data in the n-dimensions nume...
Definition: tensor.h:481
daal::data_management::interface1::HomogenTensor::create
static services::SharedPtr< HomogenTensor< DataType > > create(size_t nDim, const size_t *dimSizes, const services::SharedPtr< DataType > &data, services::Status *stat=NULL)
Definition: homogen_tensor.h:171
daal::data_management::interface1::HomogenTensor::createRawSubtensorLayout
virtual TensorOffsetLayout createRawSubtensorLayout() const DAAL_C11_OVERRIDE
Definition: homogen_tensor.h:441
daal::data_management::interface1::HomogenTensor::setDimensions
virtual services::Status setDimensions(size_t nDim, const size_t *dimSizes) DAAL_C11_OVERRIDE
Definition: homogen_tensor.h:449
daal::data_management::interface1::HomogenTensor::getTensorLayout
TensorOffsetLayout & getTensorLayout()
Definition: homogen_tensor.h:423
daal::data_management::interface1::HomogenTensor::assign
services::Status assign(const DataType initValue)
Definition: homogen_tensor.h:475
daal::data_management::interface1::HomogenTensor::HomogenTensor
HomogenTensor()
Definition: homogen_tensor.h:85
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:170
daal::dram
Definition: daal_defines.h:158
daal::data_management::interface1::HomogenTensor::getSubtensor
services::Status getSubtensor(size_t fixedDims, const size_t *fixedDimNums, size_t rangeDimIdx, size_t rangeDimNum, ReadWriteMode rwflag, SubtensorDescriptor< int > &subtensor) DAAL_C11_OVERRIDE
Definition: homogen_tensor.h:509
daal::data_management::interface1::HomogenTensor::create
static services::SharedPtr< HomogenTensor< DataType > > create(const services::Collection< size_t > &dims, AllocationFlag memoryAllocationFlag, services::Status *stat=NULL)
Definition: homogen_tensor.h:323
daal::data_management::interface1::HomogenTensor::getArraySharedPtr
services::SharedPtr< DataType > getArraySharedPtr() const
Definition: homogen_tensor.h:380
daal::data_management::interface1::HomogenTensor::HomogenTensor
HomogenTensor(size_t nDim, const size_t *dimSizes, DataType *data)
Definition: homogen_tensor.h:106
daal::data_management::interface1::HomogenTensor::setArray
services::Status setArray(const services::SharedPtr< DataType > &ptr)
Definition: homogen_tensor.h:406
daal::data_management::interface1::HomogenTensor::create
static services::SharedPtr< HomogenTensor< DataType > > create(const services::Collection< size_t > &dims, AllocationFlag memoryAllocationFlag, const DataType initValue, services::Status *stat=NULL)
Definition: homogen_tensor.h:354
daal::data_management::interface1::HomogenTensor::getArray
DataType * getArray() const
Definition: homogen_tensor.h:371
daal::data_management::interface1::HomogenTensor::HomogenTensor
HomogenTensor(const services::Collection< size_t > &dims, AllocationFlag memoryAllocationFlag, const DataType initValue)
Definition: homogen_tensor.h:336
daal::data_management::interface1::HomogenTensor::create
static services::SharedPtr< HomogenTensor< DataType > > create(const TensorOffsetLayout &layout, DataType *data, services::Status *stat=NULL)
Definition: homogen_tensor.h:255
daal::services::ErrorNullParameterNotSupported
Definition: error_indexes.h:99
daal::data_management::interface1::HomogenTensor::setArray
services::Status setArray(DataType *const ptr)
Definition: homogen_tensor.h:389
daal::services::daal_malloc
DAAL_EXPORT void * daal_malloc(size_t size, size_t alignment=DAAL_MALLOC_DEFAULT_ALIGNMENT)
daal::data_management::interface1::HomogenTensor::getSampleTensor
virtual DAAL_DEPRECATED_VIRTUAL services::SharedPtr< Tensor > getSampleTensor(size_t firstDimIndex) DAAL_C11_OVERRIDE
Definition: homogen_tensor.h:519
daal::algorithms::association_rules::data
Definition: apriori_types.h:107
daal::data_management::interface1::HomogenTensor::getSubtensor
services::Status getSubtensor(size_t fixedDims, const size_t *fixedDimNums, size_t rangeDimIdx, size_t rangeDimNum, ReadWriteMode rwflag, SubtensorDescriptor< float > &subtensor) DAAL_C11_OVERRIDE
Definition: homogen_tensor.h:503
daal::data_management::interface1::TensorIface::AllocationFlag
AllocationFlag
Enumeration to specify whether the Numeric Table must allocate memory.
Definition: tensor.h:103
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::HomogenTensor::HomogenTensor
HomogenTensor(const TensorOffsetLayout &layout, DataType *data)
Definition: homogen_tensor.h:227
daal::data_management::interface1::HomogenTensor::getSubtensor
services::Status getSubtensor(size_t fixedDims, const size_t *fixedDimNums, size_t rangeDimIdx, size_t rangeDimNum, ReadWriteMode rwflag, SubtensorDescriptor< double > &subtensor) DAAL_C11_OVERRIDE
Definition: homogen_tensor.h:497
daal::data_management::interface1::HomogenTensor::HomogenTensor
HomogenTensor(size_t nDim, const size_t *dimSizes, const services::SharedPtr< DataType > &data)
Definition: homogen_tensor.h:145
daal::data_management::interface1::HomogenTensor::setDimensions
virtual services::Status setDimensions(const services::Collection< size_t > &dimensions) DAAL_C11_OVERRIDE
Definition: homogen_tensor.h:460
daal::data_management::interface1::HomogenTensor
Class that provides methods to access data stored as a contiguous array of homogeneous data in rows-m...
Definition: homogen_tensor.h:73
daal::data_management::interface1::HomogenTensor::HomogenTensor
HomogenTensor(const services::Collection< size_t > &dims, AllocationFlag memoryAllocationFlag)
Definition: homogen_tensor.h:307
daal::data_management::interface1::SubtensorDescriptor
Class with descriptor of the subtensor retrieved from Tensor getSubTensor function.
Definition: subtensor.h:73
daal::data_management::interface1::HomogenTensor::create
static services::SharedPtr< HomogenTensor< DataType > > create(const services::Collection< size_t > &dims, DataType *data, services::Status *stat=NULL)
Definition: homogen_tensor.h:193
daal::data_management::interface1::HomogenTensor::create
static services::SharedPtr< HomogenTensor< DataType > > create(services::Status *stat=NULL)
Definition: homogen_tensor.h:94
daal::data_management::interface1::TensorLayout::getDimensions
const services::Collection< size_t > & getDimensions() const
Definition: tensor.h:188
daal::MemType
MemType
Definition: daal_defines.h:156
daal::data_management::interface1::HomogenTensor::create
static services::SharedPtr< HomogenTensor< DataType > > create(size_t nDim, const size_t *dimSizes, DataType *data, services::Status *stat=NULL)
Definition: homogen_tensor.h:132
daal::data_management::interface1::HomogenTensor::create
static services::SharedPtr< HomogenTensor< DataType > > create(const TensorOffsetLayout &layout, const services::SharedPtr< DataType > &data, services::Status *stat=NULL)
Definition: homogen_tensor.h:295
daal::data_management::interface1::HomogenTensor::create
static services::SharedPtr< HomogenTensor< DataType > > create(const services::Collection< size_t > &dims, const services::SharedPtr< DataType > &data, services::Status *stat=NULL)
Definition: homogen_tensor.h:214