// // Copyright © 2019 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include #include #include #include #include #include #include #include #include #include #include #include std::unique_ptr CreateWorkload( const armnn::IWorkloadFactory& workloadFactory, const armnn::WorkloadInfo& info, const armnn::ElementwiseUnaryQueueDescriptor& descriptor); template > LayerTestResult ElementwiseUnaryTestHelper( armnn::IWorkloadFactory & workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager, armnn::UnaryOperation op, const unsigned int shape[NumDims], std::vector values, float quantScale, int quantOffset, const unsigned int outShape[NumDims], std::vector outValues, const armnn::ITensorHandleFactory& tensorHandleFactory, float outQuantScale, int outQuantOffset) { armnn::TensorInfo inputTensorInfo{NumDims, shape, ArmnnType}; armnn::TensorInfo outputTensorInfo{NumDims, outShape, ArmnnType}; inputTensorInfo.SetQuantizationScale(quantScale); inputTensorInfo.SetQuantizationOffset(quantOffset); outputTensorInfo.SetQuantizationScale(outQuantScale); outputTensorInfo.SetQuantizationOffset(outQuantOffset); std::vector input = ConvertToDataType(values, inputTensorInfo); std::vector expectedOutput = ConvertToDataType(outValues, inputTensorInfo); std::vector actualOutput(outputTensorInfo.GetNumElements()); std::unique_ptr inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo); armnn::ElementwiseUnaryDescriptor desc(op); armnn::ElementwiseUnaryQueueDescriptor qDesc; qDesc.m_Parameters = desc; armnn::WorkloadInfo info; AddInputToWorkload(qDesc, info, inputTensorInfo, inputHandle.get()); AddOutputToWorkload(qDesc, info, outputTensorInfo, outputHandle.get()); auto workload = CreateWorkload(workloadFactory, info, qDesc); inputHandle->Allocate(); outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), input.data()); workload->PostAllocationConfigure(); ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get()); return LayerTestResult(actualOutput, expectedOutput, outputHandle->GetShape(), outputTensorInfo.GetShape()); } template > LayerTestResult ElementwiseUnaryTestHelper( armnn::IWorkloadFactory & workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager, armnn::UnaryOperation op, const unsigned int shape[NumDims], std::vector values, const unsigned int outShape[NumDims], std::vector outValues, const armnn::ITensorHandleFactory& tensorHandleFactory, float quantScale = 1.0f, int quantOffset = 0) { return ElementwiseUnaryTestHelper( workloadFactory, memoryManager, op, shape, values, quantScale, quantOffset, outShape, outValues, tensorHandleFactory, quantScale, quantOffset); }