From 3798a0bbf6949f1939ca1cc9d4698ce7e20b95b4 Mon Sep 17 00:00:00 2001 From: ling Date: Tue, 18 Aug 2020 16:34:30 +0800 Subject: [PATCH] [MS][LITE][Develop] fix conv1x1 deconv resize bug --- .../kernel/arm/fp16/convolution_1x1_fp16.cc | 20 +++++++++----- .../kernel/arm/fp16/convolution_1x1_fp16.h | 26 +++++++------------ .../kernel/arm/fp16/deconvolution_fp16.cc | 4 +++ .../kernel/arm/fp32/convolution_1x1.cc | 2 ++ .../runtime/kernel/arm/fp32/deconvolution.cc | 9 ++++++- 5 files changed, 38 insertions(+), 23 deletions(-) diff --git a/mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.cc b/mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.cc index c8dbdc8078..b815bb31b6 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.cc +++ b/mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.cc @@ -105,16 +105,24 @@ int Convolution1x1FP16CPUKernel::Init() { return ReSize(); } -int Convolution1x1FP16CPUKernel::ReSize() { - FreeTmpBuffer(); - if (fp16_weight_ != nullptr) { - free(fp16_weight_); - fp16_weight_ = nullptr; +void Convolution1x1FP16CPUKernel::FreeTmpBuffer() { + if (weight_ptr_ != nullptr) { + free(weight_ptr_); + weight_ptr_ = nullptr; } - if (input_ptr_ != nullptr) { + if (pack_input_ != nullptr) { + free(pack_input_); + pack_input_ = nullptr; + } + if (pre_trans_input_ && input_ptr_ != nullptr) { free(input_ptr_); input_ptr_ = nullptr; } + return; +} + +int Convolution1x1FP16CPUKernel::ReSize() { + FreeTmpBuffer(); auto ret = ConvolutionBaseCPUKernel::Init(); if (ret != RET_OK) { diff --git a/mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.h b/mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.h index 0f55393c5f..291e21ea7f 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.h +++ b/mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.h @@ -34,33 +34,27 @@ class Convolution1x1FP16CPUKernel : public ConvolutionBaseFP16CPUKernel { : ConvolutionBaseFP16CPUKernel(parameter, inputs, outputs, ctx, primitive) { matmul_param_ = new MatMulParameter(); } - ~Convolution1x1FP16CPUKernel() override { FreeTmpBuffer(); } + ~Convolution1x1FP16CPUKernel() override { + FreeTmpBuffer(); + if (matmul_param_ != nullptr) { + delete matmul_param_; + matmul_param_ = nullptr; + } + } int Init() override; int ReSize() override; int Run() override; int RunImpl(int task_id); - int InitBuffer(); + + private: + void FreeTmpBuffer(); int InitConv1x1Param(); int InitMatmulParam(); int InitWeightBias(); void Pre1x1Trans(float16_t *src_input, float16_t *src_output); private: - void FreeTmpBuffer() { - if (weight_ptr_ != nullptr) { - free(weight_ptr_); - weight_ptr_ = nullptr; - } - if (matmul_param_ != nullptr) { - delete matmul_param_; - matmul_param_ = nullptr; - } - if (pack_input_ != nullptr) { - free(pack_input_); - pack_input_ = nullptr; - } - } bool pre_trans_input_ = false; int thread_count_ = 0; int thread_stride_ = 0; diff --git a/mindspore/lite/src/runtime/kernel/arm/fp16/deconvolution_fp16.cc b/mindspore/lite/src/runtime/kernel/arm/fp16/deconvolution_fp16.cc index ff1f73466f..d86b364a2e 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp16/deconvolution_fp16.cc +++ b/mindspore/lite/src/runtime/kernel/arm/fp16/deconvolution_fp16.cc @@ -27,6 +27,10 @@ using mindspore::schema::PrimitiveType_DeConv2D; namespace mindspore::kernel { DeConvolutionFp16CPUKernel::~DeConvolutionFp16CPUKernel() { FreeParam(); + if (matmul_param_ != nullptr) { + delete matmul_param_; + matmul_param_ = nullptr; + } return; } diff --git a/mindspore/lite/src/runtime/kernel/arm/fp32/convolution_1x1.cc b/mindspore/lite/src/runtime/kernel/arm/fp32/convolution_1x1.cc index 4b2078dca0..3ffee2108d 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp32/convolution_1x1.cc +++ b/mindspore/lite/src/runtime/kernel/arm/fp32/convolution_1x1.cc @@ -26,6 +26,7 @@ Convolution1x1CPUKernel::~Convolution1x1CPUKernel() { FreeTmpBuffer(); if (matmul_param_ != nullptr) { delete matmul_param_; + matmul_param_ = nullptr; } } @@ -42,6 +43,7 @@ void Convolution1x1CPUKernel::FreeTmpBuffer() { free(input_ptr_); input_ptr_ = nullptr; } + return; } int Convolution1x1CPUKernel::ReSize() { diff --git a/mindspore/lite/src/runtime/kernel/arm/fp32/deconvolution.cc b/mindspore/lite/src/runtime/kernel/arm/fp32/deconvolution.cc index 4f96c216ba..236811fbfd 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp32/deconvolution.cc +++ b/mindspore/lite/src/runtime/kernel/arm/fp32/deconvolution.cc @@ -25,7 +25,13 @@ using mindspore::lite::RET_OK; using mindspore::schema::PrimitiveType_DeConv2D; namespace mindspore::kernel { -DeConvolutionCPUKernel::~DeConvolutionCPUKernel() { FreeTmpBuffer(); } +DeConvolutionCPUKernel::~DeConvolutionCPUKernel() { + FreeTmpBuffer(); + if (matmul_param_ != nullptr) { + delete matmul_param_; + matmul_param_ = nullptr; + } +} void DeConvolutionCPUKernel::FreeTmpBuffer() { if (weight_ptr_ != nullptr) { @@ -44,6 +50,7 @@ void DeConvolutionCPUKernel::FreeTmpBuffer() { free(pack_output_); pack_output_ = nullptr; } + return; } int DeConvolutionCPUKernel::ReSize() {