ArmNN
 25.11
Loading...
Searching...
No Matches
SampleDynamicWorkloadFactory.cpp
Go to the documentation of this file.
1//
2// Copyright © 2020 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
9
14
15namespace sdb // sample dynamic backend
16{
17
18namespace
19{
20static const armnn::BackendId s_Id{ GetBackendId() };
21}
22
23SampleDynamicWorkloadFactory::SampleDynamicWorkloadFactory(const std::shared_ptr<SampleMemoryManager>& memoryManager)
24 : m_MemoryManager(memoryManager)
25{
26}
27
32
34{
35 return s_Id;
36}
37
40 std::string& outReasonIfUnsupported)
41{
42 return IWorkloadFactory::IsLayerSupported(s_Id, layer, dataType, outReasonIfUnsupported);
43}
44
45std::unique_ptr<armnn::ITensorHandle> SampleDynamicWorkloadFactory::CreateTensorHandle(
46 const armnn::TensorInfo& tensorInfo,
47 const bool isMemoryManaged) const
48{
49 return std::make_unique<armnn::ScopedTensorHandle>(tensorInfo);
50}
51
52std::unique_ptr<armnn::ITensorHandle> SampleDynamicWorkloadFactory::CreateTensorHandle(
53 const armnn::TensorInfo& tensorInfo,
54 armnn::DataLayout dataLayout,
55 const bool isMemoryManaged) const
56{
57 return std::make_unique<armnn::ScopedTensorHandle>(tensorInfo);
58}
59
60std::unique_ptr<armnn::IWorkload> SampleDynamicWorkloadFactory::CreateAddition(
61 const armnn::AdditionQueueDescriptor& descriptor,
62 const armnn::WorkloadInfo& info) const
63{
64 return std::make_unique<SampleDynamicAdditionWorkload>(descriptor, info);
65}
66
67std::unique_ptr<armnn::IWorkload> SampleDynamicWorkloadFactory::CreateInput(
68 const armnn::InputQueueDescriptor& descriptor,
69 const armnn::WorkloadInfo& info) const
70{
71 return std::make_unique<armnn::CopyMemGenericWorkload>(descriptor, info);
72}
73
74std::unique_ptr<armnn::IWorkload> SampleDynamicWorkloadFactory::CreateOutput(
75 const armnn::OutputQueueDescriptor& descriptor,
76 const armnn::WorkloadInfo& info) const
77{
78 return std::make_unique<armnn::CopyMemGenericWorkload>(descriptor, info);
79}
80
81std::unique_ptr<armnn::IWorkload> SampleDynamicWorkloadFactory::CreateWorkload(
83 const armnn::QueueDescriptor& descriptor,
84 const armnn::WorkloadInfo& info) const
85{
86 using namespace armnn;
87 using namespace sdb;
88 switch(type)
89 {
91 {
92 auto additionQueueDescriptor = PolymorphicDowncast<const AdditionQueueDescriptor*>(&descriptor);
93 return std::make_unique<SampleDynamicAdditionWorkload>(*additionQueueDescriptor, info);
94 }
96 {
97 auto inputQueueDescriptor = PolymorphicDowncast<const InputQueueDescriptor*>(&descriptor);
98 return std::make_unique<CopyMemGenericWorkload>(*inputQueueDescriptor, info);
99 }
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
110} // namespace sdb
const char * GetBackendId()
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
Definition INetwork.hpp:81
static bool IsLayerSupported(const armnn::IConnectableLayer &layer, armnn::Optional< armnn::DataType > dataType, std::string &outReasonIfUnsupported)
std::unique_ptr< armnn::IWorkload > CreateAddition(const armnn::AdditionQueueDescriptor &descriptor, const armnn::WorkloadInfo &info) const
std::unique_ptr< armnn::IWorkload > CreateInput(const armnn::InputQueueDescriptor &descriptor, const armnn::WorkloadInfo &info) const
std::unique_ptr< armnn::IWorkload > CreateOutput(const armnn::OutputQueueDescriptor &descriptor, const armnn::WorkloadInfo &info) const
const armnn::BackendId & GetBackendId() const override
std::unique_ptr< armnn::IWorkload > CreateWorkload(armnn::LayerType type, const armnn::QueueDescriptor &descriptor, const armnn::WorkloadInfo &info) const override
Backends should implement their own CreateWorkload function with a switch statement.
std::unique_ptr< armnn::ITensorHandle > CreateTensorHandle(const armnn::TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const override
Copyright (c) 2021 ARM Limited and Contributors.
MemCopyQueueDescriptor InputQueueDescriptor
MemCopyQueueDescriptor OutputQueueDescriptor
LayerType
When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below.
Definition Types.hpp:494
DestType PolymorphicDowncast(SourceType *value)
Polymorphic downcast for build in pointers only.
DataLayout
Definition Types.hpp:63
Contains information about TensorInfos of a layer.