| @@ -23,7 +23,7 @@ typedef struct L2NormParameter { | |||||
| // Primitive parameter | // Primitive parameter | ||||
| OpParameter op_parameter_; | OpParameter op_parameter_; | ||||
| float epsilon_; | float epsilon_; | ||||
| int *axis_; | |||||
| int axis_[8]; | |||||
| // shape correlative | // shape correlative | ||||
| size_t axis_num_; | size_t axis_num_; | ||||
| int data_num_; | int data_num_; | ||||
| @@ -26,7 +26,7 @@ typedef struct LayerNormParameter { | |||||
| float epsilon_; | float epsilon_; | ||||
| enum ElementwiseMode elementwise_mode_; | enum ElementwiseMode elementwise_mode_; | ||||
| // shape correlative | // shape correlative | ||||
| int *normalized_shape_; | |||||
| int normalized_shape_[8]; | |||||
| int normalized_dims_; | int normalized_dims_; | ||||
| // other parameter | // other parameter | ||||
| int thread_count_; | int thread_count_; | ||||
| @@ -40,12 +40,7 @@ OpParameter *PopulateL2NormParameter(const mindspore::lite::PrimitiveC *primitiv | |||||
| free(l2_norm_parameter); | free(l2_norm_parameter); | ||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| l2_norm_parameter->axis_ = reinterpret_cast<int *>(malloc(axis_vec.size() * sizeof(int))); | |||||
| if (l2_norm_parameter->axis_ == nullptr) { | |||||
| MS_LOG(ERROR) << "malloc axis_ data failed"; | |||||
| free(l2_norm_parameter); | |||||
| return nullptr; | |||||
| } | |||||
| MS_ASSERT(axis_vec.size() < 8); | |||||
| for (size_t i = 0; i < axis_vec.size(); i++) { | for (size_t i = 0; i < axis_vec.size(); i++) { | ||||
| l2_norm_parameter->axis_[i] = axis_vec[i]; | l2_norm_parameter->axis_[i] = axis_vec[i]; | ||||
| } | } | ||||
| @@ -39,12 +39,7 @@ OpParameter *PopulateLayerNormParameter(const mindspore::lite::PrimitiveC *primi | |||||
| free(layer_norm_parameter); | free(layer_norm_parameter); | ||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| layer_norm_parameter->normalized_shape_ = reinterpret_cast<int *>(malloc(normalized_shape.size() * sizeof(int))); | |||||
| if (layer_norm_parameter->normalized_shape_ == nullptr) { | |||||
| MS_LOG(ERROR) << "malloc layer_norm_parameter->normalized_shape_ failed."; | |||||
| free(layer_norm_parameter); | |||||
| return nullptr; | |||||
| } | |||||
| MS_ASSERT(normalized_shape.size() < 8); | |||||
| for (size_t i = 0; i < normalized_shape.size(); i++) { | for (size_t i = 0; i < normalized_shape.size(); i++) { | ||||
| layer_norm_parameter->normalized_shape_[i] = normalized_shape[i]; | layer_norm_parameter->normalized_shape_[i] = normalized_shape[i]; | ||||
| } | } | ||||
| @@ -34,21 +34,25 @@ OpParameter *PopulateSplitParameter(const mindspore::lite::PrimitiveC *primitive | |||||
| split_param->num_split_ = param->num_split(); | split_param->num_split_ = param->num_split(); | ||||
| if (split_param->num_split_ > std::numeric_limits<int>::max() / static_cast<int>(sizeof(int))) { | if (split_param->num_split_ > std::numeric_limits<int>::max() / static_cast<int>(sizeof(int))) { | ||||
| MS_LOG(ERROR) << "The value of split_param->num_split_ is too big"; | MS_LOG(ERROR) << "The value of split_param->num_split_ is too big"; | ||||
| free(split_param); | |||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| int *split_sizes = reinterpret_cast<int *>(malloc(split_param->num_split_ * sizeof(int))); | |||||
| if (split_sizes == nullptr) { | |||||
| MS_LOG(ERROR) << "malloc split size of SplitParameter failed."; | |||||
| /* free split_sizes_ in split op base */ | |||||
| split_param->split_sizes_ = reinterpret_cast<int *>(malloc(split_param->num_split_ * sizeof(int))); | |||||
| if (split_param->split_sizes_ == nullptr) { | |||||
| MS_LOG(ERROR) << "malloc split_param split_sizes_ error"; | |||||
| free(split_param); | free(split_param); | ||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| memset(split_sizes, 0, split_param->num_split_ * sizeof(int)); | |||||
| split_param->split_sizes_ = split_sizes; | |||||
| memset(split_param->split_sizes_, 0, split_param->num_split_ * sizeof(int)); | |||||
| auto split_sizes_vector_ = param->size_splits(); | auto split_sizes_vector_ = param->size_splits(); | ||||
| int i = 0; | |||||
| for (int &iter : split_sizes_vector_) { | |||||
| split_param->split_sizes_[i++] = iter; | |||||
| MS_ASSERT(split_sizes_vector_.size() == split_param->num_split_); | |||||
| for (size_t i = 0; i < split_sizes_vector_.size(); i++) { | |||||
| split_param->split_sizes_[i] = split_sizes_vector_[i]; | |||||
| } | } | ||||
| split_param->split_dim_ = param->GetSplitDim(); | split_param->split_dim_ = param->GetSplitDim(); | ||||
| return reinterpret_cast<OpParameter *>(split_param); | return reinterpret_cast<OpParameter *>(split_param); | ||||
| } | } | ||||
| @@ -61,7 +61,6 @@ int SplitBaseCPUKernel::ReSize() { | |||||
| } | } | ||||
| } | } | ||||
| MS_ASSERT(param->num_split_ >= 1 && param->num_split_ <= SPLIT_STRIDES_SIZE); | |||||
| if (param->split_sizes_[param->num_split_ - 1] == -1) { | if (param->split_sizes_[param->num_split_ - 1] == -1) { | ||||
| int split_shape_end = input_shape.at(param->split_dim_); | int split_shape_end = input_shape.at(param->split_dim_); | ||||
| for (int i = 0; i < param->num_split_ - 1; i++) { | for (int i = 0; i < param->num_split_ - 1; i++) { | ||||
| @@ -35,12 +35,7 @@ class L2NormCPUKernel : public LiteKernel { | |||||
| : LiteKernel(parameter, inputs, outputs, ctx, primitive) { | : LiteKernel(parameter, inputs, outputs, ctx, primitive) { | ||||
| l2_norm_param_ = reinterpret_cast<L2NormParameter *>(op_parameter_); | l2_norm_param_ = reinterpret_cast<L2NormParameter *>(op_parameter_); | ||||
| } | } | ||||
| ~L2NormCPUKernel() { | |||||
| FreeTmpBuffer(); | |||||
| if (l2_norm_param_->axis_ != nullptr) { | |||||
| free(l2_norm_param_->axis_); | |||||
| } | |||||
| } | |||||
| ~L2NormCPUKernel() { FreeTmpBuffer(); } | |||||
| int CalcSquareSum(int task_id); | int CalcSquareSum(int task_id); | ||||
| int DivSqrtSum(int task_id); | int DivSqrtSum(int task_id); | ||||
| @@ -58,7 +58,6 @@ void TestL2NormFp32::Init(const std::vector<int> &input_shape, const std::vector | |||||
| param_.axis_num_ = axis_num; | param_.axis_num_ = axis_num; | ||||
| if (axis_num == 1) { | if (axis_num == 1) { | ||||
| param_.axis_ = reinterpret_cast<int *>(malloc(sizeof(int))); | |||||
| param_.axis_[0] = -1; | param_.axis_[0] = -1; | ||||
| } | } | ||||
| param_.epsilon_ = 1e-6; | param_.epsilon_ = 1e-6; | ||||
| @@ -46,7 +46,6 @@ TEST_F(TestL2NormInt8, norm) { | |||||
| std::vector<lite::Tensor *> outputs = {&out_tensor}; | std::vector<lite::Tensor *> outputs = {&out_tensor}; | ||||
| param_.axis_num_ = 1; | param_.axis_num_ = 1; | ||||
| param_.axis_ = reinterpret_cast<int *>(malloc(sizeof(int))); | |||||
| param_.axis_[0] = -1; | param_.axis_[0] = -1; | ||||
| param_.epsilon_ = 1e-6; | param_.epsilon_ = 1e-6; | ||||
| param_.act_type_ = ActType_No; | param_.act_type_ = ActType_No; | ||||
| @@ -91,7 +90,6 @@ TEST_F(TestL2NormInt8, norm2) { | |||||
| std::vector<lite::Tensor *> outputs = {&out_tensor}; | std::vector<lite::Tensor *> outputs = {&out_tensor}; | ||||
| param_.axis_num_ = 1; | param_.axis_num_ = 1; | ||||
| param_.axis_ = reinterpret_cast<int *>(malloc(sizeof(int))); | |||||
| param_.axis_[0] = -1; | param_.axis_[0] = -1; | ||||
| param_.epsilon_ = 1e-6; | param_.epsilon_ = 1e-6; | ||||
| param_.act_type_ = ActType_No; | param_.act_type_ = ActType_No; | ||||