aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGian Marco Iodice <gianmarco.iodice@arm.com>2021-04-30 09:55:26 +0100
committerGian Marco Iodice <gianmarco.iodice@arm.com>2021-05-07 09:32:18 +0000
commit3ae6580d26cee273b750e69b5c06f6efa4caf3fb (patch)
treeab15b9910023b336c1f5cd0c8267b0d862f298cd
parentc2bed95d3833bfedc88997494fcb8e3e1b01b0e0 (diff)
downloadComputeLibrary-3ae6580d26cee273b750e69b5c06f6efa4caf3fb.tar.gz
Update heuristic for CLConvolutionLayer
- Call direct convolution when filter size height is greater than or equal to 5 Resolves COMPMID-4439 Change-Id: Ie8ccccc0629eb4c74bd62c4bb4ced47f6898a945 Signed-off-by: Gian Marco Iodice <gianmarco.iodice@arm.com> Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5589 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
-rw-r--r--src/runtime/CL/functions/CLConvolutionLayer.cpp23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/runtime/CL/functions/CLConvolutionLayer.cpp b/src/runtime/CL/functions/CLConvolutionLayer.cpp
index aaabbe0cfc..1082a475b2 100644
--- a/src/runtime/CL/functions/CLConvolutionLayer.cpp
+++ b/src/runtime/CL/functions/CLConvolutionLayer.cpp
@@ -224,21 +224,20 @@ ConvolutionMethod CLConvolutionLayer::get_convolution_method(const ITensorInfo *
{
return ConvolutionMethod::DIRECT;
}
- if((weights->dimension(idx_h) > 7) && (input->dimension(idx_c) >= output->dimension(idx_c)) && (CLDirectConvolutionLayer::validate(input, weights, nullptr, output, conv_info, act_info)))
+ if(gpu_target == GPUTarget::G71)
{
- if(gpu_target == GPUTarget::G71)
+ if((weights->dimension(idx_h) > 7) && (input->dimension(idx_c) >= output->dimension(idx_c))
+ && (CLFFTConvolutionLayer::validate(input, weights, nullptr, output, conv_info, act_info, enable_fast_math)))
{
- if(CLFFTConvolutionLayer::validate(input, weights, nullptr, output, conv_info, act_info, enable_fast_math))
- {
- return ConvolutionMethod::FFT;
- }
- else
- {
- return ConvolutionMethod::GEMM;
- }
+ return ConvolutionMethod::FFT;
+ }
+ }
+ else
+ {
+ if((weights->dimension(idx_h) >= 5) && (input->dimension(idx_c) >= output->dimension(idx_c)) && (CLDirectConvolutionLayer::validate(input, weights, nullptr, output, conv_info, act_info)))
+ {
+ return ConvolutionMethod::DIRECT;
}
-
- return ConvolutionMethod::DIRECT;
}
if(input->dimension(idx_c) < 16)
{