aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2020-07-09 07:28:37 +0100
committerJim Flynn <jim.flynn@arm.com>2020-07-09 13:48:46 +0100
commit1fdeb99ca83bac83e0cacb332880e2e62dd22198 (patch)
tree76aa91baf9d3b7306b2fa15e1a50dc0bbfe3af26
parent86953ed331027bd557a80d782d5ee99298de35c4 (diff)
downloadarmnn-1fdeb99ca83bac83e0cacb332880e2e62dd22198.tar.gz
IVGCVSW-5095 Make timeline report the Linux Thread ID not the pthread ID
Change-Id: Id69519fd9ef57716de4e389ed4156710a904c701 Signed-off-by: Jim Flynn <jim.flynn@arm.com>
-rw-r--r--Android.mk1
-rw-r--r--CMakeLists.txt6
-rw-r--r--include/armnn/profiling/ISendTimelinePacket.hpp5
-rw-r--r--src/armnnUtils/Threads.cpp31
-rw-r--r--src/armnnUtils/Threads.hpp16
-rw-r--r--src/profiling/ProfilingUtils.cpp4
-rw-r--r--src/profiling/ProfilingUtils.hpp6
-rw-r--r--src/profiling/SendTimelinePacket.cpp4
-rw-r--r--src/profiling/SendTimelinePacket.hpp4
-rw-r--r--src/profiling/TimelineUtilityMethods.cpp6
-rw-r--r--src/profiling/test/ProfilingTestUtils.cpp5
-rw-r--r--src/profiling/test/ProfilingTestUtils.hpp2
-rw-r--r--src/profiling/test/SendTimelinePacketTests.cpp3
-rw-r--r--src/profiling/test/TimelinePacketTests.cpp9
-rw-r--r--src/timelineDecoder/tests/TimelineTests.cpp7
-rw-r--r--tests/profiling/gatordmock/tests/GatordMockTests.cpp2
16 files changed, 82 insertions, 29 deletions
diff --git a/Android.mk b/Android.mk
index 38b2ad4008..781aba6d45 100644
--- a/Android.mk
+++ b/Android.mk
@@ -131,6 +131,7 @@ LOCAL_SRC_FILES := \
src/armnnUtils/VerificationHelpers.cpp \
src/armnnUtils/Filesystem.cpp \
src/armnnUtils/Processes.cpp \
+ src/armnnUtils/Threads.cpp \
src/armnnUtils/Transpose.cpp \
src/armnn/layers/ActivationLayer.cpp \
src/armnn/layers/AdditionLayer.cpp \
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 968c57f9ef..2586d22f0c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -45,8 +45,6 @@ list(APPEND armnnUtils_sources
src/armnnUtils/BFloat16.hpp
src/armnnUtils/Filesystem.hpp
src/armnnUtils/Filesystem.cpp
- src/armnnUtils/Processes.hpp
- src/armnnUtils/Processes.cpp
src/armnnUtils/GraphTopologicalSort.hpp
src/armnnUtils/Half.hpp
src/armnnUtils/Permute.cpp
@@ -67,11 +65,15 @@ list(APPEND armnnUtils_sources
src/armnnUtils/ParserHelper.hpp
src/armnnUtils/ParserHelper.cpp
src/armnnUtils/ParserPrototxtFixture.hpp
+ src/armnnUtils/Processes.hpp
+ src/armnnUtils/Processes.cpp
src/armnnUtils/PrototxtConversions.hpp
src/armnnUtils/PrototxtConversions.cpp
src/armnnUtils/QuantizeHelper.hpp
src/armnnUtils/TensorIOUtils.hpp
src/armnnUtils/TensorUtils.cpp
+ src/armnnUtils/Threads.hpp
+ src/armnnUtils/Threads.cpp
src/armnnUtils/Transpose.cpp
src/armnnUtils/WindowsWrapper.hpp
)
diff --git a/include/armnn/profiling/ISendTimelinePacket.hpp b/include/armnn/profiling/ISendTimelinePacket.hpp
index 0eba33361a..c5da5219f7 100644
--- a/include/armnn/profiling/ISendTimelinePacket.hpp
+++ b/include/armnn/profiling/ISendTimelinePacket.hpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2019 Arm Ltd. All rights reserved.
+// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -7,7 +7,6 @@
#include <algorithm>
#include <string>
-#include <thread>
#include <vector>
namespace armnn
@@ -38,7 +37,7 @@ public:
/// Create and write a TimelineEventBinaryPacket from the parameters to the buffer.
virtual void
- SendTimelineEventBinaryPacket(uint64_t timestamp, std::thread::id threadId, uint64_t profilingGuid) = 0;
+ SendTimelineEventBinaryPacket(uint64_t timestamp, int threadId, uint64_t profilingGuid) = 0;
/// Create and write a TimelineEventClassBinaryPacket from the parameters to the buffer.
virtual void SendTimelineEventClassBinaryPacket(uint64_t profilingGuid, uint64_t nameGuid) = 0;
diff --git a/src/armnnUtils/Threads.cpp b/src/armnnUtils/Threads.cpp
new file mode 100644
index 0000000000..561edcb8b7
--- /dev/null
+++ b/src/armnnUtils/Threads.cpp
@@ -0,0 +1,31 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "Threads.hpp"
+
+#if defined(__linux__)
+#include <unistd.h>
+#include <sys/syscall.h>
+#define gettid() syscall(SYS_gettid)
+#elif defined(_MSC_VER)
+#include "WindowsWrapper.hpp"
+#endif
+
+namespace armnnUtils
+{
+namespace Threads
+{
+
+int GetCurrentThreadId()
+{
+#if defined(__linux__)
+ return static_cast<int>(gettid());
+#elif defined(_MSC_VER)
+ return ::GetCurrentThreadId();
+#endif
+}
+
+}
+}
diff --git a/src/armnnUtils/Threads.hpp b/src/armnnUtils/Threads.hpp
new file mode 100644
index 0000000000..4cecfd5079
--- /dev/null
+++ b/src/armnnUtils/Threads.hpp
@@ -0,0 +1,16 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+namespace armnnUtils
+{
+namespace Threads
+{
+
+int GetCurrentThreadId();
+
+}
+}
diff --git a/src/profiling/ProfilingUtils.cpp b/src/profiling/ProfilingUtils.cpp
index d67694fc33..3f6e56349b 100644
--- a/src/profiling/ProfilingUtils.cpp
+++ b/src/profiling/ProfilingUtils.cpp
@@ -802,7 +802,7 @@ TimelinePacketStatus WriteTimelineEventClassBinary(uint64_t profilingGuid,
}
TimelinePacketStatus WriteTimelineEventBinary(uint64_t timestamp,
- std::thread::id threadId,
+ int threadId,
uint64_t profilingGuid,
unsigned char* buffer,
unsigned int remainingBufferSize,
@@ -1093,7 +1093,7 @@ Packet ReceivePacket(const unsigned char* buffer, uint32_t length)
namespace std
{
-bool operator==(const std::vector<uint8_t>& left, std::thread::id right)
+bool operator==(const std::vector<uint8_t>& left, int right)
{
return std::memcmp(left.data(), &right, left.size()) == 0;
}
diff --git a/src/profiling/ProfilingUtils.hpp b/src/profiling/ProfilingUtils.hpp
index 95fa780934..2ead31652d 100644
--- a/src/profiling/ProfilingUtils.hpp
+++ b/src/profiling/ProfilingUtils.hpp
@@ -28,7 +28,7 @@ namespace armnn
namespace profiling
{
-constexpr unsigned int ThreadIdSize = sizeof(std::thread::id); // Is platform dependent
+constexpr unsigned int ThreadIdSize = sizeof(int); // Is platform dependent
struct SwTraceHeader
{
@@ -245,7 +245,7 @@ TimelinePacketStatus WriteTimelineEventClassBinary(uint64_t profilingGuid,
unsigned int& numberOfBytesWritten);
TimelinePacketStatus WriteTimelineEventBinary(uint64_t timestamp,
- std::thread::id threadId,
+ int threadId,
uint64_t profilingGuid,
unsigned char* buffer,
unsigned int bufferSize,
@@ -271,6 +271,6 @@ Packet ReceivePacket(const unsigned char* buffer, uint32_t length);
namespace std
{
-bool operator==(const std::vector<uint8_t>& left, std::thread::id right);
+bool operator==(const std::vector<uint8_t>& left, int right);
} // namespace std
diff --git a/src/profiling/SendTimelinePacket.cpp b/src/profiling/SendTimelinePacket.cpp
index 2ca5f5470b..11e3d2f489 100644
--- a/src/profiling/SendTimelinePacket.cpp
+++ b/src/profiling/SendTimelinePacket.cpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2019 Arm Ltd. All rights reserved.
+// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -89,7 +89,7 @@ void SendTimelinePacket::SendTimelineEntityBinaryPacket(uint64_t profilingGuid)
}
void SendTimelinePacket::SendTimelineEventBinaryPacket(uint64_t timestamp,
- std::thread::id threadId,
+ int threadId,
uint64_t profilingGuid)
{
ForwardWriteBinaryFunction(WriteTimelineEventBinary,
diff --git a/src/profiling/SendTimelinePacket.hpp b/src/profiling/SendTimelinePacket.hpp
index 2b710c7a25..90016d06f3 100644
--- a/src/profiling/SendTimelinePacket.hpp
+++ b/src/profiling/SendTimelinePacket.hpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2019 Arm Ltd. All rights reserved.
+// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -36,7 +36,7 @@ public:
void SendTimelineEntityBinaryPacket(uint64_t profilingGuid) override;
/// Create and write a TimelineEventBinaryPacket from the parameters to the buffer.
- void SendTimelineEventBinaryPacket(uint64_t timestamp, std::thread::id threadId, uint64_t profilingGuid) override;
+ void SendTimelineEventBinaryPacket(uint64_t timestamp, int threadId, uint64_t profilingGuid) override;
/// Create and write a TimelineEventClassBinaryPacket from the parameters to the buffer.
void SendTimelineEventClassBinaryPacket(uint64_t profilingGuid, uint64_t nameGuid) override;
diff --git a/src/profiling/TimelineUtilityMethods.cpp b/src/profiling/TimelineUtilityMethods.cpp
index 2727bd6e9b..fe5c6b1340 100644
--- a/src/profiling/TimelineUtilityMethods.cpp
+++ b/src/profiling/TimelineUtilityMethods.cpp
@@ -2,9 +2,9 @@
// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
-
-#include "TimelineUtilityMethods.hpp"
#include "LabelsAndEventClasses.hpp"
+#include <Threads.hpp>
+#include "TimelineUtilityMethods.hpp"
namespace armnn
{
@@ -368,7 +368,7 @@ ProfilingDynamicGuid TimelineUtilityMethods::RecordEvent(ProfilingGuid entityGui
uint64_t timestamp = GetTimestamp();
// Get the thread id
- std::thread::id threadId = std::this_thread::get_id();
+ int threadId = armnnUtils::Threads::GetCurrentThreadId();
// Generate a GUID for the event
ProfilingDynamicGuid eventGuid = profiling::ProfilingService::GetNextGuid();
diff --git a/src/profiling/test/ProfilingTestUtils.cpp b/src/profiling/test/ProfilingTestUtils.cpp
index 9f6bc43be8..526f3f95fd 100644
--- a/src/profiling/test/ProfilingTestUtils.cpp
+++ b/src/profiling/test/ProfilingTestUtils.cpp
@@ -8,6 +8,7 @@
#include <armnn/Descriptors.hpp>
#include <LabelsAndEventClasses.hpp>
+#include <Threads.hpp>
#include <ProfilingService.hpp>
#include <test/TestUtils.hpp>
@@ -295,7 +296,7 @@ ProfilingGuid VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
}
ProfilingGuid VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
- Optional<std::thread::id> threadId,
+ Optional<int> threadId,
Optional<ProfilingGuid> eventGuid,
const unsigned char* readableData,
unsigned int& offset)
@@ -333,7 +334,7 @@ ProfilingGuid VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
}
else
{
- BOOST_CHECK(readThreadId == std::this_thread::get_id());
+ BOOST_CHECK(readThreadId == armnnUtils::Threads::GetCurrentThreadId());
}
// Check the event GUID
diff --git a/src/profiling/test/ProfilingTestUtils.hpp b/src/profiling/test/ProfilingTestUtils.hpp
index 8f138bb315..4daf9d5f4a 100644
--- a/src/profiling/test/ProfilingTestUtils.hpp
+++ b/src/profiling/test/ProfilingTestUtils.hpp
@@ -53,7 +53,7 @@ ProfilingGuid VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
unsigned int& offset);
ProfilingGuid VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
- Optional<std::thread::id> threadId,
+ Optional<int> threadId,
Optional<ProfilingGuid> eventGuid,
const unsigned char* readableData,
unsigned int& offset);
diff --git a/src/profiling/test/SendTimelinePacketTests.cpp b/src/profiling/test/SendTimelinePacketTests.cpp
index 4b45cfef76..da30cef90c 100644
--- a/src/profiling/test/SendTimelinePacketTests.cpp
+++ b/src/profiling/test/SendTimelinePacketTests.cpp
@@ -6,6 +6,7 @@
#include "ProfilingMocks.hpp"
#include <BufferManager.hpp>
+#include <Threads.hpp>
#include <ProfilingService.hpp>
#include <ProfilingUtils.hpp>
#include <SendTimelinePacket.hpp>
@@ -322,7 +323,7 @@ BOOST_AUTO_TEST_CASE(SendEventClassAfterTimelineEntityPacketTest)
// Send TimelineEventBinaryPacket
const uint64_t timestamp = 456789u;
- const std::thread::id threadId = std::this_thread::get_id();
+ const int threadId = armnnUtils::Threads::GetCurrentThreadId();
const uint64_t eventProfilingGuid = 123456u;
sendTimelinePacket->SendTimelineEventBinaryPacket(timestamp, threadId, eventProfilingGuid);
diff --git a/src/profiling/test/TimelinePacketTests.cpp b/src/profiling/test/TimelinePacketTests.cpp
index 96e9bf2400..71c6915a8c 100644
--- a/src/profiling/test/TimelinePacketTests.cpp
+++ b/src/profiling/test/TimelinePacketTests.cpp
@@ -3,6 +3,7 @@
// SPDX-License-Identifier: MIT
//
+#include <Threads.hpp>
#include <ProfilingUtils.hpp>
#include <boost/test/unit_test.hpp>
@@ -724,7 +725,7 @@ BOOST_AUTO_TEST_CASE(TimelineEventClassTestFullConstructionOfData)
BOOST_AUTO_TEST_CASE(TimelineEventPacketTestNoBuffer)
{
const uint64_t timestamp = 456789u;
- const std::thread::id threadId = std::this_thread::get_id();
+ const int threadId = armnnUtils::Threads::GetCurrentThreadId();
const uint64_t profilingGuid = 123456u;
unsigned int numberOfBytesWritten = 789u;
TimelinePacketStatus result = WriteTimelineEventBinary(timestamp,
@@ -742,7 +743,7 @@ BOOST_AUTO_TEST_CASE(TimelineEventPacketTestBufferExhaustionZeroValue)
std::vector<unsigned char> buffer(512, 0);
const uint64_t timestamp = 456789u;
- const std::thread::id threadId = std::this_thread::get_id();
+ const int threadId = armnnUtils::Threads::GetCurrentThreadId();
const uint64_t profilingGuid = 123456u;
unsigned int numberOfBytesWritten = 789u;
TimelinePacketStatus result = WriteTimelineEventBinary(timestamp,
@@ -760,7 +761,7 @@ BOOST_AUTO_TEST_CASE(TimelineEventPacketTestBufferExhaustionFixedValue)
std::vector<unsigned char> buffer(10, 0);
const uint64_t timestamp = 456789u;
- const std::thread::id threadId = std::this_thread::get_id();
+ const int threadId = armnnUtils::Threads::GetCurrentThreadId();
const uint64_t profilingGuid = 123456u;
unsigned int numberOfBytesWritten = 789u;
TimelinePacketStatus result = WriteTimelineEventBinary(timestamp,
@@ -778,7 +779,7 @@ BOOST_AUTO_TEST_CASE(TimelineEventPacketTestFullConstructionOfData)
std::vector<unsigned char> buffer(512, 0);
const uint64_t timestamp = 456789u;
- const std::thread::id threadId = std::this_thread::get_id();
+ const int threadId = armnnUtils::Threads::GetCurrentThreadId();
const uint64_t profilingGuid = 123456u;
unsigned int numberOfBytesWritten = 789u;
TimelinePacketStatus result = WriteTimelineEventBinary(timestamp,
diff --git a/src/timelineDecoder/tests/TimelineTests.cpp b/src/timelineDecoder/tests/TimelineTests.cpp
index 8d0b8a0f08..08d29d0f6a 100644
--- a/src/timelineDecoder/tests/TimelineTests.cpp
+++ b/src/timelineDecoder/tests/TimelineTests.cpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2019 Arm Ltd. All rights reserved.
+// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -8,6 +8,7 @@
#include <TimelineDecoder.hpp>
#include <CommandHandlerFunctor.hpp>
+#include <Threads.hpp>
#include <ProfilingService.hpp>
#include <PacketBuffer.hpp>
#include <TimelinePacketWriterFactory.hpp>
@@ -172,7 +173,7 @@ BOOST_AUTO_TEST_CASE(TimelineCaptureTest)
const uint64_t timestamp = 33333u;
const uint64_t eventGuid = 44444u;
- const std::thread::id threadId = std::this_thread::get_id();
+ const int threadId = armnnUtils::Threads::GetCurrentThreadId();
// need to do a bit of work here to extract the value from threadId
unsigned char* uCharThreadId = new unsigned char[armnn::profiling::ThreadIdSize]();;
@@ -285,7 +286,7 @@ BOOST_AUTO_TEST_CASE(TimelineCaptureTestMultipleStringsInBuffer)
const uint64_t timestamp = 33333u;
const uint64_t eventGuid = 44444u;
- const std::thread::id threadId = std::this_thread::get_id();
+ const int threadId = armnnUtils::Threads::GetCurrentThreadId();
// need to do a bit of work here to extract the value from threadId
unsigned char* uCharThreadId = new unsigned char[armnn::profiling::ThreadIdSize]();
diff --git a/tests/profiling/gatordmock/tests/GatordMockTests.cpp b/tests/profiling/gatordmock/tests/GatordMockTests.cpp
index 0ee4601931..e99bdb55a7 100644
--- a/tests/profiling/gatordmock/tests/GatordMockTests.cpp
+++ b/tests/profiling/gatordmock/tests/GatordMockTests.cpp
@@ -127,7 +127,7 @@ void CheckTimelineDirectory(timelinedecoder::TimelineDirectoryCaptureCommandHand
uint32_t uint8_t_size = sizeof(uint8_t);
uint32_t uint32_t_size = sizeof(uint32_t);
uint32_t uint64_t_size = sizeof(uint64_t);
- uint32_t threadId_size = sizeof(std::thread::id);
+ uint32_t threadId_size = sizeof(int);
profiling::BufferManager bufferManager(5);
profiling::TimelinePacketWriterFactory timelinePacketWriterFactory(bufferManager);