[MSLITE] ops populate memory leak

This commit is contained in:
ling 2020-12-21 17:19:10 +08:00
parent 3f0aeaa8fc
commit 02d0ed81bd
9 changed files with 20 additions and 35 deletions

View File

@ -23,7 +23,7 @@ typedef struct L2NormParameter {
// Primitive parameter
OpParameter op_parameter_;
float epsilon_;
int *axis_;
int axis_[8];
// shape correlative
size_t axis_num_;
int data_num_;

View File

@ -26,7 +26,7 @@ typedef struct LayerNormParameter {
float epsilon_;
enum ElementwiseMode elementwise_mode_;
// shape correlative
int *normalized_shape_;
int normalized_shape_[8];
int normalized_dims_;
// other parameter
int thread_count_;

View File

@ -40,12 +40,7 @@ OpParameter *PopulateL2NormParameter(const mindspore::lite::PrimitiveC *primitiv
free(l2_norm_parameter);
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++) {
l2_norm_parameter->axis_[i] = axis_vec[i];
}

View File

@ -39,12 +39,7 @@ OpParameter *PopulateLayerNormParameter(const mindspore::lite::PrimitiveC *primi
free(layer_norm_parameter);
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++) {
layer_norm_parameter->normalized_shape_[i] = normalized_shape[i];
}

View File

@ -34,21 +34,25 @@ OpParameter *PopulateSplitParameter(const mindspore::lite::PrimitiveC *primitive
split_param->num_split_ = param->num_split();
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";
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_param);
return nullptr;
}
memset(split_sizes, 0, split_param->num_split_ * sizeof(int));
split_param->split_sizes_ = split_sizes;
auto split_sizes_vector_ = param->size_splits();
int i = 0;
for (int &iter : split_sizes_vector_) {
split_param->split_sizes_[i++] = iter;
/* 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);
return nullptr;
}
memset(split_param->split_sizes_, 0, split_param->num_split_ * sizeof(int));
auto split_sizes_vector_ = param->size_splits();
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();
return reinterpret_cast<OpParameter *>(split_param);
}

View File

@ -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) {
int split_shape_end = input_shape.at(param->split_dim_);
for (int i = 0; i < param->num_split_ - 1; i++) {

View File

@ -35,12 +35,7 @@ class L2NormCPUKernel : public LiteKernel {
: LiteKernel(parameter, inputs, outputs, ctx, primitive) {
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 DivSqrtSum(int task_id);

View File

@ -58,7 +58,6 @@ void TestL2NormFp32::Init(const std::vector<int> &input_shape, const std::vector
param_.axis_num_ = axis_num;
if (axis_num == 1) {
param_.axis_ = reinterpret_cast<int *>(malloc(sizeof(int)));
param_.axis_[0] = -1;
}
param_.epsilon_ = 1e-6;

View File

@ -46,7 +46,6 @@ TEST_F(TestL2NormInt8, norm) {
std::vector<lite::Tensor *> outputs = {&out_tensor};
param_.axis_num_ = 1;
param_.axis_ = reinterpret_cast<int *>(malloc(sizeof(int)));
param_.axis_[0] = -1;
param_.epsilon_ = 1e-6;
param_.act_type_ = ActType_No;
@ -91,7 +90,6 @@ TEST_F(TestL2NormInt8, norm2) {
std::vector<lite::Tensor *> outputs = {&out_tensor};
param_.axis_num_ = 1;
param_.axis_ = reinterpret_cast<int *>(malloc(sizeof(int)));
param_.axis_[0] = -1;
param_.epsilon_ = 1e-6;
param_.act_type_ = ActType_No;