forked from mindspore-Ecosystem/mindspore
!12322 [MS][LITE] fix memory leak when repeatedly running the session
From: @probiotics_53 Reviewed-by: @zhanghaibo5,@HilbertDavid Signed-off-by: @zhanghaibo5
This commit is contained in:
commit
2c22d2bb3a
|
@ -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
|
||||
|
|
|
@ -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_;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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…
Reference in New Issue