diff options
author | Gian Marco Iodice <gianmarco.iodice@arm.com> | 2018-05-14 14:21:39 +0100 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:52:35 +0000 |
commit | a8aef2916379402e241d9f2c5e0faf3f99c860f7 (patch) | |
tree | accf1f74bb836766260dbdb90aad7b6048c675d2 /src | |
parent | cb0010b02281245c66d5c996fa9ef8b22f036a2d (diff) | |
download | ComputeLibrary-a8aef2916379402e241d9f2c5e0faf3f99c860f7.tar.gz |
COMPMID-792 - Re-enabled Winograd on NEON in all graph examples.
Since now the input transform can be multi-threaded, I re-ebaled Winograd in all graph examples
Change-Id: I39ef78243bb47fdae135e18dcae2102af0675b3b
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/131048
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Tested-by: Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/runtime/CL/functions/CLConvolutionLayer.cpp | 4 | ||||
-rw-r--r-- | src/runtime/NEON/functions/NEConvolutionLayer.cpp | 8 |
2 files changed, 7 insertions, 5 deletions
diff --git a/src/runtime/CL/functions/CLConvolutionLayer.cpp b/src/runtime/CL/functions/CLConvolutionLayer.cpp index 3d4fb113b2..faec4bbf5a 100644 --- a/src/runtime/CL/functions/CLConvolutionLayer.cpp +++ b/src/runtime/CL/functions/CLConvolutionLayer.cpp @@ -123,7 +123,9 @@ ConvolutionMethod CLConvolutionLayer::get_convolution_method(const ITensorInfo * ARM_COMPUTE_UNUSED(weights_info); ARM_COMPUTE_UNUSED(gpu_target); - if(dilation != Size2D(1U, 1U)) + const size_t idx_c = get_data_layout_dimension_index(input->data_layout(), DataLayoutDimension::CHANNEL); + + if(dilation != Size2D(1U, 1U) || (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 0ad4babedc..69fb948d3f 100644 --- a/src/runtime/NEON/functions/NEConvolutionLayer.cpp +++ b/src/runtime/NEON/functions/NEConvolutionLayer.cpp @@ -104,16 +104,16 @@ ConvolutionMethod NEConvolutionLayer::get_convolution_method(const ITensorInfo * const ITensorInfo *output, const PadStrideInfo &conv_info, const WeightsInfo &weights_info, const Size2D &dilation, const ActivationLayerInfo &act_info) { - ARM_COMPUTE_ERROR_ON_NULLPTR(input); - ARM_COMPUTE_ERROR_ON_NULLPTR(output); - ARM_COMPUTE_ERROR_ON_NULLPTR(weights); + ARM_COMPUTE_ERROR_ON_NULLPTR(input, output, weights); ARM_COMPUTE_UNUSED(output); ARM_COMPUTE_UNUSED(weights_info); const size_t idx_w = get_data_layout_dimension_index(input->data_layout(), DataLayoutDimension::WIDTH); const size_t idx_h = get_data_layout_dimension_index(input->data_layout(), DataLayoutDimension::HEIGHT); + const size_t idx_c = get_data_layout_dimension_index(input->data_layout(), DataLayoutDimension::CHANNEL); - if((input->data_type() == DataType::F32) && (input->data_layout() == DataLayout::NCHW) && (weights->dimension(idx_w) == 3) && (weights->dimension(idx_h) == 3) && (weights->num_dimensions() <= 4) + if((input->data_type() == DataType::F32) && (input->data_layout() == DataLayout::NCHW) && (input->dimension(idx_c) > 16) && (weights->dimension(idx_w) == 3) && (weights->dimension(idx_h) == 3) + && (weights->num_dimensions() <= 4) && (conv_info.stride().first == 1) && (conv_info.stride().second == 1) && (dilation == Size2D(1U, 1U)) && (!act_info.enabled())) { //FIXME Until COMPMID-1041 is implemented Winograd is slower than GEMM on A53. |