diff --git a/mobile/src/operators/kernel/cl/conv_add_bn_relu_kernel.cpp b/mobile/src/operators/kernel/cl/conv_add_bn_relu_kernel.cpp index 036ffd5c321a072e66d8748233ca2528cf5a8b86..758f60b4fb3a2cc9584ef642171eb33ecfdb79b4 100644 --- a/mobile/src/operators/kernel/cl/conv_add_bn_relu_kernel.cpp +++ b/mobile/src/operators/kernel/cl/conv_add_bn_relu_kernel.cpp @@ -202,7 +202,6 @@ bool ConvAddBNReluKernel::Init( // winograd_transform_weight<4, 3>(&this->cl_helper_, param->Filter()); // // } else { - param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT; param->Filter()->InitCLImage(cl_helper_.CLContext(), cl_helper_.CLCommandQueue()); // std::cout << " input dim " << param->Input()->dims()[0] << " " @@ -218,7 +217,15 @@ bool ConvAddBNReluKernel::Init( // param->Filter()->dims()[2] // << " " << param->Filter()->dims()[3] << " " << std::endl; - this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file, build_options); + if (param->groups > 1) { + param->ExecMode() = + ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT; + this->cl_helper_.AddKernel("conv_3x3", conv_kernel_file, build_options); + } else { + param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT; + this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file, + build_options); + } // } } else { PADDLE_MOBILE_THROW_EXCEPTION(" not support "); @@ -236,7 +243,7 @@ void ConvAddBNReluKernel::Compute( param.NewScale(), param.NewBias()); break; case ConvParam::EXEC_SLIDINGWINDOW1x1_FLOAT: - // case ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT: + case ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT: case ConvParam::EXEC_DEPTHWISE3x3_FLOAT: case ConvParam::EXEC_DEPTHWISEBASIC_FLOAT: ConvAddBnRelu(&this->cl_helper_, param, true, param.Bias(), diff --git a/mobile/src/operators/kernel/cl/conv_add_kernel.cpp b/mobile/src/operators/kernel/cl/conv_add_kernel.cpp index 94ffc001b4cbba7dc31f5073612cc01b47b7ec5c..5f21d3dd3e591e88555dcd9d0a9c1b01a1f38245 100644 --- a/mobile/src/operators/kernel/cl/conv_add_kernel.cpp +++ b/mobile/src/operators/kernel/cl/conv_add_kernel.cpp @@ -96,10 +96,18 @@ bool ConvAddKernel::Init(FusionConvAddParam *param) { // // } else { - param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT; param->Filter()->InitCLImage(cl_helper_.CLContext(), cl_helper_.CLCommandQueue()); - this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file, build_options); + + if (param->groups > 1) { + param->ExecMode() = + ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT; + this->cl_helper_.AddKernel("conv_3x3", conv_kernel_file, build_options); + } else { + param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT; + this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file, + build_options); + } // } } else if (param->Filter()->dims()[2] == 7 && @@ -130,6 +138,7 @@ void ConvAddKernel::Compute( WinogradConv3x3<4, 3>(&this->cl_helper_, param, false, param.Bias()); break; case ConvParam::EXEC_SLIDINGWINDOW1x1_FLOAT: + case ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT: case ConvParam::EXEC_SLIDINGWINDOW5x5_FLOAT: case ConvParam::EXEC_DEPTHWISE3x3_FLOAT: case ConvParam::EXEC_DEPTHWISEBASIC_FLOAT: diff --git a/mobile/src/operators/kernel/cl/conv_add_relu_kernel.cpp b/mobile/src/operators/kernel/cl/conv_add_relu_kernel.cpp index bb27baecd484a75c2be4998205f9e229dc6c49e5..16281e5cb78358ea5a6caacf3413a1b41a92b820 100644 --- a/mobile/src/operators/kernel/cl/conv_add_relu_kernel.cpp +++ b/mobile/src/operators/kernel/cl/conv_add_relu_kernel.cpp @@ -96,7 +96,6 @@ bool ConvAddReluKernel::Init( // winograd_transform_weight<4, 3>(&this->cl_helper_, param->Filter()); // // } else { - param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT; param->Filter()->InitCLImage(cl_helper_.CLContext(), cl_helper_.CLCommandQueue()); // std::cout << " input dim " << param->Input()->dims()[0] << " " @@ -112,7 +111,16 @@ bool ConvAddReluKernel::Init( // param->Filter()->dims()[2] // << " " << param->Filter()->dims()[3] << " " << std::endl; - this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file, build_options); + if (param->groups > 1) { + param->ExecMode() = + ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT; + this->cl_helper_.AddKernel("conv_3x3", conv_kernel_file, build_options); + } else { + param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT; + this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file, + build_options); + } + // } } else if (param->Filter()->dims()[2] == 7 && @@ -146,7 +154,7 @@ void ConvAddReluKernel::Compute( WinogradConv3x3<4, 3>(&this->cl_helper_, param, true, param.Bias()); break; case ConvParam::EXEC_SLIDINGWINDOW1x1_FLOAT: - + case ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT: case ConvParam::EXEC_SLIDINGWINDOW5x5_FLOAT: case ConvParam::EXEC_SLIDINGWINDOW7x7_FLOAT: case ConvParam::EXEC_DEPTHWISE3x3_FLOAT: diff --git a/mobile/src/operators/kernel/cl/conv_bn_relu_kernel.cpp b/mobile/src/operators/kernel/cl/conv_bn_relu_kernel.cpp index dc71ca5589b5655e3a5fca04448b7b84041942ba..bd8b71b85da8d9a6ca8826732a5d6eb9d741f629 100644 --- a/mobile/src/operators/kernel/cl/conv_bn_relu_kernel.cpp +++ b/mobile/src/operators/kernel/cl/conv_bn_relu_kernel.cpp @@ -153,11 +153,18 @@ bool ConvBNReluKernel::Init( // winograd_transform_weight<4, 3>(&this->cl_helper_, param->Filter()); // // } else { - param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT; param->Filter()->InitCLImage(cl_helper_.CLContext(), cl_helper_.CLCommandQueue()); - this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file, build_options); + if (param->groups > 1) { + param->ExecMode() = + ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT; + this->cl_helper_.AddKernel("conv_3x3", conv_kernel_file, build_options); + } else { + param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT; + this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file, + build_options); + } // } } else { PADDLE_MOBILE_THROW_EXCEPTION(" not support "); @@ -174,7 +181,7 @@ void ConvBNReluKernel::Compute( param.NewScale(), param.NewBias()); break; case ConvParam::EXEC_SLIDINGWINDOW1x1_FLOAT: - // case ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT: + case ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT: case ConvParam::EXEC_DEPTHWISE3x3_FLOAT: case ConvParam::EXEC_DEPTHWISEBASIC_FLOAT: ConvAddBnRelu(&this->cl_helper_, param, true, nullptr, param.NewScale(), diff --git a/mobile/src/operators/kernel/cl/conv_kernel.cpp b/mobile/src/operators/kernel/cl/conv_kernel.cpp index dff4039fc0628891763988b11e04c3197c4fec7b..054eab85ab3d071204a902a6673c0176ff09e3da 100644 --- a/mobile/src/operators/kernel/cl/conv_kernel.cpp +++ b/mobile/src/operators/kernel/cl/conv_kernel.cpp @@ -90,7 +90,6 @@ bool ConvKernel::Init(ConvParam *param) { // winograd_transform_weight<4, 3>(&this->cl_helper_, param->Filter()); // // } else { - param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT; param->Filter()->InitCLImage(cl_helper_.CLContext(), cl_helper_.CLCommandQueue()); // std::cout << " input dim " << param->Input()->dims()[0] << " " @@ -105,8 +104,15 @@ bool ConvKernel::Init(ConvParam *param) { // << param->Filter()->dims()[1] << " " << // param->Filter()->dims()[2] // << " " << param->Filter()->dims()[3] << " " << std::endl; + if (param->groups > 1) { + param->ExecMode() = + ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT; + this->cl_helper_.AddKernel("conv_3x3", conv_kernel_file); + } else { + param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT; + this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file); + } - this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file); // } DLOG << "conv 3x3"; } else if (param->Filter()->dims()[2] == 7 && @@ -132,7 +138,7 @@ void ConvKernel::Compute(const ConvParam ¶m) { WinogradConv3x3<4, 3>(&this->cl_helper_, param); break; case ConvParam::EXEC_SLIDINGWINDOW1x1_FLOAT: - // case ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT: + case ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT: case ConvParam::EXEC_DEPTHWISE3x3_FLOAT: case ConvParam::EXEC_SLIDINGWINDOW7x7_FLOAT: case ConvParam::EXEC_DEPTHWISEBASIC_FLOAT: diff --git a/mobile/src/operators/kernel/cl/conv_relu_kernel.cpp b/mobile/src/operators/kernel/cl/conv_relu_kernel.cpp index ab1f962c3b867b9cc6431d04876ca40b60367576..35511331a5755f7c26212f578f0c5bcc5a2b46f0 100644 --- a/mobile/src/operators/kernel/cl/conv_relu_kernel.cpp +++ b/mobile/src/operators/kernel/cl/conv_relu_kernel.cpp @@ -96,29 +96,14 @@ bool ConvReluKernel::Init(FusionConvReluParam *param) { // winograd_transform_weight<4, 3>(&this->cl_helper_, param->Filter()); // // } else { - if (param->Strides()[0] == 1 && param->Dilations()[0] == 1) { - param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3S1_FLOAT; - param->Filter()->InitCLImage(cl_helper_.CLContext(), - cl_helper_.CLCommandQueue()); - this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file, - build_options); + param->Filter()->InitCLImage(cl_helper_.CLContext(), + cl_helper_.CLCommandQueue()); + if (param->groups > 1) { + param->ExecMode() = + ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT; + this->cl_helper_.AddKernel("conv_3x3", conv_kernel_file, build_options); } else { param->ExecMode() = ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT; - param->Filter()->InitCLImage(cl_helper_.CLContext(), - cl_helper_.CLCommandQueue()); - // std::cout << " input dim " << param->Input()->dims()[0] << " " - // << param->Input()->dims()[1] << " " - // << param->Input()->dims()[2] << " " - // << param->Input()->dims()[3] << " " << std::endl; - // std::cout << " output dim " << param->Output()->dims()[0] << " " - // << param->Output()->dims()[1] << " " - // << param->Output()->dims()[2] << " " - // << param->Output()->dims()[3] << " " << std::endl; - // std::cout << " filter dim " << param->Filter()->dims()[0] << " " - // << param->Filter()->dims()[1] << " " - // << param->Filter()->dims()[2] << " " - // << param->Filter()->dims()[3] << " " << std::endl; - this->cl_helper_.AddKernel("conv_3x3spl", conv_kernel_file, build_options); } @@ -140,7 +125,7 @@ void ConvReluKernel::Compute( WinogradConv3x3<4, 3>(&this->cl_helper_, param, true); break; case ConvParam::EXEC_SLIDINGWINDOW1x1_FLOAT: - // case ConvParam::EXEC_SLIDINGWINDOW3x3_FLOAT: + case ConvParam::EXEC_SLIDINGWINDOW3x3_WITH_GROUP_FLOAT: case ConvParam::EXEC_DEPTHWISE3x3_FLOAT: case ConvParam::EXEC_DEPTHWISEBASIC_FLOAT: ConvAddBnRelu(&this->cl_helper_, param, true);