diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/benchmark/CL/GEMMLowp.cpp | 52 | ||||
-rw-r--r-- | tests/benchmark/NEON/GEMMLowp.cpp | 28 | ||||
-rw-r--r-- | tests/benchmark/fixtures/GEMMLowpFixture.h | 66 | ||||
-rw-r--r-- | tests/datasets/LargeGEMMLowpDataset.h | 2 | ||||
-rw-r--r-- | tests/datasets/SmallGEMMLowpDataset.h | 2 |
5 files changed, 78 insertions, 72 deletions
diff --git a/tests/benchmark/CL/GEMMLowp.cpp b/tests/benchmark/CL/GEMMLowp.cpp new file mode 100644 index 0000000000..039695b18f --- /dev/null +++ b/tests/benchmark/CL/GEMMLowp.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2017 ARM Limited. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include "arm_compute/core/TensorShape.h" +#include "arm_compute/core/Types.h" +#include "arm_compute/runtime/CL/CLTensor.h" +#include "arm_compute/runtime/CL/CLTensorAllocator.h" +#include "arm_compute/runtime/CL/functions/CLGEMMLowpMatrixMultiplyCore.h" +#include "tests/CL/CLAccessor.h" +#include "tests/benchmark/fixtures/GEMMLowpFixture.h" +#include "tests/datasets/GoogleNetGEMMDataset.h" +#include "tests/datasets/MatrixMultiplyGEMMDataset.h" +#include "tests/datasets/system_tests/googlenet/inceptionv1/GoogLeNetInceptionV1GEMMDataset.h" +#include "tests/framework/Macros.h" +#include "tests/framework/datasets/Datasets.h" +#include "utils/TypePrinter.h" + +namespace arm_compute +{ +namespace test +{ +using CLGEMMLowpFixture = GEMMLowpMatrixMultiplyCoreFixture<CLTensor, CLGEMMLowpMatrixMultiplyCore, CLAccessor>; + +TEST_SUITE(CL) + +REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetInceptionV1GEMMLowp, CLGEMMLowpFixture, framework::DatasetMode::ALL, datasets::GoogLeNetInceptionV1GEMMDataset()); +REGISTER_FIXTURE_DATA_TEST_CASE(MatrixMultiplyGEMMLowp, CLGEMMLowpFixture, framework::DatasetMode::ALL, datasets::MatrixMultiplyGEMMDataset()); +REGISTER_FIXTURE_DATA_TEST_CASE(GoogleNetGEMMLowp, CLGEMMLowpFixture, framework::DatasetMode::NIGHTLY, datasets::GoogleNetGEMMDataset()); + +TEST_SUITE_END() +} // namespace test +} // namespace arm_compute diff --git a/tests/benchmark/NEON/GEMMLowp.cpp b/tests/benchmark/NEON/GEMMLowp.cpp index a0e5e694bd..e3ad1d43d2 100644 --- a/tests/benchmark/NEON/GEMMLowp.cpp +++ b/tests/benchmark/NEON/GEMMLowp.cpp @@ -23,42 +23,30 @@ */ #include "arm_compute/core/TensorShape.h" #include "arm_compute/core/Types.h" +#include "arm_compute/runtime/NEON/functions/NEGEMMLowpMatrixMultiplyCore.h" #include "arm_compute/runtime/Tensor.h" #include "arm_compute/runtime/TensorAllocator.h" #include "tests/NEON/Accessor.h" #include "tests/benchmark/fixtures/GEMMLowpFixture.h" +#include "tests/datasets/GoogleNetGEMMDataset.h" +#include "tests/datasets/MatrixMultiplyGEMMDataset.h" +#include "tests/datasets/system_tests/googlenet/inceptionv1/GoogLeNetInceptionV1GEMMDataset.h" #include "tests/framework/Macros.h" #include "tests/framework/datasets/Datasets.h" #include "utils/TypePrinter.h" -#include "arm_compute/core/NEON/kernels/NEGEMMInterleaveBlockedKernel.h" -#include "tests/NEON/Helper.h" - namespace arm_compute { namespace test { -const auto data_int_blk = framework::dataset::make("M", 800) * framework::dataset::make("N", 800) * framework::dataset::make("by", 8, 13) * framework::dataset::make("block", 4, 9); +using NEGEMMLowpFixture = GEMMLowpMatrixMultiplyCoreFixture<Tensor, NEGEMMLowpMatrixMultiplyCore, Accessor>; TEST_SUITE(NEON) -TEST_SUITE(INTERLEAVE_BLOCKED) -using NEInterleaveBlocked = NESynthetizeFunction<NEGEMMInterleaveBlockedKernel>; -using NEGEMMInterleaveBlockedFixture = GEMMInterleaveBlockedFixture<Tensor, NEInterleaveBlocked, Accessor>; -REGISTER_FIXTURE_DATA_TEST_CASE(InterleaveBlocked, NEGEMMInterleaveBlockedFixture, framework::DatasetMode::ALL, data_int_blk); -TEST_SUITE_END() - -#if 0 //FIXME: enable when we update NEGEMMLowp interface to work without offsets -TEST_SUITE(U32) -using NEGEMMLowpFixture = GEMMLowpFixture<Tensor, NEGEMMLowp, Accessor>; -REGISTER_FIXTURE_DATA_TEST_CASE(GEMMLowp, NEGEMMLowpFixture, framework::DatasetMode::ALL, framework::dataset::make("M", 100, 120) * framework::dataset::make("N", 100, - 110) - * framework::dataset::make("K", 16, 20)); +REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetInceptionV1GEMMLowp, NEGEMMLowpFixture, framework::DatasetMode::ALL, datasets::GoogLeNetInceptionV1GEMMDataset()); +REGISTER_FIXTURE_DATA_TEST_CASE(MatrixMultiplyGEMMLowp, NEGEMMLowpFixture, framework::DatasetMode::ALL, datasets::MatrixMultiplyGEMMDataset()); +REGISTER_FIXTURE_DATA_TEST_CASE(GoogleNetGEMMLowp, NEGEMMLowpFixture, framework::DatasetMode::NIGHTLY, datasets::GoogleNetGEMMDataset()); TEST_SUITE_END() -#endif // defined(__aarch64__) - -TEST_SUITE_END() - } // namespace test } // namespace arm_compute diff --git a/tests/benchmark/fixtures/GEMMLowpFixture.h b/tests/benchmark/fixtures/GEMMLowpFixture.h index b640705990..4bd7dfd42f 100644 --- a/tests/benchmark/fixtures/GEMMLowpFixture.h +++ b/tests/benchmark/fixtures/GEMMLowpFixture.h @@ -21,8 +21,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef ARM_COMPUTE_TEST_GEMMFIXTURE -#define ARM_COMPUTE_TEST_GEMMFIXTURE +#ifndef ARM_COMPUTE_TEST_GEMMLOWPFIXTURE +#define ARM_COMPUTE_TEST_GEMMLOWPFIXTURE #include "arm_compute/core/TensorShape.h" #include "arm_compute/core/Types.h" @@ -34,59 +34,26 @@ namespace arm_compute { namespace test { -template <typename TensorType, typename Function, typename Accessor, bool Transposed = false> -class GEMMInterleaveBlockedFixture : public framework::Fixture -{ -public: - template <typename...> - void setup(size_t x, size_t y, int int_by, int block) - { - const float interleave_by_f32 = int_by; - const TensorShape shape_a(x, y); - const TensorShape shape_b(static_cast<size_t>(x * interleave_by_f32), static_cast<size_t>(std::ceil(y / interleave_by_f32))); - // Create tensors - a = create_tensor<TensorType>(shape_a, DataType::U8, 1); - b = create_tensor<TensorType>(shape_b, DataType::U8, 1); - - // Create and configure function - f.configure(&a, &b, int_by, block, Transposed); - - // Allocate tensors - a.allocator()->allocate(); - b.allocator()->allocate(); - } - void run() - { - f.run(); - } - - void teardown() - { - a.allocator()->free(); - b.allocator()->free(); - } - -private: - TensorType a{}; - TensorType b{}; - Function f{}; -}; - /** Fixture that can be used for NEON and CL */ template <typename TensorType, typename Function, typename Accessor> -class GEMMLowpFixture : public framework::Fixture +class GEMMLowpMatrixMultiplyCoreFixture : public framework::Fixture { public: template <typename...> - void setup(size_t m, size_t n, size_t k) + void setup(TensorShape shape_a, TensorShape shape_b, TensorShape shape_c, TensorShape shape_dst, float alpha, float beta) { - const TensorShape shape_a(k, m); - const TensorShape shape_b(n, k); - const TensorShape shape_c(n, m); + // TODO (COMPMID-717): The interface used for GEMMLowp is the same one used for GEMM in order to re-use the datasets + // However the interface for both GEMM and GEMMLowp should be reworked in order to accepts only the 3 dimensions M, N and K + ARM_COMPUTE_UNUSED(shape_c); + ARM_COMPUTE_UNUSED(alpha); + ARM_COMPUTE_UNUSED(beta); + + // Note: The offsets for matrix A and matrix B are set to 0 in order to skip the computation for the offset contribution + // Create tensors - a = create_tensor<TensorType>(shape_a, DataType::U8, 1); - b = create_tensor<TensorType>(shape_b, DataType::U8, 1); - c = create_tensor<TensorType>(shape_c, DataType::U32, 1); + a = create_tensor<TensorType>(shape_a, DataType::QASYMM8, 1, 0, QuantizationInfo(1.0f / 255.0f, 0)); + b = create_tensor<TensorType>(shape_b, DataType::QASYMM8, 1, 0, QuantizationInfo(1.0f / 255.0f, 0)); + c = create_tensor<TensorType>(shape_dst, DataType::S32, 1, 0, QuantizationInfo(1.0f / 255.0f, 0)); // Create and configure function gemmlowp.configure(&a, &b, &c); @@ -99,7 +66,6 @@ public: // Fill tensors library->fill_tensor_uniform(Accessor(a), 0); library->fill_tensor_uniform(Accessor(b), 1); - library->fill_tensor_uniform(Accessor(c), 2); } void run() { @@ -122,4 +88,4 @@ private: } // namespace test } // namespace arm_compute -#endif /* ARM_COMPUTE_TEST_GEMMFIXTURE */ +#endif /* ARM_COMPUTE_TEST_GEMMLOWPFIXTURE */ diff --git a/tests/datasets/LargeGEMMLowpDataset.h b/tests/datasets/LargeGEMMLowpDataset.h index 87f879e70a..5c0230e262 100644 --- a/tests/datasets/LargeGEMMLowpDataset.h +++ b/tests/datasets/LargeGEMMLowpDataset.h @@ -42,7 +42,7 @@ class LargeGEMMLowpDataset final : public GEMMLowpDataset public: LargeGEMMLowpDataset() { - add_config(TensorShape(923U, 2U), TensorShape(871U, 923U), TensorShape(871U, 2U), 0, 0); + add_config(TensorShape(923U, 1U), TensorShape(871U, 923U), TensorShape(871U, 1U), 0, 0); add_config(TensorShape(923U, 429U), TensorShape(871U, 923U), TensorShape(871U, 429U), 0, 0); add_config(TensorShape(873U, 7U), TensorShape(784U, 873U), TensorShape(784U, 7U), -1, 3); add_config(TensorShape(873U, 513U), TensorShape(784U, 873U), TensorShape(784U, 513U), 0, 4); diff --git a/tests/datasets/SmallGEMMLowpDataset.h b/tests/datasets/SmallGEMMLowpDataset.h index 1d4ab53be5..b6651bdb42 100644 --- a/tests/datasets/SmallGEMMLowpDataset.h +++ b/tests/datasets/SmallGEMMLowpDataset.h @@ -42,7 +42,7 @@ class SmallGEMMLowpDataset final : public GEMMLowpDataset public: SmallGEMMLowpDataset() { - add_config(TensorShape(21U, 2U), TensorShape(43U, 21U), TensorShape(43U, 2U), 0, 0); + add_config(TensorShape(21U, 1U), TensorShape(43U, 21U), TensorShape(43U, 1U), 0, 0); add_config(TensorShape(21U, 13U), TensorShape(33U, 21U), TensorShape(33U, 13U), 0, 0); add_config(TensorShape(31U, 3U), TensorShape(72U, 31U), TensorShape(72U, 3U), -2, 13); add_config(TensorShape(52U, 13U), TensorShape(33U, 52U), TensorShape(33U, 13U), 0, 4); |