blob: bb7a11c08bb23079b4b32e2ec7ba12c40f789ab0 [file] [log] [blame]
Laurent Carlier749294b2020-06-01 09:03:17 +01001//
Cian McGriskin7894ef92023-08-01 14:04:09 +01002// Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5#pragma once
6
David Beck29c75de2018-10-23 13:35:58 +01007#include <armnn/Optional.hpp>
Sadik Armagan04a72972020-09-14 15:44:18 +01008#include <armnn/backends/IBackendInternal.hpp>
Aron Virginas-Tar60578952018-10-31 11:04:01 +00009
Derek Lambertie3803ea2019-11-13 10:36:08 +000010#include <backendsCommon/WorkloadFactoryBase.hpp>
Aron Virginas-Tar60578952018-10-31 11:04:01 +000011#include <aclCommon/BaseMemoryManager.hpp>
Jan Eilers8eb25602020-03-09 12:13:48 +000012#include <armnn/utility/IgnoreUnused.hpp>
David Beck29c75de2018-10-23 13:35:58 +010013
Matthew Sloyan0a7dc6b2021-02-10 16:50:53 +000014#include <arm_compute/runtime/IScheduler.h>
15
telsoa014fcda012018-03-09 14:13:49 +000016namespace armnn
17{
18
telsoa01c577f2c2018-08-31 09:22:23 +010019// Neon workload factory.
Derek Lambertie3803ea2019-11-13 10:36:08 +000020class NeonWorkloadFactory : public WorkloadFactoryBase
telsoa014fcda012018-03-09 14:13:49 +000021{
22public:
Aron Virginas-Tar56055192018-11-12 18:10:43 +000023 NeonWorkloadFactory(const std::shared_ptr<NeonMemoryManager>& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +000024
Sadik Armagan04a72972020-09-14 15:44:18 +010025 NeonWorkloadFactory(const std::shared_ptr<NeonMemoryManager>& memoryManager,
26 const IBackendInternal::IBackendSpecificModelContextPtr& modelContextPtr);
27
David Beck79141b92018-10-23 16:09:36 +010028 const BackendId& GetBackendId() const override;
telsoa014fcda012018-03-09 14:13:49 +000029
David Beck29c75de2018-10-23 13:35:58 +010030 static bool IsLayerSupported(const Layer& layer,
31 Optional<DataType> dataType,
telsoa01c577f2c2018-08-31 09:22:23 +010032 std::string& outReasonIfUnsupported);
telsoa014fcda012018-03-09 14:13:49 +000033
Sadik Armagan04a72972020-09-14 15:44:18 +010034 static bool IsLayerSupported(const IConnectableLayer& layer,
35 Optional<DataType> dataType,
36 std::string& outReasonIfUnsupported,
37 const ModelOptions& modelOptions);
38
Matteo Martincigh3d6898c2019-01-15 16:11:44 +000039 bool SupportsSubTensors() const override { return true; }
telsoa014fcda012018-03-09 14:13:49 +000040
Sadik Armaganc83eb252020-07-22 16:32:06 +010041 ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateSubTensorHandle instead")
Matteo Martincigh3d6898c2019-01-15 16:11:44 +000042 std::unique_ptr<ITensorHandle> CreateSubTensorHandle(ITensorHandle& parent,
43 TensorShape const& subTensorShape,
44 unsigned int const* subTensorOrigin) const override;
telsoa014fcda012018-03-09 14:13:49 +000045
Sadik Armaganc83eb252020-07-22 16:32:06 +010046 ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateTensorHandle instead")
David Monahan3fb7e102019-08-20 11:25:29 +010047 std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& tensorInfo,
48 const bool IsMemoryManaged = true) const override;
telsoa014fcda012018-03-09 14:13:49 +000049
Sadik Armaganc83eb252020-07-22 16:32:06 +010050 ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateTensorHandle instead")
Matteo Martincigh3d6898c2019-01-15 16:11:44 +000051 std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& tensorInfo,
David Monahan3fb7e102019-08-20 11:25:29 +010052 DataLayout dataLayout,
53 const bool IsMemoryManaged = true) const override;
Francis Murtagh351d13d2018-09-24 15:01:18 +010054
Teresa Charlin611c7fb2022-01-07 09:47:29 +000055 std::unique_ptr<IWorkload> CreateWorkload(LayerType type,
56 const QueueDescriptor& descriptor,
57 const WorkloadInfo& info) const override;
surmeh013537c2c2018-05-18 16:31:43 +010058private:
Matthew Sloyan0a7dc6b2021-02-10 16:50:53 +000059 void SetNumberOfThreads();
60
Aron Virginas-Tar56055192018-11-12 18:10:43 +000061 mutable std::shared_ptr<NeonMemoryManager> m_MemoryManager;
Sadik Armagan04a72972020-09-14 15:44:18 +010062 const IBackendInternal::IBackendSpecificModelContextPtr m_ModelContextPtr;
telsoa014fcda012018-03-09 14:13:49 +000063};
64
Aron Virginas-Tar56055192018-11-12 18:10:43 +000065} // namespace armnn