From f30f7d32b22020f80b21da7b008d8302cee9d395 Mon Sep 17 00:00:00 2001 From: Derek Lamberti Date: Tue, 9 Apr 2019 10:25:02 +0100 Subject: IVGCVSW-2946 RefElementwiseWorkload configures prior to first execute + Added PostAllocationConfigure() method to workload interface + Elementwise function now deduces types based on Functor - Replaced RefComparisonWorkload with RefElementwiseWorkload specialization + Fixed up unit tests and minor formatting Change-Id: I33d08797767bba01cf4efb2904920ce0f950a4fe Signed-off-by: Derek Lamberti --- src/backends/backendsCommon/Workload.hpp | 3 + src/backends/backendsCommon/test/LayerTests.cpp | 99 +++++++++++++++++-------- 2 files changed, 73 insertions(+), 29 deletions(-) (limited to 'src/backends/backendsCommon') diff --git a/src/backends/backendsCommon/Workload.hpp b/src/backends/backendsCommon/Workload.hpp index 447ec1b4d6..3efd7dbfd4 100644 --- a/src/backends/backendsCommon/Workload.hpp +++ b/src/backends/backendsCommon/Workload.hpp @@ -20,6 +20,7 @@ class IWorkload public: virtual ~IWorkload() {} + virtual void PostAllocationConfigure() = 0; virtual void Execute() const = 0; virtual void RegisterDebugCallback(const DebugCallbackFunction& func) {} @@ -44,6 +45,8 @@ public: m_Data.Validate(info); } + void PostAllocationConfigure() override {} + const QueueDescriptor& GetData() const { return m_Data; } protected: diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp index 74f3997133..cba4d3d93a 100644 --- a/src/backends/backendsCommon/test/LayerTests.cpp +++ b/src/backends/backendsCommon/test/LayerTests.cpp @@ -1177,6 +1177,7 @@ LayerTestResult MergerTest( CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get()); @@ -1268,6 +1269,7 @@ LayerTestResult AdditionTest( CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -1346,6 +1348,7 @@ LayerTestResult AdditionBroadcastTestImpl( CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -1419,6 +1422,7 @@ LayerTestResult AdditionBroadcast1ElementTestImpl( CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -1533,7 +1537,9 @@ LayerTestResult CompareAdditionTest( CopyDataToITensorHandle(inputHandle1Ref.get(), &input1[0][0][0][0]); CopyDataToITensorHandle(inputHandle2Ref.get(), &input2[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); + workloadRef->PostAllocationConfigure(); workloadRef->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -1598,6 +1604,7 @@ LayerTestResult DivisionTestHelper( CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -1952,6 +1959,7 @@ LayerTestResult ElementwiseTestHelper( CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); + workload->PostAllocationConfigure(); ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -2770,6 +2778,7 @@ LayerTestResult MultiplicationTestHelper( CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -2923,9 +2932,10 @@ LayerTestResult CompareMultiplicationTest( CopyDataToITensorHandle(inputHandle0Ref.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1Ref.get(), &input1[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); + workloadRef->PostAllocationConfigure(); workloadRef->Execute(); - CopyDataFromITensorHandle(&comparisonResult.output[0][0][0][0], outputHandle.get()); CopyDataFromITensorHandle(&comparisonResult.outputExpected[0][0][0][0], outputHandleRef.get()); @@ -3004,7 +3014,9 @@ LayerTestResult CompareBatchNormTest( CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); + workloadRef->PostAllocationConfigure(); workloadRef->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -3049,6 +3061,7 @@ void PermuteTensorData( CopyDataToITensorHandle(inputHandle.get(), inputData); + workload->PostAllocationConfigure(); workload->Execute(); outputData.resize(outputTensorInfo.GetNumElements()); @@ -3381,6 +3394,7 @@ void Concatenate( ++nextInputId; } + workload->PostAllocationConfigure(); workload->Execute(); if (needPermuteForConcat) @@ -5002,6 +5016,7 @@ LayerTestResult ResizeBilinearNopTest( outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5071,6 +5086,7 @@ LayerTestResult SimpleResizeBilinearTest( outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5140,6 +5156,7 @@ LayerTestResult ResizeBilinearSqMinTest( outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5207,6 +5224,7 @@ LayerTestResult ResizeBilinearMinTest( outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5276,6 +5294,7 @@ LayerTestResult ResizeBilinearMagTest( outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5326,6 +5345,7 @@ LayerTestResult FakeQuantizationTest( CopyDataToITensorHandle(inputHandle.get(), &input[0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get()); @@ -5392,6 +5412,7 @@ LayerTestResult L2NormalizationTestImpl( CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]); + workload->PostAllocationConfigure(); ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5415,13 +5436,13 @@ LayerTestResult Pad2dTestCommon( float qScale, int32_t qOffset) { - const armnn::TensorShape inputShape{ 3, 3 }; - const armnn::TensorShape outputShape{ 7, 7 }; + const armnn::TensorShape inputShape{ 3, 3 }; + const armnn::TensorShape outputShape{ 7, 7 }; - const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType); - const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType); + const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType); + const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType); - std::vector inputValues( + std::vector inputValues( QuantizedVector(qScale, qOffset, { // Height (3) x Width (3) @@ -5430,8 +5451,8 @@ LayerTestResult Pad2dTestCommon( 3, 2, 4 })); - std::vector expectedOutputValues( - QuantizedVector(qScale, qOffset, + std::vector expectedOutputValues( + QuantizedVector(qScale, qOffset, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5442,38 +5463,39 @@ LayerTestResult Pad2dTestCommon( 0, 0, 0, 0, 0, 0, 0 })); - auto inputTensor = MakeTensor(inputTensorInfo, std::vector(inputValues)); + auto inputTensor = MakeTensor(inputTensorInfo, std::vector(inputValues)); - LayerTestResult result(outputTensorInfo); - result.outputExpected = MakeTensor(outputTensorInfo, std::vector(expectedOutputValues)); + LayerTestResult result(outputTensorInfo); + result.outputExpected = MakeTensor(outputTensorInfo, std::vector(expectedOutputValues)); - std::unique_ptr inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo); - std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); + std::unique_ptr inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo); + std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); - armnn::PadQueueDescriptor descriptor; + armnn::PadQueueDescriptor descriptor; - std::vector> PadList; - PadList.push_back(std::pair(2,2)); - PadList.push_back(std::pair(2,2)); + std::vector> PadList; + PadList.push_back(std::pair(2,2)); + PadList.push_back(std::pair(2,2)); - descriptor.m_Parameters.m_PadList = PadList; - armnn::WorkloadInfo info; + descriptor.m_Parameters.m_PadList = PadList; + armnn::WorkloadInfo info; - AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get()); - AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get()); + AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get()); + AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get()); - std::unique_ptr workload = workloadFactory.CreatePad(descriptor, info); + std::unique_ptr workload = workloadFactory.CreatePad(descriptor, info); - inputHandle->Allocate(); - outputHandle->Allocate(); + inputHandle->Allocate(); + outputHandle->Allocate(); - CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]); + CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]); - workload->Execute(); + workload->PostAllocationConfigure(); + workload->Execute(); - CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get()); + CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get()); - return result; + return result; } template> @@ -5553,6 +5575,7 @@ LayerTestResult Pad3dTestCommon( CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get()); @@ -5790,6 +5813,7 @@ LayerTestResult Pad4dTestCommon( CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -6251,6 +6275,7 @@ LayerTestResult ConstantTestImpl( outputHandle->Allocate(); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -6406,6 +6431,7 @@ LayerTestResult MergerUint8DifferentQParamsTest( CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get()); @@ -6541,6 +6567,7 @@ LayerTestResult MergerUint8Test( CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get()); @@ -6610,6 +6637,7 @@ LayerTestResult AdditionQuantizeTestHelper( CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -6739,6 +6767,7 @@ LayerTestResult MultiplicationQuantizeTestHelper( CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -7034,6 +7063,7 @@ LayerTestResult SubtractionTestHelper( CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -7252,6 +7282,7 @@ LayerTestResult ResizeBilinearNopUint8Test( outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -7311,6 +7342,7 @@ LayerTestResult SimpleResizeBilinearUint8Test( outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -7368,6 +7400,7 @@ LayerTestResult ResizeBilinearSqMinUint8Test( outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -7423,6 +7456,7 @@ LayerTestResult ResizeBilinearMinUint8Test( CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -7480,6 +7514,7 @@ LayerTestResult ResizeBilinearMagUint8Test( outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -7516,6 +7551,7 @@ LayerTestResult Rsqrt2dTestCommon( CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get()); @@ -7593,6 +7629,7 @@ LayerTestResult Rsqrt3dTest( CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get()); @@ -8384,6 +8421,7 @@ LayerTestResult MeanTestHelper( CopyDataToITensorHandle(inputHandle.get(), input.origin()); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(result.output.origin(), outputHandle.get()); @@ -8660,7 +8698,9 @@ LayerTestResult AdditionAfterMaxPoolTest( CopyDataToITensorHandle(poolingOutputHandle.get(), &resultMaxPool[0][0][0][0]); CopyDataToITensorHandle(addInputHandle.get(), &addInput[0][0][0][0]); + workload->PostAllocationConfigure(); workload->Execute(); + addWorkload->PostAllocationConfigure(); addWorkload->Execute(); CopyDataFromITensorHandle(&addRet.output[0][0][0][0], addOutputHandle.get()); @@ -8795,7 +8835,7 @@ LayerTestResult BatchToSpaceNdHelper( const std::vector &outputData, float scale = 1.0f, int32_t offset = 0) - { +{ auto dataType = (std::is_same::value ? armnn::DataType::QuantisedAsymm8 : armnn::DataType::Float32); armnn::TensorInfo inputTensorInfo(InputDim, inputShape, dataType); @@ -8830,6 +8870,7 @@ LayerTestResult BatchToSpaceNdHelper( CopyDataToITensorHandle(inputHandle.get(), input.origin()); + workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); -- cgit v1.2.1