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