diff --git a/arm_compute/core/CL/CLKernels.h b/arm_compute/core/CL/CLKernels.h
index 1457d7b..a045322 100644
--- a/arm_compute/core/CL/CLKernels.h
+++ b/arm_compute/core/CL/CLKernels.h
@@ -125,6 +125,7 @@
 #include "arm_compute/core/CL/kernels/CLStridedSliceKernel.h"
 #include "arm_compute/core/CL/kernels/CLTableLookupKernel.h"
 #include "arm_compute/core/CL/kernels/CLThresholdKernel.h"
+#include "arm_compute/core/CL/kernels/CLTileKernel.h"
 #include "arm_compute/core/CL/kernels/CLTransposeKernel.h"
 #include "arm_compute/core/CL/kernels/CLUpsampleLayerKernel.h"
 #include "arm_compute/core/CL/kernels/CLWarpAffineKernel.h"
diff --git a/arm_compute/core/CL/kernels/CLTileKernel.h b/arm_compute/core/CL/kernels/CLTileKernel.h
new file mode 100644
index 0000000..e575b7b
--- /dev/null
+++ b/arm_compute/core/CL/kernels/CLTileKernel.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 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_CLTILEKERNEL_H__
+#define __ARM_COMPUTE_CLTILEKERNEL_H__
+
+#include "arm_compute/core/CL/ICLKernel.h"
+
+namespace arm_compute
+{
+class ICLTensor;
+
+/** OpenCL kernel to perform a Tile operation */
+class CLTileKernel : public ICLKernel
+{
+public:
+    /** Default constructor */
+    CLTileKernel();
+    /** Prevent instances of this class from being copied (As this class contains pointers) */
+    CLTileKernel(const CLTileKernel &) = delete;
+    /** Prevent instances of this class from being copied (As this class contains pointers) */
+    CLTileKernel &operator=(const CLTileKernel &) = delete;
+    /** Allow instances of this class to be moved */
+    CLTileKernel(CLTileKernel &&) = default;
+    /** Allow instances of this class to be moved */
+    CLTileKernel &operator=(CLTileKernel &&) = default;
+    /** Default destructor */
+    ~CLTileKernel() = default;
+    /** Set the source, destination of the kernel
+     *
+     * @param[in]  input     Source tensor. Data type supported:  U8/S8/QASYMM8/U16/S16/F16/U32/S32/F32.
+     * @param[in]  multiples Contains the number of times the input tensor should be replicated on the given dimension.
+     *                       Cannot have more than 4 elements (tiling in dimensions greater than 4 is not supported).
+     * @param[out] output    Destination tensor. Same as @p input
+     *
+     */
+    void configure(const ICLTensor *input, ICLTensor *output, const Multiples &multiples);
+    /** Static function to check if given info will lead to a valid configuration of @ref CLTileKernel
+     *
+     * @param[in] input     Source tensor info. Data type supported:  U8/S8/QASYMM8/U16/S16/F16/U32/S32/F32.
+     * @param[in] multiples Contains the number of times the input tensor should be replicated on the given dimension.
+     *                      Cannot have more than 4 elements (tiling in dimensions greater than 4 is not supported).
+     * @param[in] output    Destination tensor info. Same as @p input
+     *
+     *
+     * @return a status
+     */
+    static Status validate(const ITensorInfo *input, const ITensorInfo *output, const Multiples &multiples);
+
+    // Inherited methods overridden:
+    void run(const Window &window, cl::CommandQueue &queue) override;
+
+private:
+    const ICLTensor *_input;
+    ICLTensor       *_output;
+};
+} // namespace arm_compute
+#endif /*__ARM_COMPUTE_CLTILEKERNEL_H__ */
diff --git a/arm_compute/core/Types.h b/arm_compute/core/Types.h
index 9f3857c..d6122a6 100644
--- a/arm_compute/core/Types.h
+++ b/arm_compute/core/Types.h
@@ -479,6 +479,9 @@
 /** List of padding information */
 using PaddingList = std::vector<PaddingInfo>;
 
+/** Information to produce a tiled version of a Tensor */
+using Multiples = std::vector<uint32_t>;
+
 /** Region of interest */
 struct ROI
 {
diff --git a/arm_compute/core/utils/misc/ShapeCalculator.h b/arm_compute/core/utils/misc/ShapeCalculator.h
index da9ff56..38906df 100644
--- a/arm_compute/core/utils/misc/ShapeCalculator.h
+++ b/arm_compute/core/utils/misc/ShapeCalculator.h
@@ -671,6 +671,16 @@
     return padded_shape;
 }
 
+inline TensorShape compute_tiled_shape(const TensorShape &input_shape, const Multiples &multiples)
+{
+    TensorShape tiled_shape = input_shape;
+    for(size_t dim = 0; dim < multiples.size(); ++dim)
+    {
+        tiled_shape.set(dim, input_shape[dim] * multiples[dim]);
+    }
+    return tiled_shape;
+}
+
 inline TensorShape compute_upsample_shape(const ITensorInfo &input, const Size2D &info)
 {
     const DataLayout data_layout = input.data_layout();
diff --git a/arm_compute/runtime/CL/CLFunctions.h b/arm_compute/runtime/CL/CLFunctions.h
index b4c5c2e..b00270c 100644
--- a/arm_compute/runtime/CL/CLFunctions.h
+++ b/arm_compute/runtime/CL/CLFunctions.h
@@ -128,6 +128,7 @@
 #include "arm_compute/runtime/CL/functions/CLStridedSlice.h"
 #include "arm_compute/runtime/CL/functions/CLTableLookup.h"
 #include "arm_compute/runtime/CL/functions/CLThreshold.h"
+#include "arm_compute/runtime/CL/functions/CLTile.h"
 #include "arm_compute/runtime/CL/functions/CLTranspose.h"
 #include "arm_compute/runtime/CL/functions/CLUpsampleLayer.h"
 #include "arm_compute/runtime/CL/functions/CLWarpAffine.h"
diff --git a/arm_compute/runtime/CL/functions/CLTile.h b/arm_compute/runtime/CL/functions/CLTile.h
new file mode 100644
index 0000000..3e88896
--- /dev/null
+++ b/arm_compute/runtime/CL/functions/CLTile.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 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_CLTILE_H__
+#define __ARM_COMPUTE_CLTILE_H__
+
+#include "arm_compute/runtime/CL/ICLSimpleFunction.h"
+
+#include "arm_compute/core/Types.h"
+
+namespace arm_compute
+{
+class ICLTensor;
+
+/** Basic function to run @ref CLTileKernel */
+class CLTile : public ICLSimpleFunction
+{
+public:
+    /** Set the source, destination of the kernel
+     *
+     * @param[in]  input     Source tensor. Data type supported: U8/S8/QASYMM8/U16/S16/F16/U32/S32/F32
+     * @param[in]  multiples Contains the number of times the input tensor should be replicated on the given dimension.
+     * @param[out] output    Destination tensor. Same as @p input
+     */
+    void configure(const ICLTensor *input, ICLTensor *output, const Multiples &multiples);
+    /** Static function to check if given info will lead to a valid configuration of @ref CLTile
+     *
+     * @param[in] input     Source tensor info. Data type supported: U8/S8/QASYMM8/U16/S16/F16/U32/S32/F32
+     * @param[in] multiples Contains the number of times the input tensor should be replicated on the given dimension.
+     * @param[in] output    Destination tensor info. Same as @p input
+     *
+     * @return a status
+     */
+    static Status validate(const ITensorInfo *input, const ITensorInfo *output, const Multiples &multiples);
+};
+} // namespace arm_compute
+#endif /* __ARM_COMPUTE_CLTILE_H__ */
