blob: 6af89c1f014f429f8cc91c4016a589c1f7847880 [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5
surmeh01bceff2f2018-03-29 16:29:27 +01006#pragma once
7
David Beck711fa312018-09-24 10:46:38 +01008#include <backends/aclCommon/ArmComputeTensorUtils.hpp>
9#include <backends/CpuTensorHandle.hpp>
David Beck0dbe0ee2018-09-24 15:59:27 +010010#include <backends/neon/NeonLayerSupport.hpp>
11#include <backends/neon/workloads/NeonWorkloadUtils.hpp>
David Beck711fa312018-09-24 10:46:38 +010012#include <backends/Workload.hpp>
telsoa014fcda012018-03-09 14:13:49 +000013
David Beck711fa312018-09-24 10:46:38 +010014#include <arm_compute/runtime/MemoryManagerOnDemand.h>
surmeh013537c2c2018-05-18 16:31:43 +010015
arovir01a6824102018-08-28 17:40:45 +010016#include <boost/optional.hpp>
17
surmeh013537c2c2018-05-18 16:31:43 +010018#include <memory>
19
telsoa014fcda012018-03-09 14:13:49 +000020namespace armnn
21{
22
surmeh013537c2c2018-05-18 16:31:43 +010023arm_compute::Status NeonConvolution2dWorkloadValidate(const TensorInfo& input,
24 const TensorInfo& output,
25 const Convolution2dDescriptor& descriptor,
26 const TensorInfo& weights,
arovir01a6824102018-08-28 17:40:45 +010027 const boost::optional<TensorInfo>& biases);
surmeh013537c2c2018-05-18 16:31:43 +010028
telsoa01c577f2c2018-08-31 09:22:23 +010029template<armnn::DataType... dataTypes>
30class NeonConvolution2dBaseWorkload : public TypedWorkload<Convolution2dQueueDescriptor, dataTypes...>
telsoa014fcda012018-03-09 14:13:49 +000031{
32public:
telsoa01c577f2c2018-08-31 09:22:23 +010033 using TypedWorkload<Convolution2dQueueDescriptor, dataTypes...>::m_Data;
telsoa014fcda012018-03-09 14:13:49 +000034
surmeh013537c2c2018-05-18 16:31:43 +010035 NeonConvolution2dBaseWorkload(const Convolution2dQueueDescriptor& descriptor, const WorkloadInfo& info,
36 std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +000037
38 virtual void ValidateData() const {};
39
40protected:
41 std::unique_ptr<arm_compute::IFunction> m_ConvolutionLayer;
telsoa01c577f2c2018-08-31 09:22:23 +010042
43 std::unique_ptr<arm_compute::Tensor> m_KernelTensor;
44 std::unique_ptr<arm_compute::Tensor> m_BiasTensor;
45
46 void FreeUnusedTensors();
telsoa014fcda012018-03-09 14:13:49 +000047};
surmeh013537c2c2018-05-18 16:31:43 +010048
49} //namespace armnn