19 TensorInfo newTensorInfo(tensorInfo);
27 for (
const auto& tensorInfo : tensorInfos)
42 for (
const auto& status : statuses)
44 if(status.error_code() != arm_compute::ErrorCode::OK)
58 const arm_compute::TensorInfo inputInfo0 = BuildArmComputeTensorInfo(input0Info);
59 const arm_compute::TensorInfo inputInfo1 = BuildArmComputeTensorInfo(input1Info);
60 const arm_compute::TensorInfo outputInfo0 = BuildArmComputeTensorInfo(outputInfo);
63 activationDescriptor);
71 const arm_compute::TensorInfo outputCast0 = BuildArmComputeTensorInfo(outputCast0_Info);
73 auto statusCast0 = arm_compute::NECast::validate(&inputInfo0,
75 arm_compute::ConvertPolicy::WRAP);
78 const arm_compute::TensorInfo outputCast1 = BuildArmComputeTensorInfo(outputCast1_Info);
80 auto statusCast1 = arm_compute::NECast::validate(&inputInfo1,
82 arm_compute::ConvertPolicy::WRAP);
86 const arm_compute::TensorInfo outputDivInfo = BuildArmComputeTensorInfo(outputDiv_Info);
88 auto statusDiv = arm_compute::NEElementwiseDivision::validate(&outputCast0,
94 const arm_compute::TensorInfo outputFloorInfo = BuildArmComputeTensorInfo(outputFloor_Info);
96 auto statusFloor = arm_compute::NEFloor::validate(&outputDivInfo,
99 auto statusCast2 = arm_compute::NECast::validate(&outputFloorInfo,
101 arm_compute::ConvertPolicy::WRAP);
112 auto statusDiv = arm_compute::NEElementwiseDivision::validate(&inputInfo0,
117 auto statusFloor = arm_compute::NEFloor::validate(&outputInfo0,
126 "NeonFloorDivValidation: FloorDiv layer validation failed.");
139 arm_compute::ITensor& input0 = PolymorphicDowncast<IAclTensorHandle*>(
m_Data.
m_Inputs[0])->GetTensor();
140 arm_compute::ITensor& input1 = PolymorphicDowncast<IAclTensorHandle*>(
m_Data.
m_Inputs[1])->GetTensor();
141 arm_compute::ITensor& output = PolymorphicDowncast<IAclTensorHandle*>(
m_Data.
m_Outputs[0])->GetTensor();
147 const arm_compute::ActivationLayerInfo activationInfo =
152 if(inputDataType == arm_compute::DataType::S32 && outputDataType == arm_compute::DataType::S32)
155 m_CastLayer0.reset(
new arm_compute::NECast());
156 m_CastLayer1.reset(
new arm_compute::NECast());
157 m_CastLayer2.reset(
new arm_compute::NECast());
163 BuildArmComputeTensor(m_OutputCast0, outputCast0_Info);
164 armcomputetensorutils::InitialiseArmComputeTensorEmpty(m_OutputCast0);
167 m_CastLayer0->configure(&input0, &m_OutputCast0, arm_compute::ConvertPolicy::WRAP);
173 BuildArmComputeTensor(m_OutputCast1, outputCast1_Info);
174 armcomputetensorutils::InitialiseArmComputeTensorEmpty(m_OutputCast1);
177 m_CastLayer1->configure(&input1, &m_OutputCast1, arm_compute::ConvertPolicy::WRAP);
181 BuildArmComputeTensor(m_OutputDiv, outputDiv_Info);
182 armcomputetensorutils::InitialiseArmComputeTensorEmpty(m_OutputDiv);
185 m_DivLayer.configure(&m_OutputCast0, &m_OutputCast1, &m_OutputDiv, activationInfo);
188 BuildArmComputeTensor(m_OutputFloor, outputDiv_Info);
189 armcomputetensorutils::InitialiseArmComputeTensorEmpty(m_OutputFloor);
192 m_FloorLayer.configure(&m_OutputDiv, &m_OutputFloor);
195 m_CastLayer2->configure(&m_OutputFloor, &output, arm_compute::ConvertPolicy::WRAP);
200 BuildArmComputeTensor(m_OutputDiv, outputInfo);
201 armcomputetensorutils::InitialiseArmComputeTensorEmpty(m_OutputDiv);
204 m_DivLayer.configure(&input0, &input1, &m_OutputDiv, activationInfo);
207 m_FloorLayer.configure(&m_OutputDiv, &output);
215 if(m_CastLayer0 && m_CastLayer1)
221 m_CastLayer0.reset();
222 m_CastLayer1.reset();
231 m_CastLayer2.reset();
#define ARMNN_SCOPED_PROFILING_EVENT_NEON_NAME_GUID(label)
Creates a profiling event that uses GetGuid() and GetName() from the calling class.
NeonFloorDivWorkload(const DivisionQueueDescriptor &descriptor, const WorkloadInfo &info)
virtual void Execute() const override
Copyright (c) 2021 ARM Limited and Contributors.
arm_compute::Status NeonFloorDivWorkloadValidate(const TensorInfo &input0Info, const TensorInfo &input1Info, const TensorInfo &outputInfo, const ActivationDescriptor *activationDescriptor)
Validation for the Floor Div Workload.
bool IsValidationPassing(const std::vector< arm_compute::Status > &statuses)
Utility function used to check if statuses are returning 'OK'.
bool IsAllTensorsSigned32(const std::vector< TensorInfo > &tensorInfos)
Utility function used to check if a vector of tensors are Signed32.
arm_compute::ActivationLayerInfo ConvertAdditionalInfoToAclActivationLayerInfo(const QueueDescriptor &queueDescriptor)
arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &actDesc)
TensorInfo ConvertTensorToFloat32(const TensorInfo &tensorInfo)
Utility function used for the two cast layer inputs to convert the output layer tensor types.
An ActivationDescriptor for the ActivationLayer.
std::vector< ITensorHandle * > m_Inputs
std::vector< ITensorHandle * > m_Outputs
void ValidateInputsOutputs(const std::string &descName, unsigned int numExpectedIn, unsigned int numExpectedOut) const
Contains information about TensorInfos of a layer.