|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- /**
- * Copyright 2019 Huawei Technologies Co., Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- #ifndef PREDICT_INCLUDE_TENSOR_H_
- #define PREDICT_INCLUDE_TENSOR_H_
-
- #include <memory>
- #include <vector>
- #include "dlpack/dlpack.h"
- #include "schema/inner/ms_generated.h"
-
- #define MSPREDICT_API __attribute__((visibility("default")))
-
- namespace mindspore {
- namespace predict {
- ///\brief Allocator definition of MindSpore predict.
- class Allocator;
-
- ///\brief Tensor definition of MindSpore predict.
- class MSPREDICT_API Tensor {
- public:
- ///\brief Constructor of MindSpore predict tensor.
- ///
- ///\param[in] tensor Define the parameters of the tensor.
- ///\param[in] copyData Malloc data for the tensor, and copy origin data from
- /// input tensor.
- ///
- ///\return Instance of MindSpore predict tensor.
- Tensor(const Tensor &tensor, bool copyData = false);
-
- ///\brief Constructor of MindSpore predict tensor.
- ///
- ///\param[in] dt Data Type of the tensor, see introduction to 'enum DataType'
- /// for supported type.
- ///\param[in] dims Dimension Values such as height and width, which defined
- /// the shape of the tensor.
- ///\param[in] format Tensor format, see introduction to 'enum Format' for
- /// supported format.
- ///\param[in] data Data of the tensor.
- ///
- ///\return Instance of MindSpore predict tensor.
- ///
- ///\note
- /// Length of data should align with dt, format and dims, otherwise the
- /// application might run into unexpected error,
- /// such as segment fault.
- /// For example, dt is DT_FLOAT, format is FORMAT_NCHW, dims is [1,3,300,300],
- /// then minimum length of data should
- /// be 1 * 3 * 300 * 300 * sizeof(float).
- Tensor(DataType dt, const std::vector<int64_t> &dims, Format format, void *data);
-
- ///\brief Destructor of MindSpore predict tensor.
- ~Tensor();
-
- ///\brief Get MindSpore predict tensor.
- ///
- ///\param[in] Definition of the tensor.
- ///
- ///\return Address of MindSpore predict tensor.
- static Tensor *CopyFromTensorDef(const TensorDef &tensordef);
-
- ///\brief Get dtype of MindSpore predict tensor.
- ///
- ///\return Dtype of MindSpore predict tensor.
- DLDataType GetTensorDtype() const;
-
- ///\brief Get data of MindSpore predict tensor.
- ///
- ///\return Address of MindSpore predict tensor data.
- void *GetData() const;
-
- ///\brief Set data of MindSpore predict tensor.
- ///
- ///\param[in] data Address for data of the MindSpore predict tensor instance.
- ///
- ///\note
- /// Length of data should align with dt, format and dims, otherwise the
- /// application might run into unexpected error,
- /// such as segment fault.
- /// For example, dt is DT_FLOAT, format is FORMAT_NCHW, dims is [1,3,300,300],
- /// then minimum length of data should
- /// be 1 * 3 * 300 * 300 * sizeof(float).
- void SetData(void *data);
-
- ///\brief Get data type of MindSpore predict tensor.
- ///
- ///\return Data Type of the tensor.
- DataType GetDataType() const;
-
- ///\brief Set data type of MindSpore predict tensor.
- ///
- ///\param[in] dt Data Type of the tensor, see introduction to 'enum DataType'
- /// for supported type.
- void SetDataType(DataType dt);
-
- ///\brief Get number of dimension of MindSpore predict tensor.
- ///
- ///\return Number of dimension of the MindSpore predict tensor.
- int GetNDim() const;
-
- ///\brief Get dimension of MindSpore predict tensor.
- ///
- ///\return Dimension of the MindSpore predict tensor.
- std::vector<int64_t> GetDims() const;
-
- ///\brief Set dimension of MindSpore predict tensor.
- ///
- ///\param[in] dims Vector that has values of dimension.
- void SetDims(const std::vector<int64_t> &dims);
-
- ///\brief Get format of MindSpore predict tensor.
- ///
- ///\return Format of the MindSpore predict tensor.
- Format GetFormat() const { return format; }
-
- ///\brief Set format of MindSpore predict tensor.
- ///
- ///\param[in] format Format of the tensor.
- void SetFormat(Format format) { this->format = format; }
-
- ///\brief Get reference count of MindSpore predict tensor.
- ///
- ///\return Reference count of the MindSpore predict tensor.
- int RefCount() { return refCount; }
-
- ///\brief Increase reference count of MindSpore predict tensor.
- ///
- ///\param[in] ref The increase of the reference count.
- void AddRef(int ref) { refCount += ref; }
-
- ///\brief Decrease reference count of MindSpore predict tensor.
- ///
- ///\param[in] ref The decrease of the reference count.
- void DefRef(int ref) { refCount -= ref; }
-
- ///\brief Get element size of MindSpore predict tensor.
- ///
- ///\return Element size of MindSpore predict tensor.
- size_t GetElementSize() const;
-
- ///\brief Get data size of MindSpore predict tensor.
- ///
- ///\return Data size of MindSpore predict tensor.
- size_t GetDataSize() const;
-
- ///\brief Get element size of MindSpore predict tensor in NC4HW4 format.
- ///
- ///\param[in] isNhwc Whether the current format is NHWC.
- ///
- ///\return Element size of MindSpore predict tensor in NC4HW4 format.
- size_t GetNC4HW4ElementSize(bool isNhwc);
-
- ///\brief Get data size of MindSpore predict tensor in NC4HW4 format.
- ///
- ///\param[in] isNhwc Whether the current format is NHWC.
- ///
- ///\return Data size of MindSpore predict tensor in NC4HW4 format.
- size_t GetNC4HW4DataSize(bool isNhwc);
-
- ///\brief Malloc data for the MindSpore predict tensor.
- ///
- ///\param[in] allocator The malloc source for data.
- ///\param[in] refCount The reference count of the data.
- ///
- ///\return Return RET_OK if the data is successfully allocated, otherwhise return RET_ERROR.
- int MallocData(std::shared_ptr<Allocator> allocator = nullptr, int refCount = 0);
-
- ///\brief Free the MindSpore predict tensor.
- void FreeTensor();
-
- ///\brief Free the data of MindSpore predict tensor.
- void ForceFreeData();
-
- ///\brief Free the data of MindSpore predict tensor.
- void FreeData();
-
- ///\brief Compare data size of MindSpore predict tensor in NC4HW4 format.
- ///
- ///\param[in] dst The compare tensor.
- ///
- ///\return The result of fuction.
- bool CompareShape(const Tensor &dst);
-
- ///\brief Compare shape of MindSpore predict tensor with another shape.
- ///
- ///\param[in] other The compare shape information.
- ///
- ///\return The result of function.
- bool CompareShape(const std::vector<int64_t> &other);
-
- ///\brief Get instance of MindSpore predict tensor.
- ///
- ///\return Instance of MindSpore predict dlTensor.
- DLTensor *GetDLTensor() { return &dlTensor; }
-
- ///\brief Get height of MindSpore predict tensor.
- ///
- ///\return Height of MindSpore predict tensor.
- int64_t Height() const;
-
- ///\brief Get width of MindSpore predict tensor.
- ///
- ///\return Width of MindSpore predict tensor.
- int64_t Width() const;
-
- ///\brief Get channel of MindSpore predict tensor.
- ///
- ///\return Channel of MindSpore predict tensor.
- int64_t Channel() const;
-
- ///\brief Get batch of MindSpore predict tensor.
- ///
- ///\return Batch of MindSpore predict tensor.
- int64_t Batch() const;
-
- ///\brief Get stride of MindSpore predict tensor.
- ///
- ///\param[in] index the index of stride.
- ///
- ///\return Stride of MindSpore predict tensor.
- int64_t Stride(int index) const;
-
- ///\brief Set stride of MindSpore predict tensor by input.
- ///
- ///\param[in] index Index of stride
- ///\param[in] stride The stride to set
- void SetStride(int index, int64_t stride);
-
- ///\brief Set stride of MindSpore predict tensor by dims.
- void SetStride();
- void SetScale(bool isScale = true);
-
- private:
- bool isScale = false;
- int refCount = 0;
- int isConst;
- Format format;
- DLTensor dlTensor;
- std::shared_ptr<Allocator> allocator = nullptr;
- std::vector<float> scale;
- std::vector<int> zeroPoint;
- };
- } // namespace predict
- } // namespace mindspore
-
- #endif // PREDICT_INCLUDE_TENSOR_H_
|