// // Copyright © 2017 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include "QuantizeTestImpl.hpp" #include #include #include #include #include #include namespace { template LayerTestResult QuantizeTestImpl( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory, const armnn::TensorInfo& inputTensorInfo, const armnn::TensorInfo& outputTensorInfo, const std::vector& inputData, const std::vector& expectedOutputData, armnn::QuantizeQueueDescriptor descriptor) { IgnoreUnused(memoryManager); std::vector actualOutput(outputTensorInfo.GetNumElements()); std::unique_ptr inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo); armnn::WorkloadInfo info; AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get()); AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get()); std::unique_ptr workload = workloadFactory.CreateWorkload(armnn::LayerType::Quantize, descriptor, info); inputHandle->Allocate(); outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), inputData.data()); ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get()); return LayerTestResult(actualOutput, expectedOutputData, outputHandle->GetShape(), outputTensorInfo.GetShape()); } template > LayerTestResult QuantizeSimpleTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { armnn::QuantizeQueueDescriptor desc; const armnn::TensorInfo inputTensorInfo({1, 2, 2, 3}, armnn::DataType::Float32); const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, ArmnnOutputType, 0.5f, 1); std::vector inputData = std::vector( { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, }); std::vector expectedOutputData = std::vector( { 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, }); return QuantizeTestImpl(workloadFactory, memoryManager, tensorHandleFactory, inputTensorInfo, outputTensorInfo, inputData, expectedOutputData, desc); } template > LayerTestResult QuantizeClampTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { armnn::QuantizeQueueDescriptor desc; const armnn::TensorInfo inputTensorInfo({1, 1, 2, 1}, armnn::DataType::Float32); const armnn::TensorInfo outputTensorInfo({1, 1, 2, 1}, ArmnnOutputType, 0.0001f, 0); const T max = std::numeric_limits::max(); const T min = std::numeric_limits::lowest(); std::vector inputData = std::vector( { -100.0f, 100.0f }); std::vector expectedOutputData = std::vector( { min, max }); return QuantizeTestImpl(workloadFactory, memoryManager, tensorHandleFactory, inputTensorInfo, outputTensorInfo, inputData, expectedOutputData, desc); } } // anonymous namespace LayerTestResult QuantizeSimpleUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return QuantizeSimpleTest(workloadFactory, memoryManager, tensorHandleFactory); } LayerTestResult QuantizeClampUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return QuantizeClampTest(workloadFactory, memoryManager, tensorHandleFactory); } LayerTestResult QuantizeClampAsymmInt8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return QuantizeClampTest(workloadFactory, memoryManager, tensorHandleFactory); } LayerTestResult QuantizeClampInt8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return QuantizeClampTest(workloadFactory, memoryManager, tensorHandleFactory); } LayerTestResult QuantizeClampInt16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return QuantizeClampTest(workloadFactory, memoryManager, tensorHandleFactory); }