ArmNN
 25.02
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
NeonConstantWorkload Class Reference

#include <NeonConstantWorkload.hpp>

Inheritance diagram for NeonConstantWorkload:
[legend]
Collaboration diagram for NeonConstantWorkload:
[legend]

Public Member Functions

 NeonConstantWorkload (const ConstantQueueDescriptor &descriptor, const WorkloadInfo &info)
 
virtual void Execute () const override
 
- Public Member Functions inherited from NeonBaseWorkload< ConstantQueueDescriptor >
 NeonBaseWorkload (const ConstantQueueDescriptor &descriptor, const WorkloadInfo &info)
 
void ReplaceInputTensorHandle (ITensorHandle *tensorHandle, unsigned int slot) override
 
void ReplaceOutputTensorHandle (ITensorHandle *tensorHandle, unsigned int slot) override
 
- Public Member Functions inherited from BaseWorkload< QueueDescriptor >
 BaseWorkload (const QueueDescriptor &descriptor, const WorkloadInfo &info)
 
virtual const std::string & GetName () const override
 
void PostAllocationConfigure () override
 
const QueueDescriptorGetData () const
 
arm::pipe::ProfilingGuid GetGuid () const final
 
virtual bool SupportsTensorHandleReplacement () const override
 
- Public Member Functions inherited from IWorkload
virtual ~IWorkload ()
 
virtual void RegisterDebugCallback (const DebugCallbackFunction &)
 
virtual armnn::Optional< armnn::MemoryRequirementsGetMemoryRequirements ()
 

Additional Inherited Members

- Protected Member Functions inherited from NeonBaseWorkload< ConstantQueueDescriptor >
virtual void Reconfigure ()
 
- Protected Attributes inherited from BaseWorkload< QueueDescriptor >
QueueDescriptor m_Data
 
const arm::pipe::ProfilingGuid m_Guid
 
const std::string m_Name
 

Detailed Description

Definition at line 16 of file NeonConstantWorkload.hpp.

Constructor & Destructor Documentation

◆ NeonConstantWorkload()

NeonConstantWorkload ( const ConstantQueueDescriptor descriptor,
const WorkloadInfo info 
)

Definition at line 48 of file NeonConstantWorkload.cpp.

50  : NeonBaseWorkload<ConstantQueueDescriptor>(descriptor, info)
51  , m_RanOnce(false)
52 {
53 }

References armnn::info.

Member Function Documentation

◆ Execute()

void Execute ( ) const
overridevirtual

Implements IWorkload.

Definition at line 55 of file NeonConstantWorkload.cpp.

56 {
57  ARMNN_SCOPED_PROFILING_EVENT_NEON_NAME_GUID("NeonConstantWorkload_Execute");
58 
59  using namespace armcomputetensorutils;
60 
61  // The intermediate tensor held by the corresponding layer output handler can be initialised with the
62  // given data on the first inference, then reused for subsequent inferences.
63  // The initialisation cannot happen at workload construction time since the ACL kernel for the next layer
64  // may not have been configured at the time.
65  if (!m_RanOnce)
66  {
67  const ConstantQueueDescriptor& data = this->m_Data;
68 
69  ARMNN_THROW_INVALIDARG_MSG_IF_FALSE(data.m_LayerOutput, "Output tensor handle is null.");
70  arm_compute::ITensor& output =
71  PolymorphicDowncast<NeonTensorHandle*>(data.m_Outputs[0])->GetTensor();
72  arm_compute::DataType computeDataType =
73  PolymorphicDowncast<NeonTensorHandle*>(data.m_Outputs[0])->GetDataType();
74 
75  switch (computeDataType)
76  {
77  case arm_compute::DataType::BFLOAT16:
78  {
79  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<BFloat16>(), output);
80  break;
81  }
82  case arm_compute::DataType::F16:
83  {
84  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<Half>(), output);
85  break;
86  }
87  case arm_compute::DataType::F32:
88  {
89  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<float>(), output);
90  break;
91  }
92  case arm_compute::DataType::QASYMM8:
93  {
94  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<uint8_t>(), output);
95  break;
96  }
97  case arm_compute::DataType::QASYMM8_SIGNED:
98  {
99  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<int8_t>(), output);
100  break;
101  }
102  case arm_compute::DataType::QSYMM16:
103  {
104  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<int16_t>(), output);
105  break;
106  }
107  case arm_compute::DataType::QSYMM8:
108  case arm_compute::DataType::QSYMM8_PER_CHANNEL:
109  {
110  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<int8_t>(), output);
111  break;
112  }
113  case arm_compute::DataType::S32:
114  {
115  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<int32_t>(), output);
116  break;
117  }
118  case arm_compute::DataType::S64:
119  {
120  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<int64_t>(), output);
121  break;
122  }
123  default:
124  {
125  throw InvalidArgumentException("Unknown data type.");
126  }
127  }
128 
129  m_RanOnce = true;
130  }
131 }
#define ARMNN_THROW_INVALIDARG_MSG_IF_FALSE(_cond, _str)
Definition: Exceptions.hpp:210
#define ARMNN_SCOPED_PROFILING_EVENT_NEON_NAME_GUID(label)
Creates a profiling event that uses GetGuid() and GetName() from the calling class.
QueueDescriptor m_Data
Definition: Workload.hpp:74
half_float::half Half
Definition: Half.hpp:22
DataType
Definition: Types.hpp:49

References ARMNN_SCOPED_PROFILING_EVENT_NEON_NAME_GUID, ARMNN_THROW_INVALIDARG_MSG_IF_FALSE, BaseWorkload< QueueDescriptor >::m_Data, ConstantQueueDescriptor::m_LayerOutput, and QueueDescriptor::m_Outputs.


The documentation for this class was generated from the following files: