Browse Source

!12322 [MS][LITE] fix memory leak when repeatedly running the session

From: @probiotics_53
Reviewed-by: @zhanghaibo5,@HilbertDavid
Signed-off-by: @zhanghaibo5
tags/v1.2.0-rc1
mindspore-ci-bot Gitee 4 years ago
parent
commit
2c22d2bb3a
6 changed files with 16 additions and 16 deletions
  1. +12
    -0
      mindspore/lite/src/runtime/kernel/arm/base/crop_base.cc
  2. +2
    -10
      mindspore/lite/src/runtime/kernel/arm/base/crop_base.h
  3. +1
    -2
      mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.cc
  4. +0
    -1
      mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.h
  5. +1
    -2
      mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.cc
  6. +0
    -1
      mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.h

+ 12
- 0
mindspore/lite/src/runtime/kernel/arm/base/crop_base.cc View File

@@ -36,6 +36,7 @@ int CropBaseCPUKernel::ReSize() {
auto output_shape = out_tensor->shape();
size_t input_dim = input_shape.size();
size_t output_dim = output_shape.size();
FreeTmpBuffer();

crop_para_->in_shape_ = reinterpret_cast<int *>(malloc(input_dim * sizeof(int)));
if (crop_para_->in_shape_ == nullptr) {
@@ -76,4 +77,15 @@ void CropBaseCPUKernel::PadOffset(int input_dim, CropParameter *crop_para) {
crop_para->in_offset_[i] = crop_offset;
}
}

void CropBaseCPUKernel::FreeTmpBuffer() {
if (crop_para_->in_shape_ != nullptr) {
free(crop_para_->in_shape_);
crop_para_->in_shape_ = nullptr;
}
if (crop_para_->out_shape_ != nullptr) {
free(crop_para_->out_shape_);
crop_para_->out_shape_ = nullptr;
}
}
} // namespace mindspore::kernel

+ 2
- 10
mindspore/lite/src/runtime/kernel/arm/base/crop_base.h View File

@@ -31,20 +31,12 @@ class CropBaseCPUKernel : public LiteKernel {
crop_para_ = reinterpret_cast<CropParameter *>(op_parameter_);
crop_para_->thread_count_ = op_parameter_->thread_num_;
}
~CropBaseCPUKernel() {
if (crop_para_->in_shape_ != nullptr) {
free(crop_para_->in_shape_);
crop_para_->in_shape_ = nullptr;
}
if (crop_para_->out_shape_ != nullptr) {
free(crop_para_->out_shape_);
crop_para_->out_shape_ = nullptr;
}
}
~CropBaseCPUKernel() = default;

int Init() override;
int ReSize() override;
int Run() override { return 0; }
void FreeTmpBuffer();

protected:
CropParameter *crop_para_;


+ 1
- 2
mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.cc View File

@@ -31,8 +31,6 @@ int CropFp16CPUKernel::Init() {
return ReSize();
}

int CropFp16CPUKernel::ReSize() { return CropBaseCPUKernel::ReSize(); }

int CropFp16CPUKernel::DoExecute(int task_id) {
Fp16Crop(input_ptr_, output_ptr_, task_id, crop_para_);
return RET_OK;
@@ -59,6 +57,7 @@ int CropFp16CPUKernel::Run() {
if (ret != RET_OK) {
MS_LOG(ERROR) << "ParallelLaunch failed: " << ret;
}
FreeTmpBuffer();
return ret;
}



+ 0
- 1
mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.h View File

@@ -36,7 +36,6 @@ class CropFp16CPUKernel : public CropBaseCPUKernel {
~CropFp16CPUKernel() override = default;

int Init() override;
int ReSize() override;
int Run() override;
int DoExecute(int task_id);



+ 1
- 2
mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.cc View File

@@ -43,8 +43,6 @@ int CropCPUKernel::Init() {
return ReSize();
}

int CropCPUKernel::ReSize() { return CropBaseCPUKernel::ReSize(); }

int CropCPUKernel::CropParallelRun(int thread_id) {
auto input = in_tensors_[0];
auto output = out_tensors_[0];
@@ -69,6 +67,7 @@ int CropCPUKernel::Run() {
MS_LOG(ERROR) << "Crop launch fail!ret: " << ret;
return RET_ERROR;
}
FreeTmpBuffer();
return RET_OK;
}



+ 0
- 1
mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.h View File

@@ -33,7 +33,6 @@ class CropCPUKernel : public CropBaseCPUKernel {
: CropBaseCPUKernel(parameter, inputs, outputs, ctx, primitive) {}
~CropCPUKernel() = default;
int Init() override;
int ReSize() override;
int Run() override;
int CropParallelRun(int thread_id);
};


Loading…
Cancel
Save