ArmNN
 20.08
NeonConstantWorkload Class Reference

#include <NeonConstantWorkload.hpp>

Inheritance diagram for NeonConstantWorkload:
BaseWorkload< ConstantQueueDescriptor > IWorkload

Public Member Functions

 NeonConstantWorkload (const ConstantQueueDescriptor &descriptor, const WorkloadInfo &info)
 
virtual void Execute () const override
 
- Public Member Functions inherited from BaseWorkload< ConstantQueueDescriptor >
 BaseWorkload (const ConstantQueueDescriptor &descriptor, const WorkloadInfo &info)
 
void PostAllocationConfigure () override
 
const ConstantQueueDescriptorGetData () const
 
profiling::ProfilingGuid GetGuid () const final
 
- Public Member Functions inherited from IWorkload
virtual ~IWorkload ()
 
virtual void RegisterDebugCallback (const DebugCallbackFunction &)
 

Additional Inherited Members

- Protected Attributes inherited from BaseWorkload< ConstantQueueDescriptor >
const ConstantQueueDescriptor m_Data
 
const profiling::ProfilingGuid m_Guid
 

Detailed Description

Definition at line 14 of file NeonConstantWorkload.hpp.

Constructor & Destructor Documentation

◆ NeonConstantWorkload()

NeonConstantWorkload ( const ConstantQueueDescriptor descriptor,
const WorkloadInfo info 
)

Definition at line 49 of file NeonConstantWorkload.cpp.

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

Member Function Documentation

◆ Execute()

void Execute ( ) const
overridevirtual

Implements IWorkload.

Definition at line 56 of file NeonConstantWorkload.cpp.

References ARMNN_ASSERT, ARMNN_SCOPED_PROFILING_EVENT_NEON, BaseWorkload< ConstantQueueDescriptor >::m_Data, ConstantQueueDescriptor::m_LayerOutput, and QueueDescriptor::m_Outputs.

57 {
58  ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonConstantWorkload_Execute");
59 
60  using namespace armcomputetensorutils;
61 
62  // The intermediate tensor held by the corresponding layer output handler can be initialised with the
63  // given data on the first inference, then reused for subsequent inferences.
64  // The initialisation cannot happen at workload construction time since the ACL kernel for the next layer
65  // may not have been configured at the time.
66  if (!m_RanOnce)
67  {
68  const ConstantQueueDescriptor& data = this->m_Data;
69 
70  ARMNN_ASSERT(data.m_LayerOutput != nullptr);
71  arm_compute::ITensor& output =
72  PolymorphicDowncast<NeonTensorHandle*>(data.m_Outputs[0])->GetTensor();
73  arm_compute::DataType computeDataType =
74  PolymorphicDowncast<NeonTensorHandle*>(data.m_Outputs[0])->GetDataType();
75 
76  switch (computeDataType)
77  {
78  case arm_compute::DataType::BFLOAT16:
79  {
80  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<BFloat16>(), output);
81  break;
82  }
83  case arm_compute::DataType::F16:
84  {
85  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<Half>(), output);
86  break;
87  }
88  case arm_compute::DataType::F32:
89  {
90  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<float>(), output);
91  break;
92  }
93  case arm_compute::DataType::QASYMM8:
94  {
95  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<uint8_t>(), output);
96  break;
97  }
98  case arm_compute::DataType::QASYMM8_SIGNED:
99  {
100  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<int8_t>(), output);
101  break;
102  }
103  case arm_compute::DataType::QSYMM16:
104  {
105  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<int16_t>(), output);
106  break;
107  }
108  case arm_compute::DataType::QSYMM8:
109  case arm_compute::DataType::QSYMM8_PER_CHANNEL:
110  {
111  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<int8_t>(), output);
112  break;
113  }
114  case arm_compute::DataType::S32:
115  {
116  CopyArmComputeITensorData(data.m_LayerOutput->GetConstTensor<int32_t>(), output);
117  break;
118  }
119  default:
120  {
121  ARMNN_ASSERT_MSG(false, "Unknown data type");
122  break;
123  }
124  }
125 
126  m_RanOnce = true;
127  }
128 }
const ConstantQueueDescriptor m_Data
Definition: Workload.hpp:46
#define ARMNN_SCOPED_PROFILING_EVENT_NEON(name)
DataType
Definition: Types.hpp:32
#define ARMNN_ASSERT_MSG(COND, MSG)
Definition: Assert.hpp:15
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
half_float::half Half
Definition: Half.hpp:16

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