diff options
author | Gian Marco Iodice <gianmarco.iodice@arm.com> | 2020-09-03 13:20:34 +0100 |
---|---|---|
committer | Gian Marco Iodice <gianmarco.iodice@arm.com> | 2020-09-03 17:54:45 +0000 |
commit | feaea101da17b383fe85440b0820132d0e0fa97d (patch) | |
tree | 0bcbe39636efe56ba7b0799e39f2880a2b09ba45 /tests/validation/NEON | |
parent | ec4dee8c68a3d0f6d63db184bfb2f4589429778e (diff) | |
download | ComputeLibrary-feaea101da17b383fe85440b0820132d0e0fa97d.tar.gz |
COMPMID-3143: Remove padding from NEGEMMInterleave4x4Kernel
- Remove padding from NEGEMMInterleave4x4Kernel
- Extend test for validating zero padding requirement
Change-Id: I94abc271e005f9dd6e1721b185631f55f598dbfd
Signed-off-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/3915
Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'tests/validation/NEON')
-rw-r--r-- | tests/validation/NEON/GEMM.cpp | 61 |
1 files changed, 56 insertions, 5 deletions
diff --git a/tests/validation/NEON/GEMM.cpp b/tests/validation/NEON/GEMM.cpp index f817390780..9105638a6e 100644 --- a/tests/validation/NEON/GEMM.cpp +++ b/tests/validation/NEON/GEMM.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Arm Limited. + * Copyright (c) 2017-2020 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -67,6 +67,30 @@ const auto CNNDataTypes = framework::dataset::make("DataType", const auto data_interleave = framework::dataset::make("M", 8, 12) * framework::dataset::make("N", 8, 12); const auto data_transpose = framework::dataset::make("M", 8, 14) * framework::dataset::make("N", 7, 14); +/** Zero padding test */ +bool validate_zero_padding(unsigned int m_value, unsigned int k_value) +{ + const unsigned int M = m_value; + const unsigned int K = k_value; + + const TensorShape lhs_shape(K, M); + const TensorShape lhs_shape_reshaped(K * 4, std::ceil(M / 4.0f)); + + // Create tensors + Tensor lhs = create_tensor<Tensor>(lhs_shape, DataType::U32); + Tensor dst = create_tensor<Tensor>(lhs_shape_reshaped, DataType::U32); + + ARM_COMPUTE_EXPECT(lhs.info()->is_resizable(), framework::LogLevel::ERRORS); + ARM_COMPUTE_EXPECT(dst.info()->is_resizable(), framework::LogLevel::ERRORS); + + // Validate zero-padding + NEGEMMInterleave4x4Kernel lhs_reshape; + + lhs_reshape.configure(&lhs, &dst); + + return lhs.info()->padding().empty(); +} + } // namespace TEST_SUITE(NEON) @@ -88,14 +112,41 @@ TEST_SUITE_END() // TRANSPOSE_1XW TEST_SUITE(INTERLEAVE_4X4) using NEGEMMInterleave4x4 = NESynthetizeFunctionWithZeroConstantBorder<NEGEMMInterleave4x4Kernel, 4>; -TEST_SUITE(FP32) -using NEGEMMInterleave4x4Fixture = GEMMInterleave4x4ValidationFixture<Tensor, Accessor, NEGEMMInterleave4x4, float>; -FIXTURE_DATA_TEST_CASE(RunSmall, NEGEMMInterleave4x4Fixture, framework::DatasetMode::PRECOMMIT, data_interleave * framework::dataset::make("DataType", DataType::F32)) +DATA_TEST_CASE(ValidateZeroPadding, framework::DatasetMode::ALL, zip( + framework::dataset::make("M", { 1, 23, 63, 101 }), + framework::dataset::make("K", { 1, 47, 29, 27 })), + m_value, k_value) +{ + bool status = validate_zero_padding(m_value, k_value); + ARM_COMPUTE_EXPECT(status, framework::LogLevel::ERRORS); +} + +TEST_SUITE(U32) +using NEGEMMInterleave4x4Fixture = GEMMInterleave4x4ValidationFixture<Tensor, Accessor, NEGEMMInterleave4x4, uint32_t>; +FIXTURE_DATA_TEST_CASE(RunSmall, NEGEMMInterleave4x4Fixture, framework::DatasetMode::PRECOMMIT, data_interleave * framework::dataset::make("DataType", DataType::U32)) { // Validate output validate(Accessor(_target), _reference); } -TEST_SUITE_END() // FP32 +TEST_SUITE_END() // U32 + +TEST_SUITE(U16) +using NEGEMMInterleave4x4Fixture = GEMMInterleave4x4ValidationFixture<Tensor, Accessor, NEGEMMInterleave4x4, uint16_t>; +FIXTURE_DATA_TEST_CASE(RunSmall, NEGEMMInterleave4x4Fixture, framework::DatasetMode::PRECOMMIT, data_interleave * framework::dataset::make("DataType", DataType::U16)) +{ + // Validate output + validate(Accessor(_target), _reference); +} +TEST_SUITE_END() // U16 + +TEST_SUITE(U8) +using NEGEMMInterleave4x4Fixture = GEMMInterleave4x4ValidationFixture<Tensor, Accessor, NEGEMMInterleave4x4, uint8_t>; +FIXTURE_DATA_TEST_CASE(RunSmall, NEGEMMInterleave4x4Fixture, framework::DatasetMode::PRECOMMIT, data_interleave * framework::dataset::make("DataType", DataType::QASYMM8)) +{ + // Validate output + validate(Accessor(_target), _reference); +} +TEST_SUITE_END() // U8 TEST_SUITE_END() // INTERLEAVE_4X4 |