From 26dcbc7ec604eefce46d728d946878e16a470274 Mon Sep 17 00:00:00 2001 From: Michalis Spyrou Date: Tue, 4 Jun 2019 17:23:04 +0100 Subject: COMPMID-2158 Add SRGAN shapes in ConvolutionLayer heurists to dispatch direct convolution Change-Id: I94b853a6ade6f027b7a404174ebca6c600050c28 Signed-off-by: Michalis Spyrou Reviewed-on: https://review.mlplatform.org/c/1400 Reviewed-by: Giuseppe Rossini Comments-Addressed: Arm Jenkins Tested-by: Arm Jenkins --- src/runtime/CL/functions/CLConvolutionLayer.cpp | 10 ++++++++-- src/runtime/NEON/functions/NEConvolutionLayer.cpp | 6 ++++++ 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'src/runtime') diff --git a/src/runtime/CL/functions/CLConvolutionLayer.cpp b/src/runtime/CL/functions/CLConvolutionLayer.cpp index 165d523100..d794cde1f4 100644 --- a/src/runtime/CL/functions/CLConvolutionLayer.cpp +++ b/src/runtime/CL/functions/CLConvolutionLayer.cpp @@ -188,11 +188,17 @@ ConvolutionMethod CLConvolutionLayer::get_convolution_method(const ITensorInfo * } else { - if((weights->dimension(idx_h) > 7) && (input->dimension(idx_c) > output->dimension(idx_c)) && ( CLFFTConvolutionLayer::validate(input, weights, nullptr, output, conv_info, act_info))) + // SRGAN + if((input->dimension(idx_h) > 720U) && (output->dimension(idx_h) > 720U) && (weights->dimension(idx_h) == 9) && (conv_info.pad_top() < 3) + && (CLDirectConvolutionLayer::validate(input, weights, nullptr, output, conv_info, act_info))) + { + return ConvolutionMethod::DIRECT; + } + if((weights->dimension(idx_h) > 7) && (input->dimension(idx_c) > output->dimension(idx_c)) && (CLFFTConvolutionLayer::validate(input, weights, nullptr, output, conv_info, act_info))) { return ConvolutionMethod::FFT; } - if (input->dimension(idx_c) < 16) + if(input->dimension(idx_c) < 16) { return ConvolutionMethod::GEMM; } diff --git a/src/runtime/NEON/functions/NEConvolutionLayer.cpp b/src/runtime/NEON/functions/NEConvolutionLayer.cpp index a62459b3e8..6379367dd8 100644 --- a/src/runtime/NEON/functions/NEConvolutionLayer.cpp +++ b/src/runtime/NEON/functions/NEConvolutionLayer.cpp @@ -165,6 +165,12 @@ ConvolutionMethod NEConvolutionLayer::get_convolution_method(const ITensorInfo * } else { + // SRGAN + if((input->dimension(idx_h) > 720U) && (output->dimension(idx_h) > 720U) && (weights->dimension(idx_h) == 9) + && (NEDirectConvolutionLayer::validate(input, weights, nullptr, output, conv_info, act_info))) + { + return ConvolutionMethod::DIRECT; + } if((weights->dimension(idx_h) > 7) && (input->dimension(idx_c) > output->dimension(idx_c)) && (NEFFTConvolutionLayer::validate(input, weights, nullptr, output, conv_info, act_info))) { return ConvolutionMethod::FFT; -- cgit v1.2.1