diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8fdfc95..d686d3f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -474,6 +474,8 @@
     src/profiling/ProfilingConnectionDumpToFileDecorator.hpp
     src/profiling/ProfilingConnectionFactory.cpp
     src/profiling/ProfilingConnectionFactory.hpp
+    src/profiling/ProfilingGuid.hpp
+    src/profiling/ProfilingGuidGenerator.hpp
     src/profiling/ProfilingService.cpp
     src/profiling/ProfilingService.hpp
     src/profiling/ProfilingStateMachine.cpp
@@ -609,6 +611,7 @@
         src/armnnUtils/test/TensorUtilsTest.cpp
         src/profiling/test/BufferTests.cpp
         src/profiling/test/ProfilingConnectionDumpToFileDecoratorTests.cpp
+        src/profiling/test/ProfilingGuidTest.cpp
         src/profiling/test/ProfilingTests.cpp
         src/profiling/test/ProfilingTests.hpp
         src/profiling/test/SendCounterPacketTests.cpp
diff --git a/src/profiling/ProfilingGuid.hpp b/src/profiling/ProfilingGuid.hpp
new file mode 100644
index 0000000..84d2db7
--- /dev/null
+++ b/src/profiling/ProfilingGuid.hpp
@@ -0,0 +1,70 @@
+//
+// Copyright © 2019 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <stdint.h>
+
+namespace armnn
+{
+
+namespace profiling
+{
+
+class ProfilingGuid
+{
+public:
+    ProfilingGuid(uint64_t guid) : m_Guid(guid) {}
+
+    operator uint64_t () const { return m_Guid; }
+
+    bool operator==(const ProfilingGuid& other) const
+    {
+        return m_Guid == other.m_Guid;
+    }
+
+    bool operator!=(const ProfilingGuid& other) const
+    {
+        return !(*this == other);
+    }
+
+    bool operator<(const ProfilingGuid& other) const
+    {
+        return m_Guid < other.m_Guid;
+    }
+
+    bool operator<=(const ProfilingGuid& other) const
+    {
+        return m_Guid <= other.m_Guid;
+    }
+
+    bool operator>(const ProfilingGuid& other) const
+    {
+        return m_Guid > other.m_Guid;
+    }
+
+    bool operator>=(const ProfilingGuid& other) const
+    {
+        return m_Guid >= other.m_Guid;
+    }
+
+protected:
+    uint64_t m_Guid;
+};
+
+/// Strongly typed guids to distinguish between those generated at runtime, and those that are statically defined.
+struct ProfilingDynamicGuid : public ProfilingGuid
+{
+    using ProfilingGuid::ProfilingGuid;
+};
+
+struct ProfilingStaticGuid : public ProfilingGuid
+{
+    using ProfilingGuid::ProfilingGuid;
+};
+
+} // namespace profiling
+
+} // namespace armnn
diff --git a/src/profiling/ProfilingGuidGenerator.hpp b/src/profiling/ProfilingGuidGenerator.hpp
new file mode 100644
index 0000000..7c43cab
--- /dev/null
+++ b/src/profiling/ProfilingGuidGenerator.hpp
@@ -0,0 +1,34 @@
+//
+// Copyright © 2019 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include "ProfilingGuid.hpp"
+
+namespace armnn
+{
+
+namespace profiling
+{
+
+class ProfilingGuidGenerator
+{
+public:
+    /// Construct a generator with the default address space static/dynamic partitioning
+    ProfilingGuidGenerator() : m_Sequence(0) {}
+
+    /// Return the next random Guid in the sequence
+    ProfilingDynamicGuid NextGuid();
+
+    /// Create a ProfilingStaticGuid based on a hash of the name
+    ProfilingStaticGuid GenerateStaticId(const char* name);
+
+private:
+    uint64_t m_Sequence;
+};
+
+} // namespace profiling
+
+} // namespace armnn
diff --git a/src/profiling/test/ProfilingGuidTest.cpp b/src/profiling/test/ProfilingGuidTest.cpp
new file mode 100644
index 0000000..fa01435
--- /dev/null
+++ b/src/profiling/test/ProfilingGuidTest.cpp
@@ -0,0 +1,62 @@
+//
+// Copyright © 2019 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "ProfilingGuid.hpp"
+
+#include <boost/test/unit_test.hpp>
+
+using namespace armnn::profiling;
+
+BOOST_AUTO_TEST_SUITE(ProfilingGuidTests)
+
+BOOST_AUTO_TEST_CASE(GuidTest)
+{
+    ProfilingGuid guid0(0);
+    ProfilingGuid guid1(1);
+    ProfilingGuid guid2(1);
+
+    BOOST_TEST(guid0 != guid1);
+    BOOST_TEST(guid1 == guid2);
+    BOOST_TEST(guid0 < guid1);
+    BOOST_TEST(guid0 <= guid1);
+    BOOST_TEST(guid1 <= guid2);
+    BOOST_TEST(guid1 > guid0);
+    BOOST_TEST(guid1 >= guid0);
+    BOOST_TEST(guid1 >= guid2);
+}
+
+BOOST_AUTO_TEST_CASE(StaticGuidTest)
+{
+    ProfilingStaticGuid guid0(0);
+    ProfilingStaticGuid guid1(1);
+    ProfilingStaticGuid guid2(1);
+
+    BOOST_TEST(guid0 != guid1);
+    BOOST_TEST(guid1 == guid2);
+    BOOST_TEST(guid0 < guid1);
+    BOOST_TEST(guid0 <= guid1);
+    BOOST_TEST(guid1 <= guid2);
+    BOOST_TEST(guid1 > guid0);
+    BOOST_TEST(guid1 >= guid0);
+    BOOST_TEST(guid1 >= guid2);
+}
+
+BOOST_AUTO_TEST_CASE(DynamicGuidTest)
+{
+    ProfilingDynamicGuid guid0(0);
+    ProfilingDynamicGuid guid1(1);
+    ProfilingDynamicGuid guid2(1);
+
+    BOOST_TEST(guid0 != guid1);
+    BOOST_TEST(guid1 == guid2);
+    BOOST_TEST(guid0 < guid1);
+    BOOST_TEST(guid0 <= guid1);
+    BOOST_TEST(guid1 <= guid2);
+    BOOST_TEST(guid1 > guid0);
+    BOOST_TEST(guid1 >= guid0);
+    BOOST_TEST(guid1 >= guid2);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
