COMPMID-798 Add instrumentation to NEON kernels

Change-Id: I9dbb090cac731d68bd98a7d1c8ab0e1cb0a5c911
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/116746
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Reviewed-by: Pablo Tello <pablo.tello@arm.com>
Tested-by: Anthony Barbier <anthony.barbier@arm.com>
diff --git a/arm_compute/core/CPP/ICPPKernel.h b/arm_compute/core/CPP/ICPPKernel.h
index 54717ca..17f2632 100644
--- a/arm_compute/core/CPP/ICPPKernel.h
+++ b/arm_compute/core/CPP/ICPPKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -50,6 +50,12 @@
      * @param[in] info   Info about executing thread and CPU.
      */
     virtual void run(const Window &window, const ThreadInfo &info) = 0;
+
+    /** Name of the kernel
+     *
+     * @return Kernel name
+     */
+    virtual const char *name() const = 0;
 };
 } // namespace arm_compute
 #endif /*__ARM_COMPUTE_ICPPKERNEL_H__ */
diff --git a/arm_compute/core/CPP/kernels/CPPCornerCandidatesKernel.h b/arm_compute/core/CPP/kernels/CPPCornerCandidatesKernel.h
index 580264e..b89816e 100644
--- a/arm_compute/core/CPP/kernels/CPPCornerCandidatesKernel.h
+++ b/arm_compute/core/CPP/kernels/CPPCornerCandidatesKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -40,6 +40,10 @@
 class CPPCornerCandidatesKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "CPPCornerCandidatesKernel";
+    }
     /** Default constructor */
     CPPCornerCandidatesKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/CPP/kernels/CPPDetectionWindowNonMaximaSuppressionKernel.h b/arm_compute/core/CPP/kernels/CPPDetectionWindowNonMaximaSuppressionKernel.h
index 9ca7c64..87766a7 100644
--- a/arm_compute/core/CPP/kernels/CPPDetectionWindowNonMaximaSuppressionKernel.h
+++ b/arm_compute/core/CPP/kernels/CPPDetectionWindowNonMaximaSuppressionKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -39,6 +39,10 @@
 class CPPDetectionWindowNonMaximaSuppressionKernel : public ICPPKernel
 {
 public:
+    const char *name() const override
+    {
+        return "CPPDetectionWindowNonMaximaSuppressionKernel";
+    }
     /** Default constructor */
     CPPDetectionWindowNonMaximaSuppressionKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/CPP/kernels/CPPPermuteKernel.h b/arm_compute/core/CPP/kernels/CPPPermuteKernel.h
index 0e7c938..3d6b436 100644
--- a/arm_compute/core/CPP/kernels/CPPPermuteKernel.h
+++ b/arm_compute/core/CPP/kernels/CPPPermuteKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -37,6 +37,10 @@
 class CPPPermuteKernel : public ICPPKernel
 {
 public:
+    const char *name() const override
+    {
+        return "CPPPermuteKernel";
+    }
     /** Default constructor */
     CPPPermuteKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/CPP/kernels/CPPSortEuclideanDistanceKernel.h b/arm_compute/core/CPP/kernels/CPPSortEuclideanDistanceKernel.h
index fddd425..1f16177 100644
--- a/arm_compute/core/CPP/kernels/CPPSortEuclideanDistanceKernel.h
+++ b/arm_compute/core/CPP/kernels/CPPSortEuclideanDistanceKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,6 +36,10 @@
 class CPPSortEuclideanDistanceKernel : public ICPPKernel
 {
 public:
+    const char *name() const override
+    {
+        return "CPPSortEuclideanDistanceKernel";
+    }
     /** Default constructor */
     CPPSortEuclideanDistanceKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEAbsoluteDifferenceKernel.h b/arm_compute/core/NEON/kernels/NEAbsoluteDifferenceKernel.h
index c3cbedf..a859202 100644
--- a/arm_compute/core/NEON/kernels/NEAbsoluteDifferenceKernel.h
+++ b/arm_compute/core/NEON/kernels/NEAbsoluteDifferenceKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NEAbsoluteDifferenceKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEAbsoluteDifferenceKernel";
+    }
     /** Default constructor */
     NEAbsoluteDifferenceKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEAccumulateKernel.h b/arm_compute/core/NEON/kernels/NEAccumulateKernel.h
index fa8a3be..ad5a16c 100644
--- a/arm_compute/core/NEON/kernels/NEAccumulateKernel.h
+++ b/arm_compute/core/NEON/kernels/NEAccumulateKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -40,6 +40,10 @@
 class NEAccumulateKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEAccumulateKernel";
+    }
     /** Set the input and accumulation tensors
      *
      * @param[in]  input Source tensor. Data type supported: U8.
@@ -63,6 +67,10 @@
 class NEAccumulateWeightedKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEAccumulateWeightedKernel";
+    }
     /** Default constructor */
     NEAccumulateWeightedKernel();
     /** Set the input and accumulation tensors, and the scale value
@@ -85,6 +93,10 @@
 class NEAccumulateWeightedFP16Kernel : public NEAccumulateWeightedKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEAccumulateWeightedFP16Kernel";
+    }
     // Inherited methods overridden:
     void run(const Window &window, const ThreadInfo &info) override;
 };
@@ -102,6 +114,10 @@
 class NEAccumulateSquaredKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEAccumulateSquaredKernel";
+    }
     /** Default constructor */
     NEAccumulateSquaredKernel();
     /** Set the input and accumulation tensors and the shift value.
diff --git a/arm_compute/core/NEON/kernels/NEActivationLayerKernel.h b/arm_compute/core/NEON/kernels/NEActivationLayerKernel.h
index 1edda84..d3c5382 100644
--- a/arm_compute/core/NEON/kernels/NEActivationLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEActivationLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -40,6 +40,10 @@
 class NEActivationLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEActivationLayerKernel";
+    }
     /** Constructor */
     NEActivationLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEArithmeticAdditionKernel.h b/arm_compute/core/NEON/kernels/NEArithmeticAdditionKernel.h
index b830e02..eedecfb 100644
--- a/arm_compute/core/NEON/kernels/NEArithmeticAdditionKernel.h
+++ b/arm_compute/core/NEON/kernels/NEArithmeticAdditionKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -35,6 +35,10 @@
 class NEArithmeticAdditionKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEArithmeticAdditionKernel";
+    }
     /** Default constructor */
     NEArithmeticAdditionKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEArithmeticSubtractionKernel.h b/arm_compute/core/NEON/kernels/NEArithmeticSubtractionKernel.h
index af81d39..73ecfcf 100644
--- a/arm_compute/core/NEON/kernels/NEArithmeticSubtractionKernel.h
+++ b/arm_compute/core/NEON/kernels/NEArithmeticSubtractionKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -35,6 +35,10 @@
 class NEArithmeticSubtractionKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEArithmeticSubtractionKernel";
+    }
     /** Default constructor */
     NEArithmeticSubtractionKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEBatchNormalizationLayerKernel.h b/arm_compute/core/NEON/kernels/NEBatchNormalizationLayerKernel.h
index f3c5574..f748830 100644
--- a/arm_compute/core/NEON/kernels/NEBatchNormalizationLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEBatchNormalizationLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -35,6 +35,10 @@
 class NEBatchNormalizationLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEBatchNormalizationLayerKernel";
+    }
     /** Default constructor */
     NEBatchNormalizationLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEBitwiseAndKernel.h b/arm_compute/core/NEON/kernels/NEBitwiseAndKernel.h
index 983dbd3..2c5a9e6 100644
--- a/arm_compute/core/NEON/kernels/NEBitwiseAndKernel.h
+++ b/arm_compute/core/NEON/kernels/NEBitwiseAndKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NEBitwiseAndKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEBitwiseAndKernel";
+    }
     /** Default constructor */
     NEBitwiseAndKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEBitwiseNotKernel.h b/arm_compute/core/NEON/kernels/NEBitwiseNotKernel.h
index f57d040..ddba225 100644
--- a/arm_compute/core/NEON/kernels/NEBitwiseNotKernel.h
+++ b/arm_compute/core/NEON/kernels/NEBitwiseNotKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NEBitwiseNotKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEBitwiseNotKernel";
+    }
     /** Default constructor */
     NEBitwiseNotKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEBitwiseOrKernel.h b/arm_compute/core/NEON/kernels/NEBitwiseOrKernel.h
index f405b73..0cb974a 100644
--- a/arm_compute/core/NEON/kernels/NEBitwiseOrKernel.h
+++ b/arm_compute/core/NEON/kernels/NEBitwiseOrKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NEBitwiseOrKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEBitwiseOrKernel";
+    }
     /** Default constructor */
     NEBitwiseOrKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEBitwiseXorKernel.h b/arm_compute/core/NEON/kernels/NEBitwiseXorKernel.h
index 321416e..d464e39 100644
--- a/arm_compute/core/NEON/kernels/NEBitwiseXorKernel.h
+++ b/arm_compute/core/NEON/kernels/NEBitwiseXorKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NEBitwiseXorKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEBitwiseXorKernel";
+    }
     /** Default constructor */
     NEBitwiseXorKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEBox3x3Kernel.h b/arm_compute/core/NEON/kernels/NEBox3x3Kernel.h
index 29248f6..9c13955 100644
--- a/arm_compute/core/NEON/kernels/NEBox3x3Kernel.h
+++ b/arm_compute/core/NEON/kernels/NEBox3x3Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEBox3x3Kernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEBox3x3Kernel";
+    }
     /** Set the source, destination and border mode of the kernel
      *
      * @param[in]  input            Source tensor. Data type supported: U8.
@@ -52,6 +56,10 @@
 class NEBox3x3FP16Kernel : public NEBox3x3Kernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEBox3x3FP16Kernel";
+    }
     // Inherited methods overridden:
     void run(const Window &window, const ThreadInfo &info) override;
 };
diff --git a/arm_compute/core/NEON/kernels/NECannyEdgeKernel.h b/arm_compute/core/NEON/kernels/NECannyEdgeKernel.h
index a57c389..401b9e4 100644
--- a/arm_compute/core/NEON/kernels/NECannyEdgeKernel.h
+++ b/arm_compute/core/NEON/kernels/NECannyEdgeKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,6 +36,10 @@
 class NEGradientKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGradientKernel";
+    }
     /** Default constructor */
     NEGradientKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
@@ -87,6 +91,10 @@
 class NEGradientFP16Kernel : public NEGradientKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGradientFP16Kernel";
+    }
     // Inherited methods overriden:
     void configure(const ITensor *gx, const ITensor *gy, ITensor *magnitude, ITensor *phase, int32_t norm_type) override;
 };
@@ -104,6 +112,10 @@
 class NEEdgeNonMaxSuppressionKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEEdgeNonMaxSuppressionKernel";
+    }
     /** Default constructor */
     NEEdgeNonMaxSuppressionKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
@@ -157,6 +169,10 @@
 class NEEdgeTraceKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEEdgeTraceKernel";
+    }
     /** Default constructor */
     NEEdgeTraceKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEChannelCombineKernel.h b/arm_compute/core/NEON/kernels/NEChannelCombineKernel.h
index 4ae5f80..1a88714 100644
--- a/arm_compute/core/NEON/kernels/NEChannelCombineKernel.h
+++ b/arm_compute/core/NEON/kernels/NEChannelCombineKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -39,6 +39,10 @@
 class NEChannelCombineKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEChannelCombineKernel";
+    }
     /** Default constructor */
     NEChannelCombineKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEChannelExtractKernel.h b/arm_compute/core/NEON/kernels/NEChannelExtractKernel.h
index 8c6977c..e57a3a6 100644
--- a/arm_compute/core/NEON/kernels/NEChannelExtractKernel.h
+++ b/arm_compute/core/NEON/kernels/NEChannelExtractKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -39,6 +39,10 @@
 class NEChannelExtractKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEChannelExtractKernel";
+    }
     /** Default constructor */
     NEChannelExtractKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NECol2ImKernel.h b/arm_compute/core/NEON/kernels/NECol2ImKernel.h
index 243cc77..9fb493c 100644
--- a/arm_compute/core/NEON/kernels/NECol2ImKernel.h
+++ b/arm_compute/core/NEON/kernels/NECol2ImKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -53,6 +53,10 @@
 class NECol2ImKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NECol2ImKernel";
+    }
     /** Default constructor */
     NECol2ImKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEColorConvertKernel.h b/arm_compute/core/NEON/kernels/NEColorConvertKernel.h
index 1c8799f..608172c 100644
--- a/arm_compute/core/NEON/kernels/NEColorConvertKernel.h
+++ b/arm_compute/core/NEON/kernels/NEColorConvertKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,6 +36,10 @@
 class NEColorConvertKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEColorConvertKernel";
+    }
     /** Default constructor */
     NEColorConvertKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEConvolutionKernel.h b/arm_compute/core/NEON/kernels/NEConvolutionKernel.h
index 690c17a..534e0b0 100644
--- a/arm_compute/core/NEON/kernels/NEConvolutionKernel.h
+++ b/arm_compute/core/NEON/kernels/NEConvolutionKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -55,6 +55,10 @@
 class NEConvolutionKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEConvolutionKernel";
+    }
     /** Default constructor */
     NEConvolutionKernel();
     /** Initialise the kernel's input, output and border mode.
@@ -98,6 +102,10 @@
 class NESeparableConvolutionHorKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NESeparableConvolutionHorKernel";
+    }
     /** Default constructor */
     NESeparableConvolutionHorKernel();
 
@@ -138,6 +146,10 @@
 class NESeparableConvolutionVertKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NESeparableConvolutionVertKernel";
+    }
     /** Default constructor */
     NESeparableConvolutionVertKernel();
 
@@ -200,6 +212,10 @@
 class NEConvolutionRectangleKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEConvolutionRectangleKernel";
+    }
     /** Default constructor */
     NEConvolutionRectangleKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NECumulativeDistributionKernel.h b/arm_compute/core/NEON/kernels/NECumulativeDistributionKernel.h
index e444679..ada07b1 100644
--- a/arm_compute/core/NEON/kernels/NECumulativeDistributionKernel.h
+++ b/arm_compute/core/NEON/kernels/NECumulativeDistributionKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -44,6 +44,10 @@
 class NECumulativeDistributionKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NECumulativeDistributionKernel";
+    }
     /** Default constructor */
     NECumulativeDistributionKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEDepthConcatenateLayerKernel.h b/arm_compute/core/NEON/kernels/NEDepthConcatenateLayerKernel.h
index 6029873..67ef529 100644
--- a/arm_compute/core/NEON/kernels/NEDepthConcatenateLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEDepthConcatenateLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -37,6 +37,10 @@
 class NEDepthConcatenateLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEDepthConcatenateLayerKernel";
+    }
     /** Default constructor */
     NEDepthConcatenateLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEDepthConvertLayerKernel.h b/arm_compute/core/NEON/kernels/NEDepthConvertLayerKernel.h
index af51ded..50536f2 100644
--- a/arm_compute/core/NEON/kernels/NEDepthConvertLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEDepthConvertLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -37,6 +37,10 @@
 class NEDepthConvertLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEDepthConvertLayerKernel";
+    }
     /** Default constructor*/
     NEDepthConvertLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.h b/arm_compute/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.h
index 38e2a5d..a441fb4 100644
--- a/arm_compute/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.h
+++ b/arm_compute/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.h
@@ -35,6 +35,10 @@
 class NEDepthwiseConvolutionLayer3x3Kernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEDepthwiseConvolutionLayer3x3Kernel";
+    }
     /** Default constructor */
     NEDepthwiseConvolutionLayer3x3Kernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
@@ -67,4 +71,4 @@
     unsigned int   _num_elems_written_per_iteration;
 };
 } // namespace arm_compute
-#endif /* __ARM_COMPUTE_NEDEPTHWISECONVOLUTIONKERNEL3x3_H__ */
\ No newline at end of file
+#endif /* __ARM_COMPUTE_NEDEPTHWISECONVOLUTIONKERNEL3x3_H__ */
diff --git a/arm_compute/core/NEON/kernels/NEDepthwiseIm2ColKernel.h b/arm_compute/core/NEON/kernels/NEDepthwiseIm2ColKernel.h
index fde474d..8d59ba3 100644
--- a/arm_compute/core/NEON/kernels/NEDepthwiseIm2ColKernel.h
+++ b/arm_compute/core/NEON/kernels/NEDepthwiseIm2ColKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NEDepthwiseIm2ColKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEDepthwiseIm2ColKernel";
+    }
     /** Default constructor */
     NEDepthwiseIm2ColKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEDepthwiseVectorToTensorKernel.h b/arm_compute/core/NEON/kernels/NEDepthwiseVectorToTensorKernel.h
index 8b33fae..1900090 100644
--- a/arm_compute/core/NEON/kernels/NEDepthwiseVectorToTensorKernel.h
+++ b/arm_compute/core/NEON/kernels/NEDepthwiseVectorToTensorKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -40,6 +40,10 @@
 class NEDepthwiseVectorToTensorKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEDepthwiseVectorToTensorKernel";
+    }
     /** Default constructor */
     NEDepthwiseVectorToTensorKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEDepthwiseWeightsReshapeKernel.h b/arm_compute/core/NEON/kernels/NEDepthwiseWeightsReshapeKernel.h
index 2e98611..4d23b8b 100644
--- a/arm_compute/core/NEON/kernels/NEDepthwiseWeightsReshapeKernel.h
+++ b/arm_compute/core/NEON/kernels/NEDepthwiseWeightsReshapeKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -37,6 +37,10 @@
 class NEDepthwiseWeightsReshapeKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEDepthwiseWeightsReshapeKernel";
+    }
     /** Default constructor */
     NEDepthwiseWeightsReshapeKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEDequantizationLayerKernel.h b/arm_compute/core/NEON/kernels/NEDequantizationLayerKernel.h
index 51c75f8..25383aa 100644
--- a/arm_compute/core/NEON/kernels/NEDequantizationLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEDequantizationLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NEDequantizationLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEDequantizationLayerKernel";
+    }
     /** Default constructor */
     NEDequantizationLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEDerivativeKernel.h b/arm_compute/core/NEON/kernels/NEDerivativeKernel.h
index 5d46516..233c423 100644
--- a/arm_compute/core/NEON/kernels/NEDerivativeKernel.h
+++ b/arm_compute/core/NEON/kernels/NEDerivativeKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,6 +36,10 @@
 class NEDerivativeKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEDerivativeKernel";
+    }
     /** Default constructor */
     NEDerivativeKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEDilateKernel.h b/arm_compute/core/NEON/kernels/NEDilateKernel.h
index b05c3ad..ad15c62 100644
--- a/arm_compute/core/NEON/kernels/NEDilateKernel.h
+++ b/arm_compute/core/NEON/kernels/NEDilateKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEDilateKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEDilateKernel";
+    }
     /** Set the source, destination and border mode of the kernel
      *
      * @param[in]  input            Source tensor. Data type supported: U8
diff --git a/arm_compute/core/NEON/kernels/NEDirectConvolutionLayerKernel.h b/arm_compute/core/NEON/kernels/NEDirectConvolutionLayerKernel.h
index cd482dd..f859f97 100644
--- a/arm_compute/core/NEON/kernels/NEDirectConvolutionLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEDirectConvolutionLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEDirectConvolutionLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEDirectConvolutionLayerKernel";
+    }
     /** Default constructor */
     NEDirectConvolutionLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEDirectConvolutionLayerOutputStageKernel.h b/arm_compute/core/NEON/kernels/NEDirectConvolutionLayerOutputStageKernel.h
index c42e5c4..77711d7 100644
--- a/arm_compute/core/NEON/kernels/NEDirectConvolutionLayerOutputStageKernel.h
+++ b/arm_compute/core/NEON/kernels/NEDirectConvolutionLayerOutputStageKernel.h
@@ -36,6 +36,10 @@
 class NEDirectConvolutionLayerOutputStageKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEDirectConvolutionLayerOutputStageKernel";
+    }
     /** Default constructor */
     NEDirectConvolutionLayerOutputStageKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEErodeKernel.h b/arm_compute/core/NEON/kernels/NEErodeKernel.h
index 4d60d64..b1b236c 100644
--- a/arm_compute/core/NEON/kernels/NEErodeKernel.h
+++ b/arm_compute/core/NEON/kernels/NEErodeKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEErodeKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEErodeKernel";
+    }
     /** Set the source, destination and border mode of the kernel
      *
      * @param[in]  input            Source tensor. Data type supported: U8
diff --git a/arm_compute/core/NEON/kernels/NEFastCornersKernel.h b/arm_compute/core/NEON/kernels/NEFastCornersKernel.h
index dba5e88..1b645c4 100644
--- a/arm_compute/core/NEON/kernels/NEFastCornersKernel.h
+++ b/arm_compute/core/NEON/kernels/NEFastCornersKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NEFastCornersKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEFastCornersKernel";
+    }
     /** Constructor */
     NEFastCornersKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEFillArrayKernel.h b/arm_compute/core/NEON/kernels/NEFillArrayKernel.h
index 6b92a8b..62d537d 100644
--- a/arm_compute/core/NEON/kernels/NEFillArrayKernel.h
+++ b/arm_compute/core/NEON/kernels/NEFillArrayKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -39,6 +39,10 @@
 class NEFillArrayKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEFillArrayKernel";
+    }
     /** Default contructor */
     NEFillArrayKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEFillBorderKernel.h b/arm_compute/core/NEON/kernels/NEFillBorderKernel.h
index 164158b..dd19b8f 100644
--- a/arm_compute/core/NEON/kernels/NEFillBorderKernel.h
+++ b/arm_compute/core/NEON/kernels/NEFillBorderKernel.h
@@ -36,6 +36,10 @@
 class NEFillBorderKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEFillBorderKernel";
+    }
     /** Default Constructor */
     NEFillBorderKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEFillInnerBorderKernel.h b/arm_compute/core/NEON/kernels/NEFillInnerBorderKernel.h
index b264bb7..545a265 100644
--- a/arm_compute/core/NEON/kernels/NEFillInnerBorderKernel.h
+++ b/arm_compute/core/NEON/kernels/NEFillInnerBorderKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,6 +36,10 @@
 class NEFillInnerBorderKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEFillInnerBorderKernel";
+    }
     /** Default constructor */
     NEFillInnerBorderKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEFloorKernel.h b/arm_compute/core/NEON/kernels/NEFloorKernel.h
index a9221d0..b72d052 100644
--- a/arm_compute/core/NEON/kernels/NEFloorKernel.h
+++ b/arm_compute/core/NEON/kernels/NEFloorKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEFloorKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEFloorKernel";
+    }
     /** Set the source, destination of the kernel
      *
      * @param[in]  input  Source tensor. Data type supported: F32.
diff --git a/arm_compute/core/NEON/kernels/NEGEMMAssemblyBaseKernel.h b/arm_compute/core/NEON/kernels/NEGEMMAssemblyBaseKernel.h
index 1090dd5..579e8ed 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMAssemblyBaseKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMAssemblyBaseKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEGEMMAssemblyBaseKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMAssemblyBaseKernel";
+    }
     /** Constructor */
     NEGEMMAssemblyBaseKernel()
         : _input0(nullptr), _input1(nullptr), _output(nullptr), _workspace(nullptr), _alpha(1.f), _beta(0.f), _is_transposed_0(false), _is_transposed_1(false)
diff --git a/arm_compute/core/NEON/kernels/NEGEMMInterleave4x4Kernel.h b/arm_compute/core/NEON/kernels/NEGEMMInterleave4x4Kernel.h
index fd93def..79504fd 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMInterleave4x4Kernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMInterleave4x4Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -52,6 +52,10 @@
 class NEGEMMInterleave4x4Kernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMInterleave4x4Kernel";
+    }
     /* Constructor */
     NEGEMMInterleave4x4Kernel();
     /** Initialise the kernel's input and output.
diff --git a/arm_compute/core/NEON/kernels/NEGEMMInterleaveBlockedKernel.h b/arm_compute/core/NEON/kernels/NEGEMMInterleaveBlockedKernel.h
index b9bb18d..f5a1121 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMInterleaveBlockedKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMInterleaveBlockedKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -39,6 +39,10 @@
 class NEGEMMInterleaveBlockedKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMInterleaveBlockedKernel";
+    }
     /* Constructor */
     NEGEMMInterleaveBlockedKernel();
     /** Initialise the kernel's input and output.
diff --git a/arm_compute/core/NEON/kernels/NEGEMMLowpMatrixMultiplyKernel.h b/arm_compute/core/NEON/kernels/NEGEMMLowpMatrixMultiplyKernel.h
index 7435994..354ae21 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMLowpMatrixMultiplyKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMLowpMatrixMultiplyKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -43,6 +43,10 @@
 class NEGEMMLowpMatrixMultiplyKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMLowpMatrixMultiplyKernel";
+    }
     /** Constructor */
     NEGEMMLowpMatrixMultiplyKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers)*/
diff --git a/arm_compute/core/NEON/kernels/NEGEMMLowpOffsetContributionKernel.h b/arm_compute/core/NEON/kernels/NEGEMMLowpOffsetContributionKernel.h
index 5319683..7186320 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMLowpOffsetContributionKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMLowpOffsetContributionKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -46,6 +46,10 @@
 class NEGEMMLowpOffsetContributionKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMLowpOffsetContributionKernel";
+    }
     /** Constructor */
     NEGEMMLowpOffsetContributionKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers)*/
diff --git a/arm_compute/core/NEON/kernels/NEGEMMLowpQuantizeDownInt32ToUint8ScaleByFixedPointKernel.h b/arm_compute/core/NEON/kernels/NEGEMMLowpQuantizeDownInt32ToUint8ScaleByFixedPointKernel.h
index b1dd1fb..030a0c7 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMLowpQuantizeDownInt32ToUint8ScaleByFixedPointKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMLowpQuantizeDownInt32ToUint8ScaleByFixedPointKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -46,6 +46,10 @@
 class NEGEMMLowpQuantizeDownInt32ToUint8ScaleByFixedPointKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMLowpQuantizeDownInt32ToUint8ScaleByFixedPointKernel";
+    }
     /** Constructor */
     NEGEMMLowpQuantizeDownInt32ToUint8ScaleByFixedPointKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers)*/
diff --git a/arm_compute/core/NEON/kernels/NEGEMMLowpQuantizeDownInt32ToUint8ScaleKernel.h b/arm_compute/core/NEON/kernels/NEGEMMLowpQuantizeDownInt32ToUint8ScaleKernel.h
index 10b3330..84f45b0 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMLowpQuantizeDownInt32ToUint8ScaleKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMLowpQuantizeDownInt32ToUint8ScaleKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -46,6 +46,10 @@
 class NEGEMMLowpQuantizeDownInt32ToUint8ScaleKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMLowpQuantizeDownInt32ToUint8ScaleKernel";
+    }
     /** Constructor */
     NEGEMMLowpQuantizeDownInt32ToUint8ScaleKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers)*/
diff --git a/arm_compute/core/NEON/kernels/NEGEMMLowpReductionKernel.h b/arm_compute/core/NEON/kernels/NEGEMMLowpReductionKernel.h
index 38c353e..4eab86d 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMLowpReductionKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMLowpReductionKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -69,6 +69,10 @@
 class NEGEMMLowpMatrixAReductionKernel : public INEGEMMLowpReductionKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMLowpMatrixAReductionKernel";
+    }
     /** Initialise the kernel's input and output.
      *
      * @param[in]  mtx_a             Input tensor. Data type supported: QASYMM8
@@ -100,6 +104,10 @@
 class NEGEMMLowpMatrixBReductionKernel : public INEGEMMLowpReductionKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMLowpMatrixBReductionKernel";
+    }
     /** Initialise the kernel's input and output.
      *
      * @param[in]  mtx_b            Input tensor. Data type supported: Data type supported: QASYMM8
diff --git a/arm_compute/core/NEON/kernels/NEGEMMMatrixAccumulateBiasesKernel.h b/arm_compute/core/NEON/kernels/NEGEMMMatrixAccumulateBiasesKernel.h
index d5fb675..051b8b7 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMMatrixAccumulateBiasesKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMMatrixAccumulateBiasesKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -33,6 +33,10 @@
 class NEGEMMMatrixAccumulateBiasesKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMMatrixAccumulateBiasesKernel";
+    }
     /** Default constructor */
     NEGEMMMatrixAccumulateBiasesKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEGEMMMatrixAdditionKernel.h b/arm_compute/core/NEON/kernels/NEGEMMMatrixAdditionKernel.h
index 9d5adb6..5e4f8b7 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMMatrixAdditionKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMMatrixAdditionKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -41,6 +41,10 @@
 class NEGEMMMatrixAdditionKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMMatrixAdditionKernel";
+    }
     /** Constructor */
     NEGEMMMatrixAdditionKernel();
     /** Prevent instances of this class from being copied */
diff --git a/arm_compute/core/NEON/kernels/NEGEMMMatrixMultiplyKernel.h b/arm_compute/core/NEON/kernels/NEGEMMMatrixMultiplyKernel.h
index 9923c31..4598e15 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMMatrixMultiplyKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMMatrixMultiplyKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -39,6 +39,10 @@
 class NEGEMMMatrixMultiplyKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMMatrixMultiplyKernel";
+    }
     /** Constructor */
     NEGEMMMatrixMultiplyKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEGEMMMatrixVectorMultiplyKernel.h b/arm_compute/core/NEON/kernels/NEGEMMMatrixVectorMultiplyKernel.h
index d844af5..5ea8390 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMMatrixVectorMultiplyKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMMatrixVectorMultiplyKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -33,6 +33,10 @@
 class NEGEMMMatrixVectorMultiplyKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMMatrixVectorMultiplyKernel";
+    }
     /** Default constructor */
     NEGEMMMatrixVectorMultiplyKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEGEMMTranspose1xWKernel.h b/arm_compute/core/NEON/kernels/NEGEMMTranspose1xWKernel.h
index 451dce2..fcdd8dd 100644
--- a/arm_compute/core/NEON/kernels/NEGEMMTranspose1xWKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGEMMTranspose1xWKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -68,6 +68,10 @@
 class NEGEMMTranspose1xWKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMTranspose1xWKernel";
+    }
     /** Initialise the kernel's input and output.
      *
      * @param[in]  input  Input tensor. Data types supported: U8/S8/QS8/QASYMM8/U16/S16/QS16/F16/U32/S32/F32
diff --git a/arm_compute/core/NEON/kernels/NEGaussian3x3Kernel.h b/arm_compute/core/NEON/kernels/NEGaussian3x3Kernel.h
index 962948c..404f5dd 100644
--- a/arm_compute/core/NEON/kernels/NEGaussian3x3Kernel.h
+++ b/arm_compute/core/NEON/kernels/NEGaussian3x3Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEGaussian3x3Kernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGaussian3x3Kernel";
+    }
     /** Set the source, destination and border mode of the kernel
      *
      * @param[in]  input            Source tensor. Data type supported: U8
diff --git a/arm_compute/core/NEON/kernels/NEGaussian5x5Kernel.h b/arm_compute/core/NEON/kernels/NEGaussian5x5Kernel.h
index 95d1f4b..a06326c 100644
--- a/arm_compute/core/NEON/kernels/NEGaussian5x5Kernel.h
+++ b/arm_compute/core/NEON/kernels/NEGaussian5x5Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEGaussian5x5HorKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGaussian5x5HorKernel";
+    }
     /** Default constructor */
     NEGaussian5x5HorKernel();
 
@@ -57,6 +61,10 @@
 class NEGaussian5x5VertKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGaussian5x5VertKernel";
+    }
     /** Initialise the kernel's source, destination and border mode.
      *
      * @param[in]  input            Source tensor. Data type supported: S16.
diff --git a/arm_compute/core/NEON/kernels/NEGaussianPyramidKernel.h b/arm_compute/core/NEON/kernels/NEGaussianPyramidKernel.h
index d285011..ac22934 100644
--- a/arm_compute/core/NEON/kernels/NEGaussianPyramidKernel.h
+++ b/arm_compute/core/NEON/kernels/NEGaussianPyramidKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEGaussianPyramidHorKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGaussianPyramidHorKernel";
+    }
     /** Default constructor */
     NEGaussianPyramidHorKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
@@ -66,6 +70,10 @@
 class NEGaussianPyramidVertKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGaussianPyramidVertKernel";
+    }
     /** Default constructor */
     NEGaussianPyramidVertKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEHOGDescriptorKernel.h b/arm_compute/core/NEON/kernels/NEHOGDescriptorKernel.h
index 0eae9eb..37d0419 100644
--- a/arm_compute/core/NEON/kernels/NEHOGDescriptorKernel.h
+++ b/arm_compute/core/NEON/kernels/NEHOGDescriptorKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,6 +36,10 @@
 class NEHOGOrientationBinningKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEHOGOrientationBinningKernel";
+    }
     /** Default constructor */
     NEHOGOrientationBinningKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
@@ -91,6 +95,10 @@
 class NEHOGBlockNormalizationKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEHOGBlockNormalizationKernel";
+    }
     /** Default constructor */
     NEHOGBlockNormalizationKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEHOGDetectorKernel.h b/arm_compute/core/NEON/kernels/NEHOGDetectorKernel.h
index 838b914..0db1a40 100644
--- a/arm_compute/core/NEON/kernels/NEHOGDetectorKernel.h
+++ b/arm_compute/core/NEON/kernels/NEHOGDetectorKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -37,6 +37,10 @@
 class NEHOGDetectorKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEHOGDetectorKernel";
+    }
     /** Default constructor */
     NEHOGDetectorKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEHarrisCornersKernel.h b/arm_compute/core/NEON/kernels/NEHarrisCornersKernel.h
index c3c37e4..8037e41 100644
--- a/arm_compute/core/NEON/kernels/NEHarrisCornersKernel.h
+++ b/arm_compute/core/NEON/kernels/NEHarrisCornersKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -84,6 +84,10 @@
 class NEHarrisScoreKernel : public INEHarrisScoreKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEHarrisScoreKernel";
+    }
     /** Default constructor */
     NEHarrisScoreKernel();
     // Inherited methods overridden:
@@ -105,6 +109,10 @@
 class NEHarrisScoreFP16Kernel : public INEHarrisScoreKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEHarrisScoreFP16Kernel";
+    }
     /** Default constructor */
     NEHarrisScoreFP16Kernel();
     // Inherited methods overridden:
diff --git a/arm_compute/core/NEON/kernels/NEHistogramKernel.h b/arm_compute/core/NEON/kernels/NEHistogramKernel.h
index 672472e..086353b 100644
--- a/arm_compute/core/NEON/kernels/NEHistogramKernel.h
+++ b/arm_compute/core/NEON/kernels/NEHistogramKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -40,6 +40,10 @@
 class NEHistogramKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEHistogramKernel";
+    }
     /** Default constructor */
     NEHistogramKernel();
     /** Default destructor */
diff --git a/arm_compute/core/NEON/kernels/NEIm2ColKernel.h b/arm_compute/core/NEON/kernels/NEIm2ColKernel.h
index bc12b22..6d11fbe 100644
--- a/arm_compute/core/NEON/kernels/NEIm2ColKernel.h
+++ b/arm_compute/core/NEON/kernels/NEIm2ColKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -57,6 +57,10 @@
 class NEIm2ColKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEIm2ColKernel";
+    }
     /** Default constructor */
     NEIm2ColKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEIntegralImageKernel.h b/arm_compute/core/NEON/kernels/NEIntegralImageKernel.h
index 0e86eba..8d34926 100644
--- a/arm_compute/core/NEON/kernels/NEIntegralImageKernel.h
+++ b/arm_compute/core/NEON/kernels/NEIntegralImageKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEIntegralImageKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEIntegralImageKernel";
+    }
     /** Set the source, destination and border mode of the kernel
      *
      * @param[in]  input  Source tensor. Data type supported: U8
diff --git a/arm_compute/core/NEON/kernels/NEL2NormalizeLayerKernel.h b/arm_compute/core/NEON/kernels/NEL2NormalizeLayerKernel.h
index 7aa5116..7fb968e 100644
--- a/arm_compute/core/NEON/kernels/NEL2NormalizeLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEL2NormalizeLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEL2NormalizeLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEL2NormalizeLayerKernel";
+    }
     /** Default constructor */
     NEL2NormalizeLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NELKTrackerKernel.h b/arm_compute/core/NEON/kernels/NELKTrackerKernel.h
index f65a6c2..f210558 100644
--- a/arm_compute/core/NEON/kernels/NELKTrackerKernel.h
+++ b/arm_compute/core/NEON/kernels/NELKTrackerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -51,6 +51,10 @@
 class NELKTrackerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NELKTrackerKernel";
+    }
     /** Default constructor */
     NELKTrackerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NELocallyConnectedMatrixMultiplyKernel.h b/arm_compute/core/NEON/kernels/NELocallyConnectedMatrixMultiplyKernel.h
index 593d965..5e3410f 100644
--- a/arm_compute/core/NEON/kernels/NELocallyConnectedMatrixMultiplyKernel.h
+++ b/arm_compute/core/NEON/kernels/NELocallyConnectedMatrixMultiplyKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NELocallyConnectedMatrixMultiplyKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NELocallyConnectedMatrixMultiplyKernel";
+    }
     /** Default constructor */
     NELocallyConnectedMatrixMultiplyKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEMagnitudePhaseKernel.h b/arm_compute/core/NEON/kernels/NEMagnitudePhaseKernel.h
index 76c6163..522ed54 100644
--- a/arm_compute/core/NEON/kernels/NEMagnitudePhaseKernel.h
+++ b/arm_compute/core/NEON/kernels/NEMagnitudePhaseKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,6 +36,10 @@
 class NEMagnitudePhaseKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEMagnitudePhaseKernel";
+    }
     /** Default constructor */
     NEMagnitudePhaseKernel();
     /** Destructor */
@@ -100,6 +104,10 @@
 class NEMagnitudePhaseFP16Kernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEMagnitudePhaseFP16Kernel";
+    }
     /** Default constructor */
     NEMagnitudePhaseFP16Kernel();
     /** Destructor */
diff --git a/arm_compute/core/NEON/kernels/NEMeanStdDevKernel.h b/arm_compute/core/NEON/kernels/NEMeanStdDevKernel.h
index 5579767..bba6e2a 100644
--- a/arm_compute/core/NEON/kernels/NEMeanStdDevKernel.h
+++ b/arm_compute/core/NEON/kernels/NEMeanStdDevKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NEMeanStdDevKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEMeanStdDevKernel";
+    }
     /** Default constructor */
     NEMeanStdDevKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEMedian3x3Kernel.h b/arm_compute/core/NEON/kernels/NEMedian3x3Kernel.h
index 769c2c1..2403677 100644
--- a/arm_compute/core/NEON/kernels/NEMedian3x3Kernel.h
+++ b/arm_compute/core/NEON/kernels/NEMedian3x3Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEMedian3x3Kernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEMedian3x3Kernel";
+    }
     /** Set the source, destination and border mode of the kernel
      *
      * @param[in]  input            Source tensor. Data type supported: U8
diff --git a/arm_compute/core/NEON/kernels/NEMinMaxLayerKernel.h b/arm_compute/core/NEON/kernels/NEMinMaxLayerKernel.h
index da4f2c4..592b594 100644
--- a/arm_compute/core/NEON/kernels/NEMinMaxLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEMinMaxLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NEMinMaxLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEMinMaxLayerKernel";
+    }
     /** Default constructor */
     NEMinMaxLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEMinMaxLocationKernel.h b/arm_compute/core/NEON/kernels/NEMinMaxLocationKernel.h
index ef193d1..bf2d207 100644
--- a/arm_compute/core/NEON/kernels/NEMinMaxLocationKernel.h
+++ b/arm_compute/core/NEON/kernels/NEMinMaxLocationKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -39,6 +39,10 @@
 class NEMinMaxKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEMinMaxKernel";
+    }
     /** Default constructor */
     NEMinMaxKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
@@ -102,6 +106,10 @@
 class NEMinMaxLocationKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEMinMaxLocationKernel";
+    }
     /** Default constructor */
     NEMinMaxLocationKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NENonLinearFilterKernel.h b/arm_compute/core/NEON/kernels/NENonLinearFilterKernel.h
index 2ddd58e..42701ef 100644
--- a/arm_compute/core/NEON/kernels/NENonLinearFilterKernel.h
+++ b/arm_compute/core/NEON/kernels/NENonLinearFilterKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -37,6 +37,10 @@
 class NENonLinearFilterKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NENonLinearFilterKernel";
+    }
     /** Default constructor */
     NENonLinearFilterKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NENonMaximaSuppression3x3Kernel.h b/arm_compute/core/NEON/kernels/NENonMaximaSuppression3x3Kernel.h
index da8aecf..f122ed1 100644
--- a/arm_compute/core/NEON/kernels/NENonMaximaSuppression3x3Kernel.h
+++ b/arm_compute/core/NEON/kernels/NENonMaximaSuppression3x3Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -39,6 +39,10 @@
 class NENonMaximaSuppression3x3Kernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NENonMaximaSuppression3x3Kernel";
+    }
     /** Default constructor */
     NENonMaximaSuppression3x3Kernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
@@ -84,6 +88,10 @@
 class NENonMaximaSuppression3x3FP16Kernel : public NENonMaximaSuppression3x3Kernel
 {
 public:
+    const char *name() const override
+    {
+        return "NENonMaximaSuppression3x3FP16Kernel";
+    }
     /** Initialise the kernel's sources, destinations and border mode.
      *
      * @param[in]  input            Source tensor. Data types supported: U8/F32.
diff --git a/arm_compute/core/NEON/kernels/NENormalizationLayerKernel.h b/arm_compute/core/NEON/kernels/NENormalizationLayerKernel.h
index 405daf1..b835ca7 100644
--- a/arm_compute/core/NEON/kernels/NENormalizationLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NENormalizationLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -35,6 +35,10 @@
 class NENormalizationLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NENormalizationLayerKernel";
+    }
     /** Default constructor */
     NENormalizationLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEPixelWiseMultiplicationKernel.h b/arm_compute/core/NEON/kernels/NEPixelWiseMultiplicationKernel.h
index 10f990e..2a82d6e 100644
--- a/arm_compute/core/NEON/kernels/NEPixelWiseMultiplicationKernel.h
+++ b/arm_compute/core/NEON/kernels/NEPixelWiseMultiplicationKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -35,6 +35,10 @@
 class NEPixelWiseMultiplicationKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEPixelWiseMultiplicationKernel";
+    }
     /** Default constructor */
     NEPixelWiseMultiplicationKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEPoolingLayerKernel.h b/arm_compute/core/NEON/kernels/NEPoolingLayerKernel.h
index 19c4656..0b17b76 100644
--- a/arm_compute/core/NEON/kernels/NEPoolingLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEPoolingLayerKernel.h
@@ -34,6 +34,10 @@
 class NEPoolingLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEPoolingLayerKernel";
+    }
     /** Default constructor */
     NEPoolingLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEQuantizationLayerKernel.h b/arm_compute/core/NEON/kernels/NEQuantizationLayerKernel.h
index e80f9eb..9642ac5 100644
--- a/arm_compute/core/NEON/kernels/NEQuantizationLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEQuantizationLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NEQuantizationLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEQuantizationLayerKernel";
+    }
     /** Default constructor */
     NEQuantizationLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEROIPoolingLayerKernel.h b/arm_compute/core/NEON/kernels/NEROIPoolingLayerKernel.h
index dc604fc..5d9a7cf 100644
--- a/arm_compute/core/NEON/kernels/NEROIPoolingLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEROIPoolingLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,6 +36,10 @@
 class NEROIPoolingLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEROIPoolingLayerKernel";
+    }
     /** Default constructor */
     NEROIPoolingLayerKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEReductionOperationKernel.h b/arm_compute/core/NEON/kernels/NEReductionOperationKernel.h
index 9be8943..a5ddd06 100644
--- a/arm_compute/core/NEON/kernels/NEReductionOperationKernel.h
+++ b/arm_compute/core/NEON/kernels/NEReductionOperationKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEReductionOperationKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEReductionOperationKernel";
+    }
     /** Default constructor */
     NEReductionOperationKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NERemapKernel.h b/arm_compute/core/NEON/kernels/NERemapKernel.h
index 7aa5de7..8a4ecd4 100644
--- a/arm_compute/core/NEON/kernels/NERemapKernel.h
+++ b/arm_compute/core/NEON/kernels/NERemapKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -35,6 +35,10 @@
 class NERemapKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NERemapKernel";
+    }
     /** Default constructor */
     NERemapKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEReshapeLayerKernel.h b/arm_compute/core/NEON/kernels/NEReshapeLayerKernel.h
index 062a6e1..cd70198 100644
--- a/arm_compute/core/NEON/kernels/NEReshapeLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEReshapeLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEReshapeLayerKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEReshapeLayerKernel";
+    }
     /** Set the input and output of the kernel
      *
      * @param[in]  input  Source tensor. Data type supported: U8/S8/QS8/U16/S16/QS16/U32/S32/F16/F32
diff --git a/arm_compute/core/NEON/kernels/NEScaleKernel.h b/arm_compute/core/NEON/kernels/NEScaleKernel.h
index ac154d4..eb47409 100644
--- a/arm_compute/core/NEON/kernels/NEScaleKernel.h
+++ b/arm_compute/core/NEON/kernels/NEScaleKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -35,6 +35,10 @@
 class NEScaleKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEScaleKernel";
+    }
     /** Default constructor */
     NEScaleKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEScharr3x3Kernel.h b/arm_compute/core/NEON/kernels/NEScharr3x3Kernel.h
index 01c4c90..9040341 100644
--- a/arm_compute/core/NEON/kernels/NEScharr3x3Kernel.h
+++ b/arm_compute/core/NEON/kernels/NEScharr3x3Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -43,6 +43,10 @@
 class NEScharr3x3Kernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEScharr3x3Kernel";
+    }
     /** Default constructor */
     NEScharr3x3Kernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NESobel3x3Kernel.h b/arm_compute/core/NEON/kernels/NESobel3x3Kernel.h
index 46e8032..21e8748 100644
--- a/arm_compute/core/NEON/kernels/NESobel3x3Kernel.h
+++ b/arm_compute/core/NEON/kernels/NESobel3x3Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -43,6 +43,10 @@
 class NESobel3x3Kernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NESobel3x3Kernel";
+    }
     /** Default constructor */
     NESobel3x3Kernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NESobel5x5Kernel.h b/arm_compute/core/NEON/kernels/NESobel5x5Kernel.h
index 9770c2c..361a194 100644
--- a/arm_compute/core/NEON/kernels/NESobel5x5Kernel.h
+++ b/arm_compute/core/NEON/kernels/NESobel5x5Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,6 +36,10 @@
 class NESobel5x5HorKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NESobel5x5HorKernel";
+    }
     /** Default constructor */
     NESobel5x5HorKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
@@ -79,6 +83,10 @@
 class NESobel5x5VertKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NESobel5x5VertKernel";
+    }
     /** Default constructor */
     NESobel5x5VertKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NESobel7x7Kernel.h b/arm_compute/core/NEON/kernels/NESobel7x7Kernel.h
index 5683f7c..a5cc86d 100644
--- a/arm_compute/core/NEON/kernels/NESobel7x7Kernel.h
+++ b/arm_compute/core/NEON/kernels/NESobel7x7Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,6 +36,10 @@
 class NESobel7x7HorKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NESobel7x7HorKernel";
+    }
     /** Default constructor */
     NESobel7x7HorKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
@@ -79,6 +83,10 @@
 class NESobel7x7VertKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NESobel7x7VertKernel";
+    }
     /** Default constructor */
     NESobel7x7VertKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NESoftmaxLayerKernel.h b/arm_compute/core/NEON/kernels/NESoftmaxLayerKernel.h
index 0fecfac..bd0e642 100644
--- a/arm_compute/core/NEON/kernels/NESoftmaxLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NESoftmaxLayerKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -35,6 +35,10 @@
 class NELogits1DMaxKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NELogits1DMaxKernel";
+    }
     /** Default constructor */
     NELogits1DMaxKernel();
     /** Set the input and output tensors.
@@ -68,6 +72,10 @@
 class NELogits1DShiftExpSumKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NELogits1DShiftExpSumKernel";
+    }
     /** Default constructor */
     NELogits1DShiftExpSumKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
@@ -120,6 +128,10 @@
 class NELogits1DNormKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NELogits1DNormKernel";
+    }
     /** Default constructor */
     NELogits1DNormKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NETableLookupKernel.h b/arm_compute/core/NEON/kernels/NETableLookupKernel.h
index 46eefc9..9bc4a44 100644
--- a/arm_compute/core/NEON/kernels/NETableLookupKernel.h
+++ b/arm_compute/core/NEON/kernels/NETableLookupKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -35,6 +35,10 @@
 class NETableLookupKernel : public INESimpleKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NETableLookupKernel";
+    }
     /** Default constructor */
     NETableLookupKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEThresholdKernel.h b/arm_compute/core/NEON/kernels/NEThresholdKernel.h
index 8fd561b..9993780 100644
--- a/arm_compute/core/NEON/kernels/NEThresholdKernel.h
+++ b/arm_compute/core/NEON/kernels/NEThresholdKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -39,6 +39,10 @@
 class NEThresholdKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEThresholdKernel";
+    }
     /** Constructor
      * Initialize all the pointers to nullptr and parameters to zero.
      */
diff --git a/arm_compute/core/NEON/kernels/NETransposeKernel.h b/arm_compute/core/NEON/kernels/NETransposeKernel.h
index 855d270..dc7ef8f 100644
--- a/arm_compute/core/NEON/kernels/NETransposeKernel.h
+++ b/arm_compute/core/NEON/kernels/NETransposeKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -38,6 +38,10 @@
 class NETransposeKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NETransposeKernel";
+    }
     /** Default constructor */
     NETransposeKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEWarpKernel.h b/arm_compute/core/NEON/kernels/NEWarpKernel.h
index d7cb82f..a147d57 100644
--- a/arm_compute/core/NEON/kernels/NEWarpKernel.h
+++ b/arm_compute/core/NEON/kernels/NEWarpKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -98,6 +98,10 @@
 class NEWarpAffineKernel : public INEWarpKernel
 {
 private:
+    const char *name() const override
+    {
+        return "NEWarpAffineKernel";
+    }
     // Inherited methods overridden:
     void warp_undefined(const Window &window) override;
     void warp_constant(const Window &window) override;
@@ -111,6 +115,10 @@
 class NEWarpPerspectiveKernel : public INEWarpKernel
 {
 private:
+    const char *name() const override
+    {
+        return "NEWarpPerspectiveKernel";
+    }
     // Inherited methods overridden:
     void warp_undefined(const Window &window) override;
     void warp_constant(const Window &window) override;
diff --git a/arm_compute/core/NEON/kernels/NEWeightsReshapeKernel.h b/arm_compute/core/NEON/kernels/NEWeightsReshapeKernel.h
index 84ec736..e92829c 100644
--- a/arm_compute/core/NEON/kernels/NEWeightsReshapeKernel.h
+++ b/arm_compute/core/NEON/kernels/NEWeightsReshapeKernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -56,6 +56,10 @@
 class NEWeightsReshapeKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEWeightsReshapeKernel";
+    }
     /** Constructor.*/
     NEWeightsReshapeKernel();
     /** Prevent instances of this class from being copied (As this class contains pointers) */
diff --git a/arm_compute/core/NEON/kernels/NEWinogradLayerKernel.h b/arm_compute/core/NEON/kernels/NEWinogradLayerKernel.h
index 78ac564..b85f372 100644
--- a/arm_compute/core/NEON/kernels/NEWinogradLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEWinogradLayerKernel.h
@@ -79,6 +79,10 @@
 class NEWinogradLayerKernel : public INEKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEWinogradLayerKernel";
+    }
     /** Constructor */
     NEWinogradLayerKernel();
 
diff --git a/arm_compute/core/NEON/kernels/arm32/NEGEMMAArch32Kernel.h b/arm_compute/core/NEON/kernels/arm32/NEGEMMAArch32Kernel.h
index 7564f6a..4868f83 100644
--- a/arm_compute/core/NEON/kernels/arm32/NEGEMMAArch32Kernel.h
+++ b/arm_compute/core/NEON/kernels/arm32/NEGEMMAArch32Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEGEMMAArch32Kernel : public NEGEMMAssemblyBaseKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMAArch32Kernel";
+    }
     // Inherited methods overridden:
     void run(const Window &window, const ThreadInfo &info) override;
 
diff --git a/arm_compute/core/NEON/kernels/arm64/NEGEMMAArch64Kernel.h b/arm_compute/core/NEON/kernels/arm64/NEGEMMAArch64Kernel.h
index 5c29a82..5252378 100644
--- a/arm_compute/core/NEON/kernels/arm64/NEGEMMAArch64Kernel.h
+++ b/arm_compute/core/NEON/kernels/arm64/NEGEMMAArch64Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEGEMMAArch64Kernel : public NEGEMMAssemblyBaseKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMAArch64Kernel";
+    }
     // Inherited methods overridden:
     void run(const Window &window, const ThreadInfo &info) override;
 
diff --git a/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64A53Kernel.h b/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64A53Kernel.h
index 8e97837..83c209d 100644
--- a/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64A53Kernel.h
+++ b/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64A53Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -37,6 +37,10 @@
 class NEGEMMLowpAArch64A53Kernel : public NEGEMMAssemblyBaseKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMLowpAArch64A53Kernel";
+    }
     /** Default constructor */
     NEGEMMLowpAArch64A53Kernel();
     // Inherited methods overridden:
diff --git a/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64Kernel.h b/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64Kernel.h
index 3829d5e..f813242 100644
--- a/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64Kernel.h
+++ b/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -37,6 +37,10 @@
 class NEGEMMLowpAArch64Kernel : public NEGEMMAssemblyBaseKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMLowpAArch64Kernel";
+    }
     /** Default constructor */
     NEGEMMLowpAArch64Kernel();
 
diff --git a/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64V8P4Kernel.h b/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64V8P4Kernel.h
index b944993..b854d3a 100644
--- a/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64V8P4Kernel.h
+++ b/arm_compute/core/NEON/kernels/arm64/NEGEMMLowpAArch64V8P4Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -37,6 +37,10 @@
 class NEGEMMLowpAArch64V8P4Kernel : public NEGEMMAssemblyBaseKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEGEMMLowpAArch64V8P4Kernel";
+    }
     // Inherited methods overridden:
     void run(const Window &window, const ThreadInfo &info) override;
     /** Static function to check if given info will lead to a valid configuration of @ref NEGEMMAssemblyBaseKernel
diff --git a/arm_compute/core/NEON/kernels/arm64/NEHGEMMAArch64FP16Kernel.h b/arm_compute/core/NEON/kernels/arm64/NEHGEMMAArch64FP16Kernel.h
index 5671d99..75c4dbd 100644
--- a/arm_compute/core/NEON/kernels/arm64/NEHGEMMAArch64FP16Kernel.h
+++ b/arm_compute/core/NEON/kernels/arm64/NEHGEMMAArch64FP16Kernel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,6 +34,10 @@
 class NEHGEMMAArch64FP16Kernel : public NEGEMMAssemblyBaseKernel
 {
 public:
+    const char *name() const override
+    {
+        return "NEHGEMMAArch64FP16Kernel";
+    }
     // Inherited methods overridden:
     void run(const Window &window, const ThreadInfo &info) override;
 
diff --git a/arm_compute/runtime/Scheduler.h b/arm_compute/runtime/Scheduler.h
index 21f944b..524622f 100644
--- a/arm_compute/runtime/Scheduler.h
+++ b/arm_compute/runtime/Scheduler.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -44,7 +44,7 @@
      *
      * @param[in] scheduler A shared pointer to a custom scheduler implemented by the user.
      */
-    static void set(std::shared_ptr<IScheduler> &scheduler);
+    static void set(std::shared_ptr<IScheduler> scheduler);
     /** Access the scheduler singleton.
      *
      * @return A reference to the scheduler object.
diff --git a/src/runtime/Scheduler.cpp b/src/runtime/Scheduler.cpp
index 505c4a3..8925acf 100644
--- a/src/runtime/Scheduler.cpp
+++ b/src/runtime/Scheduler.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -142,8 +142,8 @@
 
 std::shared_ptr<IScheduler> Scheduler::_custom_scheduler = nullptr;
 
-void Scheduler::set(std::shared_ptr<IScheduler> &scheduler)
+void Scheduler::set(std::shared_ptr<IScheduler> scheduler)
 {
-    _custom_scheduler = scheduler;
+    _custom_scheduler = std::move(scheduler);
     set(Type::CUSTOM);
 }
diff --git a/tests/SConscript b/tests/SConscript
index 4261331..a128d39 100644
--- a/tests/SConscript
+++ b/tests/SConscript
@@ -29,9 +29,10 @@
 
 # vars is imported from arm_compute:
 variables = [
+    #FIXME: Remove before release!
+    BoolVariable("benchmark_examples", "Build benchmark examples programs", True),
     BoolVariable("validation_tests", "Build validation test programs", True),
     BoolVariable("benchmark_tests", "Build benchmark test programs", True),
-    BoolVariable("benchmark_examples", "Build benchmark examples programs", True),
     ("test_filter", "Pattern to specify the tests' filenames to be compiled", "*.cpp")
 ]
 
@@ -164,6 +165,7 @@
     Default(arm_compute_validation)
     Export('arm_compute_validation')
 
+#FIXME: Remove before release!
 if test_env['benchmark_examples']:
     files_benchmark_examples = test_env.Object('benchmark_examples/RunExample.cpp')
     arm_compute_benchmark_examples = []
diff --git a/tests/framework/Framework.cpp b/tests/framework/Framework.cpp
index 79a77d9..3091b66 100644
--- a/tests/framework/Framework.cpp
+++ b/tests/framework/Framework.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -41,6 +41,9 @@
     _available_instruments.emplace(std::pair<InstrumentType, ScaleFactor>(InstrumentType::WALL_CLOCK_TIMER, ScaleFactor::NONE), Instrument::make_instrument<WallClockTimer, ScaleFactor::NONE>);
     _available_instruments.emplace(std::pair<InstrumentType, ScaleFactor>(InstrumentType::WALL_CLOCK_TIMER, ScaleFactor::TIME_MS), Instrument::make_instrument<WallClockTimer, ScaleFactor::TIME_MS>);
     _available_instruments.emplace(std::pair<InstrumentType, ScaleFactor>(InstrumentType::WALL_CLOCK_TIMER, ScaleFactor::TIME_S), Instrument::make_instrument<WallClockTimer, ScaleFactor::TIME_S>);
+    _available_instruments.emplace(std::pair<InstrumentType, ScaleFactor>(InstrumentType::SCHEDULER_TIMER, ScaleFactor::NONE), Instrument::make_instrument<SchedulerTimer, ScaleFactor::NONE>);
+    _available_instruments.emplace(std::pair<InstrumentType, ScaleFactor>(InstrumentType::SCHEDULER_TIMER, ScaleFactor::TIME_MS), Instrument::make_instrument<SchedulerTimer, ScaleFactor::TIME_MS>);
+    _available_instruments.emplace(std::pair<InstrumentType, ScaleFactor>(InstrumentType::SCHEDULER_TIMER, ScaleFactor::TIME_S), Instrument::make_instrument<SchedulerTimer, ScaleFactor::TIME_S>);
 #ifdef PMU_ENABLED
     _available_instruments.emplace(std::pair<InstrumentType, ScaleFactor>(InstrumentType::PMU, ScaleFactor::NONE), Instrument::make_instrument<PMUCounter, ScaleFactor::NONE>);
     _available_instruments.emplace(std::pair<InstrumentType, ScaleFactor>(InstrumentType::PMU, ScaleFactor::SCALE_1K), Instrument::make_instrument<PMUCounter, ScaleFactor::SCALE_1K>);
diff --git a/tests/framework/instruments/Instruments.cpp b/tests/framework/instruments/Instruments.cpp
index 641e630..64e87f9 100644
--- a/tests/framework/instruments/Instruments.cpp
+++ b/tests/framework/instruments/Instruments.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -44,6 +44,9 @@
         { "wall_clock_timer", std::pair<InstrumentType, ScaleFactor>(InstrumentType::WALL_CLOCK_TIMER, ScaleFactor::NONE) },
         { "wall_clock_timer_ms", std::pair<InstrumentType, ScaleFactor>(InstrumentType::WALL_CLOCK_TIMER, ScaleFactor::TIME_MS) },
         { "wall_clock_timer_s", std::pair<InstrumentType, ScaleFactor>(InstrumentType::WALL_CLOCK_TIMER, ScaleFactor::TIME_S) },
+        { "scheduler_timer", std::pair<InstrumentType, ScaleFactor>(InstrumentType::SCHEDULER_TIMER, ScaleFactor::NONE) },
+        { "scheduler_timer_ms", std::pair<InstrumentType, ScaleFactor>(InstrumentType::SCHEDULER_TIMER, ScaleFactor::TIME_MS) },
+        { "scheduler_timer_s", std::pair<InstrumentType, ScaleFactor>(InstrumentType::SCHEDULER_TIMER, ScaleFactor::TIME_S) },
         { "pmu", std::pair<InstrumentType, ScaleFactor>(InstrumentType::PMU, ScaleFactor::NONE) },
         { "pmu_k", std::pair<InstrumentType, ScaleFactor>(InstrumentType::PMU, ScaleFactor::SCALE_1K) },
         { "pmu_m", std::pair<InstrumentType, ScaleFactor>(InstrumentType::PMU, ScaleFactor::SCALE_1M) },
diff --git a/tests/framework/instruments/Instruments.h b/tests/framework/instruments/Instruments.h
index 651f0f5..fe4c719 100644
--- a/tests/framework/instruments/Instruments.h
+++ b/tests/framework/instruments/Instruments.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -27,6 +27,7 @@
 #include "MaliCounter.h"
 #include "OpenCLTimer.h"
 #include "PMUCounter.h"
+#include "SchedulerTimer.h"
 #include "WallClockTimer.h"
 
 #include <sstream>
@@ -48,6 +49,7 @@
     PMU_INSTRUCTION_COUNTER = 0x0202,
     MALI                    = 0x0300,
     OPENCL_TIMER            = 0x0400,
+    SCHEDULER_TIMER         = 0x0500,
 };
 
 using InstrumentsDescription = std::pair<InstrumentType, ScaleFactor>;
@@ -82,6 +84,22 @@
                     throw std::invalid_argument("Unsupported instrument scale");
             }
             break;
+        case InstrumentType::SCHEDULER_TIMER:
+            switch(instrument.second)
+            {
+                case ScaleFactor::NONE:
+                    stream << "SCHEDULER_TIMER";
+                    break;
+                case ScaleFactor::TIME_MS:
+                    stream << "SCHEDULER_TIMER_MS";
+                    break;
+                case ScaleFactor::TIME_S:
+                    stream << "SCHEDULER_TIMER_S";
+                    break;
+                default:
+                    throw std::invalid_argument("Unsupported instrument scale");
+            }
+            break;
         case InstrumentType::PMU:
             switch(instrument.second)
             {
diff --git a/tests/framework/instruments/SchedulerTimer.cpp b/tests/framework/instruments/SchedulerTimer.cpp
new file mode 100644
index 0000000..e42cebd
--- /dev/null
+++ b/tests/framework/instruments/SchedulerTimer.cpp
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2017-2018 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 "SchedulerTimer.h"
+
+#include "WallClockTimer.h"
+#include "arm_compute/core/CPP/ICPPKernel.h"
+
+namespace arm_compute
+{
+namespace test
+{
+namespace framework
+{
+std::string SchedulerTimer::id() const
+{
+    return "SchedulerTimer";
+}
+
+class Interceptor final : public IScheduler
+{
+public:
+    /** Default constructor. */
+    Interceptor(std::list<SchedulerTimer::kernel_info> &kernels, IScheduler &real_scheduler, ScaleFactor scale_factor)
+        : _kernels(kernels), _real_scheduler(real_scheduler), _timer(scale_factor)
+    {
+    }
+
+    void set_num_threads(unsigned int num_threads) override
+    {
+        _real_scheduler.set_num_threads(num_threads);
+    }
+
+    unsigned int num_threads() const override
+    {
+        return _real_scheduler.num_threads();
+    }
+
+    void schedule(ICPPKernel *kernel, unsigned int split_dimension) override
+    {
+        _timer.start();
+        _real_scheduler.schedule(kernel, split_dimension);
+        _timer.stop();
+
+        SchedulerTimer::kernel_info info;
+        info.name         = kernel->name();
+        info.measurements = _timer.measurements();
+        _kernels.push_back(std::move(info));
+    }
+
+private:
+    std::list<SchedulerTimer::kernel_info> &_kernels;
+    IScheduler                             &_real_scheduler;
+    WallClockTimer                          _timer;
+};
+
+SchedulerTimer::SchedulerTimer(ScaleFactor scale_factor)
+    : _kernels(), _real_scheduler(nullptr), _real_scheduler_type(), _scale_factor(scale_factor)
+{
+}
+
+void SchedulerTimer::start()
+{
+    ARM_COMPUTE_ERROR_ON(_real_scheduler != nullptr);
+    _real_scheduler_type = Scheduler::get_type();
+    //Note: We can't currently replace a custom scheduler
+    if(_real_scheduler_type != Scheduler::Type::CUSTOM)
+    {
+        _real_scheduler  = &Scheduler::get();
+        auto interceptor = std::make_shared<Interceptor>(_kernels, *_real_scheduler, _scale_factor);
+        Scheduler::set(std::static_pointer_cast<IScheduler>(interceptor));
+    }
+    _kernels.clear();
+}
+
+void SchedulerTimer::stop()
+{
+    // Restore real scheduler
+    Scheduler::set(_real_scheduler_type);
+    _real_scheduler = nullptr;
+}
+
+Instrument::MeasurementsMap SchedulerTimer::measurements() const
+{
+    MeasurementsMap measurements;
+    unsigned int    kernel_number = 0;
+    for(auto kernel : _kernels)
+    {
+        measurements.emplace(kernel.name + " #" + support::cpp11::to_string(kernel_number++), kernel.measurements.begin()->second);
+    }
+
+    return measurements;
+}
+} // namespace framework
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/framework/instruments/SchedulerTimer.h b/tests/framework/instruments/SchedulerTimer.h
new file mode 100644
index 0000000..446506a
--- /dev/null
+++ b/tests/framework/instruments/SchedulerTimer.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2017-2018 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.
+ */
+#ifndef ARM_COMPUTE_TEST_SCHEDULER_TIMER
+#define ARM_COMPUTE_TEST_SCHEDULER_TIMER
+
+#include "Instrument.h"
+#include "arm_compute/runtime/Scheduler.h"
+#include <list>
+
+namespace arm_compute
+{
+namespace test
+{
+namespace framework
+{
+/** Instrument creating measurements based on the information returned by clGetEventProfilingInfo for each OpenCL kernel executed*/
+class SchedulerTimer : public Instrument
+{
+public:
+    SchedulerTimer(const SchedulerTimer &) = delete;
+    SchedulerTimer &operator=(const SchedulerTimer &) = delete;
+    SchedulerTimer(ScaleFactor scale_factor);
+    std::string                 id() const override;
+    void                        start() override;
+    void                        stop() override;
+    Instrument::MeasurementsMap measurements() const override;
+    struct kernel_info
+    {
+        Instrument::MeasurementsMap measurements{}; /**< Time it took the kernel to run */
+        std::string                 name{};         /**< Kernel name */
+    };
+
+private:
+    std::list<kernel_info> _kernels;
+    IScheduler            *_real_scheduler;
+    Scheduler::Type        _real_scheduler_type;
+    ScaleFactor            _scale_factor;
+};
+} // namespace framework
+} // namespace test
+} // namespace arm_compute
+#endif /* ARM_COMPUTE_TEST_SCHEDULER_TIMER */