diff options
author | Cathal Corbett <cathal.corbett@arm.com> | 2022-05-12 15:54:58 +0100 |
---|---|---|
committer | Ryan OShea <ryan.oshea3@arm.com> | 2022-05-19 11:05:30 +0100 |
commit | f6ae98331f7d08e5ab764ab70a168a523fdd5404 (patch) | |
tree | b085b6ecb066e20090d1ac16d31b30ad62690dbe /src/backends/neon | |
parent | 2cddc72f7aa1eab43c69250e608d662909383ba7 (diff) | |
download | armnn-f6ae98331f7d08e5ab764ab70a168a523fdd5404.tar.gz |
IVGCVSW-6126 ConstTensorsAsInput: Conv2d - Backends
!android-nn-driver:7477
Signed-off-by: Cathal Corbett <cathal.corbett@arm.com>
Change-Id: Ibf633ccccc385bd980934ff829407d21981323ef
Diffstat (limited to 'src/backends/neon')
-rw-r--r-- | src/backends/neon/workloads/NeonConvolution2dWorkload.cpp | 21 | ||||
-rw-r--r-- | src/backends/neon/workloads/NeonConvolution2dWorkload.hpp | 3 |
2 files changed, 9 insertions, 15 deletions
diff --git a/src/backends/neon/workloads/NeonConvolution2dWorkload.cpp b/src/backends/neon/workloads/NeonConvolution2dWorkload.cpp index d5716c8014..12d8c460f9 100644 --- a/src/backends/neon/workloads/NeonConvolution2dWorkload.cpp +++ b/src/backends/neon/workloads/NeonConvolution2dWorkload.cpp @@ -29,7 +29,7 @@ arm_compute::Status NeonConvolution2dWorkloadValidate(const TensorInfo& input, bool isFastMathEnabled, const ActivationDescriptor* activationDescriptor) { - // The implemented workload does support both const and non const + // arm_compute::NEConvolutionLayer supports both const and non const // weights. However, in the case of non const weights we'd have to call // prepare or configure for each inference which we're not setup to do just yet. if (!weights.IsConstant()) @@ -40,7 +40,8 @@ arm_compute::Status NeonConvolution2dWorkloadValidate(const TensorInfo& input, const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout); const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout); - const arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout); + arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout); + aclWeightsInfo.set_are_values_constant(weights.IsConstant()); const arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(descriptor.m_DilationX, descriptor.m_DilationY); @@ -58,6 +59,7 @@ arm_compute::Status NeonConvolution2dWorkloadValidate(const TensorInfo& input, "ArmNN NeonConvolution2dWorkload does not support non constant bias."}; } aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout); + aclBiasesInfo.set_are_values_constant(biases.value().IsConstant()); optionalAclBiasesInfo = &aclBiasesInfo; } @@ -86,7 +88,8 @@ NeonConvolution2dWorkload::NeonConvolution2dWorkload( { using arm_compute::NEConvolutionLayer; - m_Data.ValidateInputsOutputs("NeonConvolution2dWorkload", 1, 1); + uint32_t numInputs = m_Data.m_Parameters.m_BiasEnabled ? 3: 2; + m_Data.ValidateInputsOutputs("NeonConvolution2dWorkload", numInputs, 1); arm_compute::ITensor& input = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Inputs[0])->GetTensor(); arm_compute::ITensor& output = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Outputs[0])->GetTensor(); @@ -97,7 +100,6 @@ NeonConvolution2dWorkload::NeonConvolution2dWorkload( m_KernelTensor = std::make_unique<arm_compute::Tensor>(); BuildArmComputeTensor(*m_KernelTensor, m_Data.m_Weight->GetTensorInfo(), m_Data.m_Parameters.m_DataLayout); - if (m_Data.m_Parameters.m_BiasEnabled) { m_BiasTensor = std::make_unique<arm_compute::Tensor>(); @@ -148,7 +150,7 @@ NeonConvolution2dWorkload::NeonConvolution2dWorkload( ARMNN_REPORT_PROFILING_WORKLOAD_DESC("NeonConvolution2dWorkload_Construct", descriptor.m_Parameters, detailsInfo, - this->GetGuid()); + GetGuid()); m_ConvolutionLayer.reset(convolutionLayer.release()); @@ -162,7 +164,8 @@ NeonConvolution2dWorkload::NeonConvolution2dWorkload( } m_ConvolutionLayer->prepare(); - FreeUnusedTensors(); + FreeTensorIfUnused(m_KernelTensor); + FreeTensorIfUnused(m_BiasTensor); } void NeonConvolution2dWorkload::Execute() const @@ -176,10 +179,4 @@ arm_compute::ConvolutionMethod NeonConvolution2dWorkload::GetConvolutionMethod() return m_ConvolutionMethod; } -void NeonConvolution2dWorkload::FreeUnusedTensors() -{ - FreeTensorIfUnused(m_KernelTensor); - FreeTensorIfUnused(m_BiasTensor); -} - } //namespace armnn diff --git a/src/backends/neon/workloads/NeonConvolution2dWorkload.hpp b/src/backends/neon/workloads/NeonConvolution2dWorkload.hpp index 93e5cb4691..e833f2ac66 100644 --- a/src/backends/neon/workloads/NeonConvolution2dWorkload.hpp +++ b/src/backends/neon/workloads/NeonConvolution2dWorkload.hpp @@ -45,9 +45,6 @@ private: std::unique_ptr<arm_compute::Tensor> m_BiasTensor; arm_compute::ConvolutionMethod m_ConvolutionMethod; - - void FreeUnusedTensors(); - }; } //namespace armnn |