1 // 2 // Copyright © 2017 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #pragma once 7 8 #include <armnn/Tensor.hpp> 9 #include <armnn/Descriptors.hpp> 10 11 #include <backendsCommon/Workload.hpp> 12 13 #include <arm_compute/runtime/CL/functions/CLConvolutionLayer.h> 14 #include <arm_compute/runtime/MemoryManagerOnDemand.h> 15 16 #include <memory> 17 18 namespace armnn 19 { 20 21 arm_compute::Status ClConvolution2dWorkloadValidate(const TensorInfo& input, 22 const TensorInfo& output, 23 const Convolution2dDescriptor& descriptor, 24 const TensorInfo& weights, 25 const Optional<TensorInfo>& biases, 26 bool isFastMathEnabled = false, 27 const ActivationDescriptor* activationDescriptor = nullptr); 28 29 class ClConvolution2dWorkload : public BaseWorkload<Convolution2dQueueDescriptor> 30 { 31 public: 32 ClConvolution2dWorkload(const Convolution2dQueueDescriptor& descriptor, 33 const WorkloadInfo& info, 34 std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager, 35 const bool isFastMathEnabled = false); 36 void Execute() const override; 37 38 arm_compute::ConvolutionMethod GetConvolutionMethod() const; 39 40 private: 41 mutable arm_compute::CLConvolutionLayer m_ConvolutionLayer; 42 43 std::unique_ptr<arm_compute::CLTensor> m_KernelTensor; 44 std::unique_ptr<arm_compute::CLTensor> m_BiasTensor; 45 46 arm_compute::ConvolutionMethod m_ConvolutionMethod; 47 48 void FreeUnusedTensors(); 49 }; 50 51 } //namespace armnn 52 53