Browse Source

!4661 [MS][LITE][Develop]fp16 conv1x1 deconv resize func bug

Merge pull request !4661 from ling/conv1x1_fp16
tags/v0.7.0-beta
mindspore-ci-bot Gitee 5 years ago
parent
commit
b488c34b77
5 changed files with 38 additions and 23 deletions
  1. +14
    -6
      mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.cc
  2. +10
    -16
      mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.h
  3. +4
    -0
      mindspore/lite/src/runtime/kernel/arm/fp16/deconvolution_fp16.cc
  4. +2
    -0
      mindspore/lite/src/runtime/kernel/arm/fp32/convolution_1x1.cc
  5. +8
    -1
      mindspore/lite/src/runtime/kernel/arm/fp32/deconvolution.cc

+ 14
- 6
mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.cc View File

@@ -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) {


+ 10
- 16
mindspore/lite/src/runtime/kernel/arm/fp16/convolution_1x1_fp16.h View File

@@ -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;


+ 4
- 0
mindspore/lite/src/runtime/kernel/arm/fp16/deconvolution_fp16.cc View File

@@ -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;
}



+ 2
- 0
mindspore/lite/src/runtime/kernel/arm/fp32/convolution_1x1.cc View File

@@ -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() {


+ 8
- 1
mindspore/lite/src/runtime/kernel/arm/fp32/deconvolution.cc View File

@@ -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() {


Loading…
Cancel
Save