diff --git a/mindspore/lite/src/runtime/kernel/arm/base/crop_base.cc b/mindspore/lite/src/runtime/kernel/arm/base/crop_base.cc index 94460ab3e3..ee74e32460 100644 --- a/mindspore/lite/src/runtime/kernel/arm/base/crop_base.cc +++ b/mindspore/lite/src/runtime/kernel/arm/base/crop_base.cc @@ -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(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 diff --git a/mindspore/lite/src/runtime/kernel/arm/base/crop_base.h b/mindspore/lite/src/runtime/kernel/arm/base/crop_base.h index 84aac7ae3e..e3d3e70d13 100644 --- a/mindspore/lite/src/runtime/kernel/arm/base/crop_base.h +++ b/mindspore/lite/src/runtime/kernel/arm/base/crop_base.h @@ -31,20 +31,12 @@ class CropBaseCPUKernel : public LiteKernel { crop_para_ = reinterpret_cast(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_; diff --git a/mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.cc b/mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.cc index 626e0424b7..3d17806249 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.cc +++ b/mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.cc @@ -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; } diff --git a/mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.h b/mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.h index f55cddf0bf..e6fcc7fc77 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.h +++ b/mindspore/lite/src/runtime/kernel/arm/fp16/crop_fp16.h @@ -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); diff --git a/mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.cc b/mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.cc index a8449ebf25..01cb0a570b 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.cc +++ b/mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.cc @@ -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; } diff --git a/mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.h b/mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.h index 658f96cdfb..0997e6a888 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.h +++ b/mindspore/lite/src/runtime/kernel/arm/fp32/crop_fp32.h @@ -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); };