diff --git a/mindspore/lite/src/runtime/kernel/arm/fp32/convolution.cc b/mindspore/lite/src/runtime/kernel/arm/fp32/convolution.cc index 711e755470..af48215b6c 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp32/convolution.cc +++ b/mindspore/lite/src/runtime/kernel/arm/fp32/convolution.cc @@ -159,6 +159,16 @@ int ConvolutionCPUKernel::Run() { return RET_OK; } +ConvParameter *CreateNewConvParameter(ConvParameter *parameter) { + auto conv_parameter = reinterpret_cast(malloc(sizeof(ConvParameter))); + if (conv_parameter == nullptr) { + MS_LOG(ERROR) << "Malloc new conv parameter failed."; + return nullptr; + } + memcpy(conv_parameter, parameter, sizeof(ConvParameter)); + return conv_parameter; +} + kernel::LiteKernel *CpuConvFp32KernelSelect(const std::vector &inputs, const std::vector &outputs, OpParameter *op_parameter, const InnerContext *ctx, const mindspore::lite::PrimitiveC *primitive, @@ -215,6 +225,11 @@ kernel::LiteKernel *CpuGroupConvFp32KernelCreator(const std::vector new_inputs; std::vector new_outputs; + auto new_conv_parameter = CreateNewConvParameter(conv_param); + if (new_conv_parameter == nullptr) { + MS_LOG(ERROR) << "Get new conv parameter failed."; + return nullptr; + } // get new input for each group auto in_tensor = new (std::nothrow) lite::Tensor(inputs.front()->data_type(), in_shape, Format_NHWC, lite::Tensor::Category::VAR); @@ -253,10 +268,10 @@ kernel::LiteKernel *CpuGroupConvFp32KernelCreator(const std::vector(new_conv_parameter), ctx, + primitive, use_winograd, out_unit)); } - // sub kernels and group conv kernel share the same op_parameter struct return new (std::nothrow) GroupConvolutionCPUKernel(op_parameter, inputs, outputs, ctx, primitive, group_convs, group); }