diff options
author | Georgios Pinitas <georgios.pinitas@arm.com> | 2018-10-16 19:10:46 +0100 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:55:45 +0000 |
commit | 08346e9b9a7dadd2f0765aea64e656902d843e8a (patch) | |
tree | 6caaebd05a3b78a4a1e8bfb077aa02d75bd4cca0 /src/graph/backends | |
parent | 8aaf93e8c12ce93d3d0082d4f4b70376f15536da (diff) | |
download | ComputeLibrary-08346e9b9a7dadd2f0765aea64e656902d843e8a.tar.gz |
COMPMID-1451:Fuse RELU,LU_BOUNDED_RELU with requantization in NEGEMMConvolutionLayer.
Change-Id: Iea5f2c5bcac8051c4c7655a6eabb2c43772eb31f
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/154104
Tested-by: bsgcomp <bsgcomp@arm.com>
Reviewed-by: Michele DiGiorgio <michele.digiorgio@arm.com>
Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Diffstat (limited to 'src/graph/backends')
-rw-r--r-- | src/graph/backends/GLES/GCFunctionsFactory.cpp | 10 | ||||
-rw-r--r-- | src/graph/backends/NEON/NEFunctionFactory.cpp | 14 |
2 files changed, 14 insertions, 10 deletions
diff --git a/src/graph/backends/GLES/GCFunctionsFactory.cpp b/src/graph/backends/GLES/GCFunctionsFactory.cpp index 6268583938..02a05679a3 100644 --- a/src/graph/backends/GLES/GCFunctionsFactory.cpp +++ b/src/graph/backends/GLES/GCFunctionsFactory.cpp @@ -120,8 +120,9 @@ std::unique_ptr<IFunction> create_convolution_layer<GCConvolutionLayerFunctions, biases->info()->set_data_type(DataType::S32); } - const PadStrideInfo conv_info = node.convolution_info(); - const ConvolutionMethod conv_algorithm = node.convolution_method(); + const PadStrideInfo conv_info = node.convolution_info(); + const ConvolutionMethod conv_algorithm = node.convolution_method(); + const ActivationLayerInfo fused_act = node.fused_activation(); // Create and configure function (we assume that functions have been validated before creation) std::shared_ptr<IMemoryManager> mm = get_memory_manager(ctx, GCTargetInfo::TargetType); @@ -132,13 +133,13 @@ std::unique_ptr<IFunction> create_convolution_layer<GCConvolutionLayerFunctions, { std::tie(func, func_name) = create_named_function<GCConvolutionLayerFunctions::DirectConvolutionLayer>( std::string("DirectConvolutionLayer"), - input, weights, biases, output, conv_info); + input, weights, biases, output, conv_info, fused_act); } else { std::tie(func, func_name) = create_named_memory_managed_function<GCConvolutionLayerFunctions::GenericConvolutionLayer>( std::string("ConvolutionLayer"), mm, - input, weights, biases, output, conv_info); + input, weights, biases, output, conv_info, WeightsInfo(), Size2D(1U, 1U), fused_act); } // Log info @@ -149,6 +150,7 @@ std::unique_ptr<IFunction> create_convolution_layer<GCConvolutionLayerFunctions, << " Input shape: " << input->info()->tensor_shape() << " Weights shape: " << weights->info()->tensor_shape() << " Output shape: " << output->info()->tensor_shape() + << (fused_act.enabled() ? " " + to_string(fused_act.activation()) : "") << std::endl); return func; } diff --git a/src/graph/backends/NEON/NEFunctionFactory.cpp b/src/graph/backends/NEON/NEFunctionFactory.cpp index 286c890088..e967c1be61 100644 --- a/src/graph/backends/NEON/NEFunctionFactory.cpp +++ b/src/graph/backends/NEON/NEFunctionFactory.cpp @@ -97,8 +97,9 @@ std::unique_ptr<IFunction> create_convolution_layer<NEConvolutionLayerFunctions, biases->info()->set_data_type(DataType::S32); } - const PadStrideInfo conv_info = node.convolution_info(); - const ConvolutionMethod conv_algorithm = node.convolution_method(); + const PadStrideInfo conv_info = node.convolution_info(); + const ConvolutionMethod conv_algorithm = node.convolution_method(); + const ActivationLayerInfo fused_act = node.fused_activation(); // Create and configure function (we assume that functions have been validated before creation) std::shared_ptr<IMemoryManager> mm = get_memory_manager(ctx, Target::NEON); @@ -107,22 +108,22 @@ std::unique_ptr<IFunction> create_convolution_layer<NEConvolutionLayerFunctions, if(conv_algorithm == ConvolutionMethod::Direct) { std::tie(func, func_name) = create_named_memory_managed_function<NEDirectConvolutionLayer>( - std::string("DirectConvolutionLayer"), mm, input, weights, biases, output, conv_info); + std::string("DirectConvolutionLayer"), mm, input, weights, biases, output, conv_info, fused_act); } else if(conv_algorithm == ConvolutionMethod::GEMM) { std::tie(func, func_name) = create_named_memory_managed_function<NEGEMMConvolutionLayer>( - std::string("GEMMConvolutionLayer"), mm, input, weights, biases, output, conv_info); + std::string("GEMMConvolutionLayer"), mm, input, weights, biases, output, conv_info, WeightsInfo(), Size2D(1, 1), fused_act); } else if(conv_algorithm == ConvolutionMethod::Winograd) { std::tie(func, func_name) = create_named_memory_managed_function<NEWinogradConvolutionLayer>( - std::string("WinogradConvolutionLayer"), mm, input, weights, biases, output, conv_info); + std::string("WinogradConvolutionLayer"), mm, input, weights, biases, output, conv_info, fused_act); } else { std::tie(func, func_name) = create_named_memory_managed_function<NEConvolutionLayer>( - std::string("ConvolutionLayer"), mm, input, weights, biases, output, conv_info); + std::string("ConvolutionLayer"), mm, input, weights, biases, output, conv_info, WeightsInfo(), Size2D(1, 1), fused_act); } // Log info @@ -140,6 +141,7 @@ std::unique_ptr<IFunction> create_convolution_layer<NEConvolutionLayerFunctions, << " Input shape: " << input->info()->tensor_shape() << " Weights shape: " << weights->info()->tensor_shape() << " Output shape: " << output->info()->tensor_shape() + << (fused_act.enabled() ? " " + to_string(fused_act.activation()) : "") << std::endl); return func; } |