| @@ -205,6 +205,18 @@ enum ActivationType { | |||||
| UNKNOW = 16 | UNKNOW = 16 | ||||
| }; | }; | ||||
| enum ReduceMode { | |||||
| ReduceMode_ReduceMean = 0, | |||||
| ReduceMode_ReduceMax = 1, | |||||
| ReduceMode_ReduceMin = 2, | |||||
| ReduceMode_ReduceProd = 3, | |||||
| ReduceMode_ReduceSum = 4, | |||||
| ReduceMode_ReduceSumSquare = 5, | |||||
| ReduceMode_ReduceASum = 6, | |||||
| ReduceMode_MIN = ReduceMode_ReduceMean, | |||||
| ReduceMode_MAX = ReduceMode_ReduceASum | |||||
| }; | |||||
| typedef struct Node { | typedef struct Node { | ||||
| String name_; | String name_; | ||||
| NodeType node_type_; | NodeType node_type_; | ||||
| @@ -136,7 +136,16 @@ typedef struct MSTensor { | |||||
| /// | /// | ||||
| /// \return Byte size of data in MSTensor. | /// \return Byte size of data in MSTensor. | ||||
| size_t Size() const; | size_t Size() const; | ||||
| static void *operator new(std::size_t sz); | |||||
| static void *operator new[](std::size_t sz); | |||||
| static void operator delete(void *ptr, std::size_t sz); | |||||
| static void operator delete[](void *ptr, std::size_t sz); | |||||
| } MSTensor; | } MSTensor; | ||||
| MSTensor *CreateTensor(TypeId data_type, const ShapeVector &shape); | MSTensor *CreateTensor(TypeId data_type, const ShapeVector &shape); | ||||
| void DestroyTensor(MSTensor *ptr); | |||||
| #endif // MINDSPORE_LITE_INCLUDE_MS_TENSOR_H_ | #endif // MINDSPORE_LITE_INCLUDE_MS_TENSOR_H_ | ||||
| @@ -22,7 +22,6 @@ | |||||
| #include "src/runtime/allocator.h" | #include "src/runtime/allocator.h" | ||||
| #include "nnacl/arithmetic_common.h" | #include "nnacl/arithmetic_common.h" | ||||
| #include "nnacl/fp32/arithmetic.h" | #include "nnacl/fp32/arithmetic.h" | ||||
| #include "schema/ops_generated.h" | |||||
| typedef int (*ArithmeticRun)(float *input0, float *input1, float *output, int element_size); | typedef int (*ArithmeticRun)(float *input0, float *input1, float *output, int element_size); | ||||
| typedef int (*ArithmeticOptRun)(float *input0, float *input1, float *output, int element_size, | typedef int (*ArithmeticOptRun)(float *input0, float *input1, float *output, int element_size, | ||||
| @@ -167,9 +166,9 @@ int DoArithmeticInferShape(const TensorPtrVector &in_tensors, const TensorPtrVec | |||||
| int ChooseKernel(const int kernel_type, ArithmeticRun *arithmetic_run, ArithmeticParameter *params) { | int ChooseKernel(const int kernel_type, ArithmeticRun *arithmetic_run, ArithmeticParameter *params) { | ||||
| if (kernel_type == KernelType::Mul) { | if (kernel_type == KernelType::Mul) { | ||||
| if (params->activation_type_ == mindspore::schema::ActivationType_RELU) { | |||||
| if (params->activation_type_ == ActivationType::RELU) { | |||||
| *arithmetic_run = ElementMulRelu; | *arithmetic_run = ElementMulRelu; | ||||
| } else if (params->activation_type_ == mindspore::schema::ActivationType_RELU6) { | |||||
| } else if (params->activation_type_ == ActivationType::RELU6) { | |||||
| *arithmetic_run = ElementMulRelu6; | *arithmetic_run = ElementMulRelu6; | ||||
| } else { | } else { | ||||
| *arithmetic_run = ElementMul; | *arithmetic_run = ElementMul; | ||||
| @@ -183,9 +182,9 @@ int ChooseKernel(const int kernel_type, ArithmeticRun *arithmetic_run, Arithmeti | |||||
| int ChooseOptKernel(const int kernel_type, ArithmeticOptRun *arithmetic_opt_run, ArithmeticParameter *params) { | int ChooseOptKernel(const int kernel_type, ArithmeticOptRun *arithmetic_opt_run, ArithmeticParameter *params) { | ||||
| if (kernel_type == KernelType::Mul) { | if (kernel_type == KernelType::Mul) { | ||||
| if (params->activation_type_ == mindspore::schema::ActivationType_RELU) { | |||||
| if (params->activation_type_ == ActivationType::RELU) { | |||||
| *arithmetic_opt_run = ElementOptMulRelu; | *arithmetic_opt_run = ElementOptMulRelu; | ||||
| } else if (params->activation_type_ == mindspore::schema::ActivationType_RELU6) { | |||||
| } else if (params->activation_type_ == ActivationType::RELU6) { | |||||
| *arithmetic_opt_run = ElementOptMulRelu6; | *arithmetic_opt_run = ElementOptMulRelu6; | ||||
| } else { | } else { | ||||
| *arithmetic_opt_run = ElementOptMul; | *arithmetic_opt_run = ElementOptMul; | ||||
| @@ -23,7 +23,6 @@ | |||||
| #include "internal/include/errorcode.h" | #include "internal/include/errorcode.h" | ||||
| #include "nnacl/reduce_parameter.h" | #include "nnacl/reduce_parameter.h" | ||||
| #include "nnacl/fp32/reduce.h" | #include "nnacl/fp32/reduce.h" | ||||
| #include "schema/ops_generated.h" | |||||
| typedef int (*Reducer)(const int outer_size, const int inner_size, const int axis_size, const float *src_data, | typedef int (*Reducer)(const int outer_size, const int inner_size, const int axis_size, const float *src_data, | ||||
| float *dst_data, const int tid, const int thread_num); | float *dst_data, const int tid, const int thread_num); | ||||
| @@ -202,9 +201,9 @@ int DoReduce(const TensorPtrVector &in_tensors, const TensorPtrVector &out_tenso | |||||
| ReduceParameter *params = reinterpret_cast<ReduceParameter *>(node->primitive_); | ReduceParameter *params = reinterpret_cast<ReduceParameter *>(node->primitive_); | ||||
| Reducer reducer = NULL; | Reducer reducer = NULL; | ||||
| if (params->mode_ == mindspore::schema::ReduceMode::ReduceMode_ReduceSum) { | |||||
| if (params->mode_ == ReduceMode::ReduceMode_ReduceSum) { | |||||
| reducer = ReduceSum; | reducer = ReduceSum; | ||||
| } else if (params->mode_ == mindspore::schema::ReduceMode::ReduceMode_ReduceMean) { | |||||
| } else if (params->mode_ == ReduceMode::ReduceMode_ReduceMean) { | |||||
| reducer = ReduceMean; | reducer = ReduceMean; | ||||
| } | } | ||||
| @@ -17,8 +17,9 @@ | |||||
| #include <vector> | #include <vector> | ||||
| #include <string> | #include <string> | ||||
| #include "internal/include/ms_tensor.h" | #include "internal/include/ms_tensor.h" | ||||
| MSTensor *CreateTensor(TypeId data_type, const ShapeVector &shape) { | MSTensor *CreateTensor(TypeId data_type, const ShapeVector &shape) { | ||||
| MSTensor *tensor = new (std::nothrow) MSTensor(); | |||||
| MSTensor *tensor = new MSTensor(); | |||||
| if (tensor == NULL) { | if (tensor == NULL) { | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| @@ -27,6 +28,8 @@ MSTensor *CreateTensor(TypeId data_type, const ShapeVector &shape) { | |||||
| return tensor; | return tensor; | ||||
| } | } | ||||
| void DestroyTensor(MSTensor *ptr) { delete ptr; } | |||||
| int MSTensor::ElementsNum() const { | int MSTensor::ElementsNum() const { | ||||
| int result = 1; | int result = 1; | ||||
| for (size_t i = 0; i < shape_.size(); ++i) { | for (size_t i = 0; i < shape_.size(); ++i) { | ||||
| @@ -200,3 +203,17 @@ int MSTensor::ElementsC4Num() const { | |||||
| } | } | ||||
| return result; | return result; | ||||
| } | } | ||||
| void *MSTensor::operator new(std::size_t sz) { | |||||
| void *storage = malloc(sz); | |||||
| return storage; | |||||
| } | |||||
| void *MSTensor::operator new[](std::size_t sz) { | |||||
| void *storage = malloc(sz); | |||||
| return storage; | |||||
| } | |||||
| void MSTensor::operator delete(void *ptr, std::size_t sz) { free(ptr); } | |||||
| void MSTensor::operator delete[](void *ptr, std::size_t sz) { free(ptr); } | |||||
| @@ -40,6 +40,7 @@ set(TEST_LITE_SRC | |||||
| ${LITE_DIR}/internal/src/lite_session.cc | ${LITE_DIR}/internal/src/lite_session.cc | ||||
| ${LITE_DIR}/src/runtime/allocator.cc | ${LITE_DIR}/src/runtime/allocator.cc | ||||
| ${LITE_DIR}/internal/src/ms_tensor.cc | ${LITE_DIR}/internal/src/ms_tensor.cc | ||||
| ${LITE_DIR}/internal/src/common/string.cc | |||||
| ${TOP_DIR}/mindspore/core/utils/log_adapter.cc | ${TOP_DIR}/mindspore/core/utils/log_adapter.cc | ||||
| ${TOP_DIR}/mindspore/core/gvar/logging_level.cc | ${TOP_DIR}/mindspore/core/gvar/logging_level.cc | ||||
| ) | ) | ||||
| @@ -69,6 +69,8 @@ TEST_F(InferTest, TestSession) { | |||||
| } | } | ||||
| std::cout << "\n"; | std::cout << "\n"; | ||||
| CompareOutputData(reinterpret_cast<float *>(outvec.at(0)->data_), expect_out, kOutSize, 0.000001); | CompareOutputData(reinterpret_cast<float *>(outvec.at(0)->data_), expect_out, kOutSize, 0.000001); | ||||
| DestroyTensor(in); | |||||
| DestroyTensor(out); | |||||
| } | } | ||||
| } // namespace mindspore | } // namespace mindspore | ||||