diff options
author | Kevin May <kevin.may@arm.com> | 2020-04-29 17:05:05 +0100 |
---|---|---|
committer | Kevin May <kevin.may@arm.com> | 2020-04-30 09:34:07 +0000 |
commit | be7e35c5994c379e165fb1b7053301afb5d52e04 (patch) | |
tree | 1f3c03d905b86f02e8001a521254a49ab5542661 /src | |
parent | 366d72306fb62e2cf5ebd7595e9692c667374566 (diff) | |
download | armnn-be7e35c5994c379e165fb1b7053301afb5d52e04.tar.gz |
IVGCVSW-4749 Fix CpuAcc Hal 1.3 FullyConnected Failures
* Use make_unique instead of MakeWorkloadHelper for FullyConnected Workload
* Add Neon Workload Tests for QAsymmU8 and QAsymmS8
Signed-off-by: Kevin May <kevin.may@arm.com>
Change-Id: Ie1359af8b0a0bec1e058e20fc789c2520ebe64e8
Diffstat (limited to 'src')
-rw-r--r-- | src/backends/neon/NeonWorkloadFactory.cpp | 3 | ||||
-rw-r--r-- | src/backends/neon/test/NeonCreateWorkloadTests.cpp | 18 |
2 files changed, 17 insertions, 4 deletions
diff --git a/src/backends/neon/NeonWorkloadFactory.cpp b/src/backends/neon/NeonWorkloadFactory.cpp index 237808c26e..56ee9a7cd8 100644 --- a/src/backends/neon/NeonWorkloadFactory.cpp +++ b/src/backends/neon/NeonWorkloadFactory.cpp @@ -274,8 +274,7 @@ std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateFloor(const FloorQueueDesc std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateFullyConnected( const FullyConnectedQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkloadHelper<NeonFullyConnectedWorkload, NeonFullyConnectedWorkload>( - descriptor, info, m_MemoryManager->GetIntraLayerManager()); + return std::make_unique<NeonFullyConnectedWorkload>(descriptor, info, m_MemoryManager->GetIntraLayerManager()); } std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateGather(const armnn::GatherQueueDescriptor& descriptor, diff --git a/src/backends/neon/test/NeonCreateWorkloadTests.cpp b/src/backends/neon/test/NeonCreateWorkloadTests.cpp index 447bad155f..a89602db7f 100644 --- a/src/backends/neon/test/NeonCreateWorkloadTests.cpp +++ b/src/backends/neon/test/NeonCreateWorkloadTests.cpp @@ -325,8 +325,12 @@ static void NeonCreateFullyConnectedWorkloadTest() FullyConnectedQueueDescriptor queueDescriptor = workload->GetData(); auto inputHandle = PolymorphicDowncast<IAclTensorHandle*>(queueDescriptor.m_Inputs[0]); auto outputHandle = PolymorphicDowncast<IAclTensorHandle*>(queueDescriptor.m_Outputs[0]); - BOOST_TEST(TestNeonTensorHandleInfo(inputHandle, TensorInfo({3, 1, 4, 5}, DataType))); - BOOST_TEST(TestNeonTensorHandleInfo(outputHandle, TensorInfo({3, 7}, DataType))); + + // Checks that outputs and inputs are as we expect them (see definition of CreateFullyConnectedWorkloadTest). + float inputsQScale = DataType == armnn::DataType::QAsymmU8 ? 1.0f : 0.0; + float outputQScale = DataType == armnn::DataType::QAsymmU8 ? 2.0f : 0.0; + BOOST_TEST(TestNeonTensorHandleInfo(inputHandle, TensorInfo({3, 1, 4, 5}, DataType, inputsQScale))); + BOOST_TEST(TestNeonTensorHandleInfo(outputHandle, TensorInfo({3, 7}, DataType, outputQScale))); } #ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC @@ -341,6 +345,16 @@ BOOST_AUTO_TEST_CASE(CreateFullyConnectedFloatWorkload) NeonCreateFullyConnectedWorkloadTest<NeonFullyConnectedWorkload, DataType::Float32>(); } +BOOST_AUTO_TEST_CASE(CreateFullyConnectedQAsymmU8Workload) +{ + NeonCreateFullyConnectedWorkloadTest<NeonFullyConnectedWorkload, DataType::QAsymmU8>(); +} + +BOOST_AUTO_TEST_CASE(CreateFullyConnectedQAsymmS8Workload) +{ + NeonCreateFullyConnectedWorkloadTest<NeonFullyConnectedWorkload, DataType::QAsymmS8>(); +} + template <typename NormalizationWorkloadType, typename armnn::DataType DataType> static void NeonCreateNormalizationWorkloadTest(DataLayout dataLayout) { |