xref: /aosp_15_r20/external/armnn/src/backends/neon/workloads/NeonBaseWorkload.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include <armnn/backends/Workload.hpp>
9 
10 namespace armnn
11 {
12 template <typename QueueDescriptor>
13 class NeonBaseWorkload : public BaseWorkload<QueueDescriptor>
14 {
15 public:
NeonBaseWorkload(const QueueDescriptor & descriptor,const WorkloadInfo & info)16     NeonBaseWorkload(const QueueDescriptor& descriptor, const WorkloadInfo& info)
17             : BaseWorkload<QueueDescriptor>(descriptor, info)
18     {}
19 
20     // Replace input tensor handle with the given TensorHandle and call Reconfigure()
ReplaceInputTensorHandle(ITensorHandle * tensorHandle,unsigned int slot)21     void ReplaceInputTensorHandle(ITensorHandle* tensorHandle, unsigned int slot) override
22     {
23         ITensorHandle* backupHandle = this->m_Data.m_Inputs[slot];
24         this->m_Data.m_Inputs[slot] = tensorHandle;
25         try
26         {
27             Reconfigure();
28         }
29         catch(armnn::UnimplementedException& e)
30         {
31             // Cannot reconfigure, revert the slot back and throw the exception.
32             this->m_Data.m_Inputs[slot] = backupHandle;
33             throw e;
34         }
35     }
36 
37     // Replace output tensor handle with the given TensorHandle and call Reconfigure()
ReplaceOutputTensorHandle(ITensorHandle * tensorHandle,unsigned int slot)38     void ReplaceOutputTensorHandle(ITensorHandle* tensorHandle, unsigned int slot) override
39     {
40         ITensorHandle* backupHandle = this->m_Data.m_Outputs[slot];
41         this->m_Data.m_Outputs[slot] = tensorHandle;
42         try
43         {
44             Reconfigure();
45         }
46         catch(armnn::UnimplementedException& e)
47         {
48             // Cannot reconfigure, revert the slot back and throw the exception.
49             this->m_Data.m_Inputs[slot] = backupHandle;
50             throw e;
51         }
52     }
53 
54 protected:
55     // Reconfigure the workload configuration. Throw armnn::UnimplementedException by default.
Reconfigure()56     virtual void Reconfigure()
57     {
58         throw armnn::UnimplementedException("Reconfigure not implemented for this workload");
59     }
60 };
61 } //namespace armnn
62