blob: daf9a43fe4e29faf393a273945b1ccf549a69d2f [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
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00008#include <aclCommon/ArmComputeTensorUtils.hpp>
9#include <backendsCommon/CpuTensorHandle.hpp>
10#include <neon/NeonLayerSupport.hpp>
11#include <neon/workloads/NeonWorkloadUtils.hpp>
12#include <backendsCommon/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
16#include <memory>
17
telsoa014fcda012018-03-09 14:13:49 +000018namespace armnn
19{
20
surmeh013537c2c2018-05-18 16:31:43 +010021arm_compute::Status NeonConvolution2dWorkloadValidate(const TensorInfo& input,
22 const TensorInfo& output,
23 const Convolution2dDescriptor& descriptor,
24 const TensorInfo& weights,
David Beck5eec11d2018-10-04 15:43:17 +010025 const Optional<TensorInfo>& biases);
surmeh013537c2c2018-05-18 16:31:43 +010026
Nattapat Chaimanowong974b65f2018-10-15 15:07:34 +010027class NeonConvolution2dWorkload : public BaseWorkload<Convolution2dQueueDescriptor>
telsoa014fcda012018-03-09 14:13:49 +000028{
29public:
Nattapat Chaimanowong974b65f2018-10-15 15:07:34 +010030 using BaseWorkload<Convolution2dQueueDescriptor>::m_Data;
telsoa014fcda012018-03-09 14:13:49 +000031
Nattapat Chaimanowong974b65f2018-10-15 15:07:34 +010032 NeonConvolution2dWorkload(const Convolution2dQueueDescriptor& descriptor, const WorkloadInfo& info,
33 std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +000034
Nattapat Chaimanowong974b65f2018-10-15 15:07:34 +010035 void Execute() const override;
telsoa014fcda012018-03-09 14:13:49 +000036
Nattapat Chaimanowong974b65f2018-10-15 15:07:34 +010037private:
telsoa014fcda012018-03-09 14:13:49 +000038 std::unique_ptr<arm_compute::IFunction> m_ConvolutionLayer;
telsoa01c577f2c2018-08-31 09:22:23 +010039
40 std::unique_ptr<arm_compute::Tensor> m_KernelTensor;
41 std::unique_ptr<arm_compute::Tensor> m_BiasTensor;
42
43 void FreeUnusedTensors();
Nattapat Chaimanowong974b65f2018-10-15 15:07:34 +010044
telsoa014fcda012018-03-09 14:13:49 +000045};
surmeh013537c2c2018-05-18 16:31:43 +010046
47} //namespace armnn