diff options
author | Gian Marco Iodice <gianmarco.iodice@arm.com> | 2021-04-30 09:55:26 +0100 |
---|---|---|
committer | Michele Di Giorgio <michele.digiorgio@arm.com> | 2021-05-14 11:24:59 +0100 |
commit | 72d62390697f478ab21117429e9fa7f8971ae183 (patch) | |
tree | 8c6f33e728255317c571deb6a5a415b788187ea2 | |
parent | 4e38aff09798edf394e666900ad395d00db361a5 (diff) | |
download | ComputeLibrary-72d62390697f478ab21117429e9fa7f8971ae183.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.cpp | 23 |
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) { |