blob: d4be0fcb3eb1415efc2cd80088bd809631106fed [file] [log] [blame]
Narumol Prangnawarat867eba52020-02-03 12:29:56 +00001//
2// Copyright © 2020 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Colm Donelan0c479742021-12-10 12:43:54 +00006#include <armnn/backends/MemCopyWorkload.hpp>
7#include <armnn/backends/TensorHandle.hpp>
Francis Murtagha5048342023-08-08 10:38:25 +01008#include <armnn/utility/PolymorphicDowncast.hpp>
Narumol Prangnawarat867eba52020-02-03 12:29:56 +00009
10#include "SampleDynamicAdditionWorkload.hpp"
11#include "SampleDynamicBackend.hpp"
12#include "SampleDynamicWorkloadFactory.hpp"
13#include "SampleTensorHandle.hpp"
14
Jan Eilersc84e45d2020-08-19 14:14:36 +010015namespace sdb // sample dynamic backend
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000016{
17
18namespace
19{
Jan Eilersc84e45d2020-08-19 14:14:36 +010020static const armnn::BackendId s_Id{ GetBackendId() };
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000021}
22
23SampleDynamicWorkloadFactory::SampleDynamicWorkloadFactory(const std::shared_ptr<SampleMemoryManager>& memoryManager)
24 : m_MemoryManager(memoryManager)
25{
26}
27
28SampleDynamicWorkloadFactory::SampleDynamicWorkloadFactory()
29 : m_MemoryManager(new SampleMemoryManager())
30{
31}
32
Jan Eilersc84e45d2020-08-19 14:14:36 +010033const armnn::BackendId& SampleDynamicWorkloadFactory::GetBackendId() const
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000034{
35 return s_Id;
36}
37
Jan Eilersc84e45d2020-08-19 14:14:36 +010038bool SampleDynamicWorkloadFactory::IsLayerSupported(const armnn::IConnectableLayer& layer,
39 armnn::Optional<armnn::DataType> dataType,
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000040 std::string& outReasonIfUnsupported)
41{
42 return IWorkloadFactory::IsLayerSupported(s_Id, layer, dataType, outReasonIfUnsupported);
43}
44
Jan Eilersc84e45d2020-08-19 14:14:36 +010045std::unique_ptr<armnn::ITensorHandle> SampleDynamicWorkloadFactory::CreateTensorHandle(
46 const armnn::TensorInfo& tensorInfo,
47 const bool isMemoryManaged) const
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000048{
James Conroy1f58f032021-04-27 17:13:27 +010049 return std::make_unique<armnn::ScopedTensorHandle>(tensorInfo);
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000050}
51
Jan Eilersc84e45d2020-08-19 14:14:36 +010052std::unique_ptr<armnn::ITensorHandle> SampleDynamicWorkloadFactory::CreateTensorHandle(
53 const armnn::TensorInfo& tensorInfo,
54 armnn::DataLayout dataLayout,
55 const bool isMemoryManaged) const
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000056{
James Conroy1f58f032021-04-27 17:13:27 +010057 return std::make_unique<armnn::ScopedTensorHandle>(tensorInfo);
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000058}
59
Jan Eilersc84e45d2020-08-19 14:14:36 +010060std::unique_ptr<armnn::IWorkload> SampleDynamicWorkloadFactory::CreateAddition(
61 const armnn::AdditionQueueDescriptor& descriptor,
62 const armnn::WorkloadInfo& info) const
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000063{
64 return std::make_unique<SampleDynamicAdditionWorkload>(descriptor, info);
65}
66
Jan Eilersc84e45d2020-08-19 14:14:36 +010067std::unique_ptr<armnn::IWorkload> SampleDynamicWorkloadFactory::CreateInput(
68 const armnn::InputQueueDescriptor& descriptor,
69 const armnn::WorkloadInfo& info) const
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000070{
Jan Eilersc84e45d2020-08-19 14:14:36 +010071 return std::make_unique<armnn::CopyMemGenericWorkload>(descriptor, info);
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000072}
73
Jan Eilersc84e45d2020-08-19 14:14:36 +010074std::unique_ptr<armnn::IWorkload> SampleDynamicWorkloadFactory::CreateOutput(
75 const armnn::OutputQueueDescriptor& descriptor,
76 const armnn::WorkloadInfo& info) const
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000077{
Jan Eilersc84e45d2020-08-19 14:14:36 +010078 return std::make_unique<armnn::CopyMemGenericWorkload>(descriptor, info);
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000079}
80
Francis Murtagha5048342023-08-08 10:38:25 +010081std::unique_ptr<armnn::IWorkload> SampleDynamicWorkloadFactory::CreateWorkload(
82 armnn::LayerType type,
83 const armnn::QueueDescriptor& descriptor,
84 const armnn::WorkloadInfo& info) const
85{
86 using namespace armnn;
87 using namespace sdb;
88 switch(type)
89 {
90 case LayerType::Addition:
91 {
92 auto additionQueueDescriptor = PolymorphicDowncast<const AdditionQueueDescriptor*>(&descriptor);
93 return std::make_unique<SampleDynamicAdditionWorkload>(*additionQueueDescriptor, info);
94 }
95 case LayerType::Input:
96 {
97 auto inputQueueDescriptor = PolymorphicDowncast<const InputQueueDescriptor*>(&descriptor);
98 return std::make_unique<CopyMemGenericWorkload>(*inputQueueDescriptor, info);
99 }
100 case LayerType::Output:
101 {
102 auto outputQueueDescriptor = PolymorphicDowncast<const OutputQueueDescriptor*>(&descriptor);
103 return std::make_unique<CopyMemGenericWorkload>(*outputQueueDescriptor, info);
104 }
105 default:
106 return nullptr;
107 }
108}
109
Jan Eilersc84e45d2020-08-19 14:14:36 +0100110} // namespace sdb