From 2ad0a6be5b9d14fa30e92f548fa6a97fd9061aa1 Mon Sep 17 00:00:00 2001 From: Gunes Bayir Date: Tue, 19 Sep 2023 15:37:38 +0100 Subject: Implement Quantized Matmul Nt/T kernel using MMUL extension Resolves: COMPMID-6474 Change-Id: Iaff5b512cf77975f2df02dcdf848711b13bf97a6 Signed-off-by: Gunes Bayir Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/10341 Reviewed-by: Mohmun02 Reviewed-by: Viet-Hoa Do Comments-Addressed: Arm Jenkins Benchmark: Arm Jenkins Tested-by: Arm Jenkins --- tests/validation/CL/MatMulLowpNativeMMULKernel.cpp | 28 +++++++++++++--------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'tests') diff --git a/tests/validation/CL/MatMulLowpNativeMMULKernel.cpp b/tests/validation/CL/MatMulLowpNativeMMULKernel.cpp index a361a5af16..561c455a00 100644 --- a/tests/validation/CL/MatMulLowpNativeMMULKernel.cpp +++ b/tests/validation/CL/MatMulLowpNativeMMULKernel.cpp @@ -76,15 +76,21 @@ TEST_CASE(SupportedKernelConfigurations, framework::DatasetMode::ALL) const std::vector supported_block_sizes = { // MatMulKernelInfo(adj_lhs, adj_rhs, M0, N0, K0, export_rhs_to_cl_image = false) - // Lhs not-transposed, Rhs-not-transposed - // TODO: Test Cases + { MatMulKernelInfo(false, false, 0, 1, 4), false }, // M0 should be > 0 + { MatMulKernelInfo(false, true, 3, 5, 4), false }, // N0 not in {1, 2, 3, 4, 8, 16} + { MatMulKernelInfo(false, false, 3, 6, 4), false }, // N0 not in {1, 2, 3, 4, 8, 16} + { MatMulKernelInfo(false, false, 3, 3, 8), false }, // K0 not in 4 + { MatMulKernelInfo(false, false, 9, 1, 4), true }, + { MatMulKernelInfo(false, true, 3, 16, 4), true }, + { MatMulKernelInfo(false, false, 7, 3, 4), true }, + { MatMulKernelInfo(false, false, 7, 3, 4, true), false }, // export to CLImage is unsupported for quantized types }; // Set big enough shapes so that block sizes are not truncated. Also, set all dimensions equal // so that it doesn't fail for different NT/T configurations. We aim to test the block sizes here, // not the shapes themselves. - const TensorInfo lhs_info = TensorInfo(TensorShape(100U, 100U), 1, DataType::QASYMM8_SIGNED); - const TensorInfo rhs_info = TensorInfo(TensorShape(100U, 100U), 1, DataType::QASYMM8_SIGNED); + const TensorInfo lhs_info = TensorInfo(TensorShape(64U, 64U), 1, DataType::QASYMM8_SIGNED); + const TensorInfo rhs_info = TensorInfo(TensorShape(64U, 64U), 1, DataType::QASYMM8_SIGNED); for(auto &pair : supported_block_sizes) { @@ -211,7 +217,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, CLMatMulLowpNativeMMULKernelFixture, framework::DatasetMode::ALL, combine(datasets::SmallMatMulLowpMMULDataset(), make("TransposeA", { false }), - make("TransposeB", { false }), + make("TransposeB", { false, true }), m0_values_precommit, n0_values_precommit, make("K0", { 4 }), @@ -229,7 +235,7 @@ FIXTURE_DATA_TEST_CASE(RunWithBias, CLMatMulLowpNativeMMULKernelWithBiasFixture< framework::DatasetMode::ALL, combine(datasets::SmallMatMulLowpMMULWithBiasDataset(), make("TransposeA", { false }), - make("TransposeB", { false }), + make("TransposeB", { false, true }), m0_values_precommit, n0_values_precommit, make("K0", { 4 }), @@ -247,7 +253,7 @@ FIXTURE_DATA_TEST_CASE(RunLargeNoTranspose, CLMatMulLowpNativeMMULKernelFixture< framework::DatasetMode::NIGHTLY, combine(datasets::LargeMatMulLowpMMULDataset(), make("TransposeA", { false }), - make("TransposeB", { false }), + make("TransposeB", { false, true }), m0_values_nightly_lhs_nt, n0_values_nightly_rhs_nt, make("K0", { 4 }), @@ -267,7 +273,7 @@ FIXTURE_DATA_TEST_CASE(RunHighDimensional, CLMatMulLowpNativeMMULKernelFixture, framework::DatasetMode::ALL, combine(datasets::SmallMatMulLowpMMULDatasetSubset(), make("TransposeA", { false }), - make("TransposeB", { false }), + make("TransposeB", { false, true }), m0_values_precommit, n0_values_precommit, make("K0", { 4 }), @@ -307,7 +313,7 @@ FIXTURE_DATA_TEST_CASE(RunWithBias, CLMatMulLowpNativeMMULKernelWithBiasFixture< framework::DatasetMode::ALL, combine(datasets::SmallMatMulLowpMMULWithBiasDataset(), make("TransposeA", { false }), - make("TransposeB", { false }), + make("TransposeB", { false, true }), m0_values_precommit, n0_values_precommit, make("K0", { 4 }), @@ -325,7 +331,7 @@ FIXTURE_DATA_TEST_CASE(RunLargeNoTranspose, CLMatMulLowpNativeMMULKernelFixture< framework::DatasetMode::NIGHTLY, combine(datasets::LargeMatMulLowpMMULDataset(), make("TransposeA", { false }), - make("TransposeB", { false }), + make("TransposeB", { false, true }), m0_values_nightly_lhs_nt, n0_values_nightly_rhs_nt, make("K0", { 4 }), -- cgit v1.2.1