13 using namespace armnn::armcomputetensorutils;
30 for (
const auto& tensorInfo : tensorInfos)
45 for (
const auto& status : statuses)
47 if(status.error_code() != arm_compute::ErrorCode::OK)
61 const arm_compute::TensorInfo inputInfo0 = BuildArmComputeTensorInfo(input0Info);
62 const arm_compute::TensorInfo inputInfo1 = BuildArmComputeTensorInfo(input1Info);
63 const arm_compute::TensorInfo outputInfo0 = BuildArmComputeTensorInfo(outputInfo);
66 activationDescriptor);
74 const arm_compute::TensorInfo outputCast0 = BuildArmComputeTensorInfo(outputCast0_Info);
76 auto statusCast0 = arm_compute::CLCast::validate(&inputInfo0,
78 arm_compute::ConvertPolicy::WRAP);
81 const arm_compute::TensorInfo outputCast1 = BuildArmComputeTensorInfo(outputCast1_Info);
83 auto statusCast1 = arm_compute::CLCast::validate(&inputInfo1,
85 arm_compute::ConvertPolicy::WRAP);
89 const arm_compute::TensorInfo outputDivInfo = BuildArmComputeTensorInfo(outputDiv_Info);
91 auto statusDiv = arm_compute::CLArithmeticDivision::validate(&outputCast0,
97 const arm_compute::TensorInfo outputFloorInfo = BuildArmComputeTensorInfo(outputFloor_Info);
99 auto statusFloor = arm_compute::CLFloor::validate(&outputDivInfo,
102 auto statusCast2 = arm_compute::CLCast::validate(&outputFloorInfo,
104 arm_compute::ConvertPolicy::WRAP);
115 auto statusDiv = arm_compute::CLArithmeticDivision::validate(&inputInfo0,
120 auto statusFloor = arm_compute::CLFloor::validate(&outputInfo0,
129 "ClFloorDivWorkload: FloorDiv layer validation failed.");
134 const arm_compute::CLCompileContext& clCompileContext)
143 arm_compute::ICLTensor& input0 = PolymorphicDowncast<ClTensorHandle*>(
m_Data.
m_Inputs[0])->GetTensor();
144 arm_compute::ICLTensor& input1 = PolymorphicDowncast<ClTensorHandle*>(
m_Data.
m_Inputs[1])->GetTensor();
145 arm_compute::ICLTensor& output = PolymorphicDowncast<ClTensorHandle*>(
m_Data.
m_Outputs[0])->GetTensor();
151 const arm_compute::ActivationLayerInfo activationInfo =
156 if(inputDataType == arm_compute::DataType::S32 && outputDataType == arm_compute::DataType::S32)
159 m_CastLayer0.reset(
new arm_compute::CLCast());
160 m_CastLayer1.reset(
new arm_compute::CLCast());
161 m_CastLayer2.reset(
new arm_compute::CLCast());
167 BuildArmComputeTensor(m_OutputCast0, outputCast0_Info);
168 armcomputetensorutils::InitialiseArmComputeTensorEmpty(m_OutputCast0);
171 m_CastLayer0->configure(clCompileContext, &input0, &m_OutputCast0, arm_compute::ConvertPolicy::WRAP);
177 BuildArmComputeTensor(m_OutputCast1, outputCast1_Info);
178 armcomputetensorutils::InitialiseArmComputeTensorEmpty(m_OutputCast1);
181 m_CastLayer1->configure(clCompileContext, &input1, &m_OutputCast1, arm_compute::ConvertPolicy::WRAP);
185 BuildArmComputeTensor(m_OutputDiv, outputDiv_Info);
186 armcomputetensorutils::InitialiseArmComputeTensorEmpty(m_OutputDiv);
189 m_DivLayer.configure(clCompileContext, &m_OutputCast0, &m_OutputCast1, &m_OutputDiv, activationInfo);
192 BuildArmComputeTensor(m_OutputFloor, outputDiv_Info);
193 armcomputetensorutils::InitialiseArmComputeTensorEmpty(m_OutputFloor);
196 m_FloorLayer.configure(clCompileContext, &m_OutputDiv, &m_OutputFloor);
199 m_CastLayer2->configure(clCompileContext, &m_OutputFloor, &output, arm_compute::ConvertPolicy::WRAP);
204 BuildArmComputeTensor(m_OutputDiv, outputInfo);
205 armcomputetensorutils::InitialiseArmComputeTensorEmpty(m_OutputDiv);
208 m_DivLayer.configure(clCompileContext, &input0, &input1, &m_OutputDiv, activationInfo);
211 m_FloorLayer.configure(clCompileContext, &m_OutputDiv, &output);
219 if(m_CastLayer0 && m_CastLayer1)
225 m_CastLayer0.reset();
226 m_CastLayer1.reset();
235 m_CastLayer2.reset();
#define ARMNN_SCOPED_PROFILING_EVENT_CL_NAME_GUID(label)
Creates a profiling event that uses GetGuid() and GetName() from the calling class.
ClFloorDivWorkload(const DivisionQueueDescriptor &descriptor, const WorkloadInfo &info, const arm_compute::CLCompileContext &clCompileContext)
virtual void Execute() const override
void SetDataType(DataType type)
Copyright (c) 2021 ARM Limited and Contributors.
bool AreAllTensorsSigned32(const std::vector< TensorInfo > &tensorInfos)
Utility function used to check if a vector of tensors are Signed32.
bool IsValidationPassing(const std::vector< arm_compute::Status > &statuses)
Utility function used to check if statuses are returning 'OK'.
arm_compute::Status ClFloorDivWorkloadValidate(const TensorInfo &input0Info, const TensorInfo &input1Info, const TensorInfo &outputInfo, const ActivationDescriptor *activationDescriptor)
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.
void RunClFunction(arm_compute::IFunction &function, const CheckLocation &location)
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.