diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt
index 4dfce43..d5dccb6 100644
--- a/src/backends/cl/workloads/CMakeLists.txt
+++ b/src/backends/cl/workloads/CMakeLists.txt
@@ -28,6 +28,8 @@
     ClFloorFloatWorkload.hpp
     ClFullyConnectedWorkload.cpp
     ClFullyConnectedWorkload.hpp
+    ClGreaterWorkload.cpp
+    ClGreaterWorkload.hpp
     ClL2NormalizationFloatWorkload.cpp
     ClL2NormalizationFloatWorkload.hpp
     ClLstmFloatWorkload.cpp
diff --git a/src/backends/cl/workloads/ClGreaterWorkload.cpp b/src/backends/cl/workloads/ClGreaterWorkload.cpp
new file mode 100644
index 0000000..435ead8
--- /dev/null
+++ b/src/backends/cl/workloads/ClGreaterWorkload.cpp
@@ -0,0 +1,65 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "ClGreaterWorkload.hpp"
+
+#include "ClWorkloadUtils.hpp"
+
+#include <aclCommon/ArmComputeUtils.hpp>
+#include <aclCommon/ArmComputeTensorUtils.hpp>
+
+#include <backendsCommon/CpuTensorHandle.hpp>
+
+#include <cl/ClLayerSupport.hpp>
+#include <cl/ClTensorHandle.hpp>
+#include <cl/ClLayerSupport.hpp>
+
+namespace armnn
+{
+
+using namespace armcomputetensorutils;
+
+arm_compute::Status ClGreaterWorkloadValidate(const TensorInfo& input0,
+                                              const TensorInfo& input1,
+                                              const TensorInfo& output)
+{
+    const arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);
+    const arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);
+    const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
+
+    const arm_compute::Status aclStatus = arm_compute::CLComparison::validate(
+        &aclInput0Info,
+        &aclInput1Info,
+        &aclOutputInfo,
+        arm_compute::ComparisonOperation::Greater);
+
+    return aclStatus;
+}
+
+template<DataType T>
+ClGreaterWorkload<T>::ClGreaterWorkload(const GreaterQueueDescriptor& descriptor,
+                                        const WorkloadInfo& info)
+    : MultiTypedWorkload<GreaterQueueDescriptor, T, DataType::Boolean>(descriptor, info)
+{
+    m_Data.ValidateInputsOutputs("ClGreaterWorkload", 2, 1);
+
+    arm_compute::ICLTensor& input0 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
+    arm_compute::ICLTensor& input1 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
+    arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
+
+    m_GreaterLayer.configure(&input0, &input1, &output, arm_compute::ComparisonOperation::Greater);
+}
+
+template<DataType T>
+void ClGreaterWorkload<T>::Execute() const
+{
+    ARMNN_SCOPED_PROFILING_EVENT_CL("ClGreaterWorkload_Execute");
+    RunClFunction(m_GreaterLayer, CHECK_LOCATION());
+}
+
+template class ClGreaterWorkload<DataType::Float32>;
+template class ClGreaterWorkload<DataType::QuantisedAsymm8>;
+
+} //namespace armnn
diff --git a/src/backends/cl/workloads/ClGreaterWorkload.hpp b/src/backends/cl/workloads/ClGreaterWorkload.hpp
new file mode 100644
index 0000000..69d017e
--- /dev/null
+++ b/src/backends/cl/workloads/ClGreaterWorkload.hpp
@@ -0,0 +1,34 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <backendsCommon/Workload.hpp>
+
+#include <arm_compute/runtime/CL/CLFunctions.h>
+
+namespace armnn
+{
+
+arm_compute::Status ClGreaterWorkloadValidate(const TensorInfo& input0,
+                                              const TensorInfo& input1,
+                                              const TensorInfo& output);
+
+template<DataType T>
+class ClGreaterWorkload : public MultiTypedWorkload<GreaterQueueDescriptor, T, DataType::Boolean>
+{
+public:
+    ClGreaterWorkload(const GreaterQueueDescriptor& descriptor, const WorkloadInfo& info);
+    void Execute() const override;
+
+private:
+    using MultiTypedWorkload<GreaterQueueDescriptor, T, DataType::Boolean>::m_Data;
+    mutable arm_compute::CLComparison m_GreaterLayer;
+};
+
+using ClGreaterFloat32Workload = ClGreaterWorkload<DataType::Float32>;
+using ClGreaterUint8Workload = ClGreaterWorkload<DataType::QuantisedAsymm8>;
+
+} //namespace armnn
diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp
index be22392..36f2b90 100644
--- a/src/backends/cl/workloads/ClWorkloads.hpp
+++ b/src/backends/cl/workloads/ClWorkloads.hpp
@@ -14,6 +14,7 @@
 #include "ClDivisionFloatWorkload.hpp"
 #include "ClFloorFloatWorkload.hpp"
 #include "ClFullyConnectedWorkload.hpp"
+#include "ClGreaterWorkload.hpp"
 #include "ClL2NormalizationFloatWorkload.hpp"
 #include "ClLstmFloatWorkload.hpp"
 #include "ClMergerWorkload.hpp"
