COMPMID-3239: Implement QSYMM16 LayerNormalizationKernel for CL
Use NE/CLSynthetizeFunction instead of NE/CLQLSTMLayerNormalizationValidationFixture

Signed-off-by: Sheri Zhang <sheri.zhang@arm.com>
Change-Id: I62ace213a5261f2d307da6953d0521492aa05292
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/3019
Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
diff --git a/tests/validation/CL/QLSTMLayerNormalization.cpp b/tests/validation/CL/QLSTMLayerNormalization.cpp
index ea5eca6..17f431c 100644
--- a/tests/validation/CL/QLSTMLayerNormalization.cpp
+++ b/tests/validation/CL/QLSTMLayerNormalization.cpp
@@ -23,6 +23,7 @@
  */
 #include "arm_compute/core/CL/kernels/CLQLSTMLayerNormalizationKernel.h"
 #include "tests/CL/CLAccessor.h"
+#include "tests/CL/Helper.h"
 #include "tests/PaddingCalculator.h"
 #include "tests/datasets/ShapeDatasets.h"
 #include "tests/framework/Asserts.h"
@@ -44,6 +45,7 @@
 constexpr uint32_t                   vector_size_byte = 16;
 
 using test::datasets::ShapeDataset;
+using CLQLSTMLayerNormalization = CLSynthetizeFunction<CLQLSTMLayerNormalizationKernel>;
 template <uint32_t num_elements_per_iter, uint32_t num_batches, uint32_t num_iteration>
 class QLSTMLayerNormShapeDataSet : public ShapeDataset
 {
@@ -127,7 +129,7 @@
     ), input_info, weight_info, bias_info)
 {
     TensorInfo dummy_output{};
-    const Status s = CLQLSTMLayerNormalizationKernel::validate(&input_info, &dummy_output, &weight_info, &bias_info);
+    const Status s = CLQLSTMLayerNormalization::validate(&input_info, &dummy_output, &weight_info, &bias_info);
     ARM_COMPUTE_EXPECT(!bool(s), framework::LogLevel::ERRORS);
 }
 
@@ -135,7 +137,7 @@
 // *INDENT-ON*
 
 template <typename T>
-using CLQLSTMLayerNormalizationFixture = CLQLSTMLayerNormalizationValidationFixture<CLTensor, CLAccessor, CLQLSTMLayerNormalizationKernel, T>;
+using CLQLSTMLayerNormalizationFixture = QLSTMLayerNormalizationValidationFixture<CLTensor, CLAccessor, CLQLSTMLayerNormalization, T>;
 
 TEST_SUITE(Quantized)
 TEST_SUITE(QSYMM16)
diff --git a/tests/validation/NEON/QLSTMLayerNormalization.cpp b/tests/validation/NEON/QLSTMLayerNormalization.cpp
index 248bf5c..3d71175 100644
--- a/tests/validation/NEON/QLSTMLayerNormalization.cpp
+++ b/tests/validation/NEON/QLSTMLayerNormalization.cpp
@@ -26,6 +26,7 @@
 #include "arm_compute/runtime/Tensor.h"
 #include "arm_compute/runtime/TensorAllocator.h"
 #include "tests/NEON/Accessor.h"
+#include "tests/NEON/Helper.h"
 #include "tests/PaddingCalculator.h"
 #include "tests/datasets/ShapeDatasets.h"
 #include "tests/framework/Asserts.h"
@@ -46,6 +47,8 @@
 constexpr uint32_t vector_size_byte = 16;
 
 using test::datasets::ShapeDataset;
+using NEQLSTMLayerNormalization = NESynthetizeFunction<NEQLSTMLayerNormalizationKernel>;
+
 template <uint32_t num_elements_per_iter, uint32_t num_batches, uint32_t num_iteration>
 class QLSTMLayerNormShapeDataSet : public ShapeDataset
 {
@@ -150,7 +153,7 @@
     ),
      input_info, weight_info, bias_info, output_info)
 {
-    const Status s = NEQLSTMLayerNormalizationKernel::validate(&input_info, &output_info, &weight_info, &bias_info);
+    const Status s = NEQLSTMLayerNormalization::validate(&input_info, &output_info, &weight_info, &bias_info);
     ARM_COMPUTE_EXPECT(!bool(s), framework::LogLevel::ERRORS);
 }
 
@@ -158,7 +161,7 @@
 // *INDENT-ON*
 
 template <typename T>
-using NEQLSTMLayerNormalizationFixture = NEQLSTMLayerNormalizationValidationFixture<Tensor, Accessor, NEQLSTMLayerNormalizationKernel, T>;
+using NEQLSTMLayerNormalizationFixture = QLSTMLayerNormalizationValidationFixture<Tensor, Accessor, NEQLSTMLayerNormalization, T>;
 
 TEST_SUITE(Quantized)
 TEST_SUITE(QSYMM16)
diff --git a/tests/validation/fixtures/QLSTMLayerNormalizationFixture.h b/tests/validation/fixtures/QLSTMLayerNormalizationFixture.h
index 72af9d9..cee39c2 100644
--- a/tests/validation/fixtures/QLSTMLayerNormalizationFixture.h
+++ b/tests/validation/fixtures/QLSTMLayerNormalizationFixture.h
@@ -26,10 +26,6 @@
 
 #include "arm_compute/core/TensorShape.h"
 #include "arm_compute/core/Types.h"
-#ifdef ARM_COMPUTE_CL
-#include "arm_compute/runtime/CL/CLScheduler.h"
-#endif /* ARM_COMPUTE_CL */
-#include "arm_compute/runtime/NEON/NEScheduler.h"
 #include "tests/AssetsLibrary.h"
 #include "tests/Globals.h"
 #include "tests/IAccessor.h"
@@ -101,8 +97,6 @@
         }
     }
 
-    virtual void run_target(FunctionType &fn) = 0;
-
     TensorType compute_target(const TensorShape &input_shape, const TensorShape &weight_shape, const TensorShape &bias_shape)
     {
         TensorType input  = create_tensor<TensorType>(input_shape, _data_type, 1);
@@ -114,8 +108,7 @@
         fn.configure(&input, &output, &weight, &bias);
         allocate_tensors({ &input, &weight, &bias, &output });
         fill(AccessorType(input), AccessorType(weight), AccessorType(bias));
-
-        run_target(fn);
+        fn.run();
 
         return output;
     }
@@ -138,32 +131,6 @@
     DataType         _data_type{};
     QuantizationInfo _qinfo{};
 };
-
-template <typename TensorType, typename AccessorType, typename FunctionType, typename T>
-class NEQLSTMLayerNormalizationValidationFixture : public QLSTMLayerNormalizationValidationFixture<TensorType, AccessorType, FunctionType, T>
-{
-protected:
-    void run_target(FunctionType &fn) override
-    {
-        ThreadInfo tinfo;
-        tinfo.cpu_info = &NEScheduler::get().cpu_info();
-        fn.run(fn.window(), tinfo);
-    }
-};
-
-#ifdef ARM_COMPUTE_CL
-template <typename TensorType, typename AccessorType, typename FunctionType, typename T>
-class CLQLSTMLayerNormalizationValidationFixture : public QLSTMLayerNormalizationValidationFixture<TensorType, AccessorType, FunctionType, T>
-{
-protected:
-    void run_target(FunctionType &fn) override
-    {
-        CLScheduler::get().default_init();
-        fn.run(fn.window(), CLScheduler::get().queue());
-    }
-};
-#endif /* ARM_COMPUTE_CL */
-
 } // namespace validation
 } // namespace test
 } // namespace arm_compute