diff options
28 files changed, 171 insertions, 111 deletions
diff --git a/delegate/src/test/DelegateOptionsTest.cpp b/delegate/src/test/DelegateOptionsTest.cpp index 8f6027df58..c7231fb279 100644 --- a/delegate/src/test/DelegateOptionsTest.cpp +++ b/delegate/src/test/DelegateOptionsTest.cpp @@ -4,6 +4,7 @@ // #include "DelegateOptionsTestHelper.hpp" +#include <common/include/ProfilingGuid.hpp> namespace armnnDelegate { diff --git a/include/armnn/Types.hpp b/include/armnn/Types.hpp index de475ab68f..d829bfae00 100644 --- a/include/armnn/Types.hpp +++ b/include/armnn/Types.hpp @@ -6,7 +6,6 @@ #include <array> #include <functional> -#include <memory> #include <stdint.h> #include <chrono> #include "BackendId.hpp" @@ -323,66 +322,6 @@ using DebugCallbackFunction = std::function<void(LayerGuid guid, unsigned int sl using HighResolutionClock = std::chrono::high_resolution_clock::time_point; using InferenceTimingPair = std::pair<HighResolutionClock, HighResolutionClock>; -namespace profiling -{ - -static constexpr uint64_t MIN_STATIC_GUID = 1llu << 63; - -class ProfilingGuid -{ -public: - ProfilingGuid() : m_Guid(0) {} - - 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 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; - } - - 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 /// This list uses X macro technique. /// See https://en.wikipedia.org/wiki/X_Macro for more info @@ -468,37 +407,3 @@ enum class LayerType const char* GetLayerTypeAsCString(LayerType type); } // namespace armnn - - -namespace std -{ -/// make ProfilingGuid hashable -template<> -struct hash<armnn::profiling::ProfilingGuid> -{ - std::size_t operator()(armnn::profiling::ProfilingGuid const& guid) const noexcept - { - return hash<uint64_t>()(uint64_t(guid)); - } -}; - -/// make ProfilingDynamicGuid hashable -template<> -struct hash<armnn::profiling::ProfilingDynamicGuid> -{ - std::size_t operator()(armnn::profiling::ProfilingDynamicGuid const& guid) const noexcept - { - return hash<uint64_t>()(uint64_t(guid)); - } -}; - -/// make ProfilingStaticGuid hashable -template<> -struct hash<armnn::profiling::ProfilingStaticGuid> -{ - std::size_t operator()(armnn::profiling::ProfilingStaticGuid const& guid) const noexcept - { - return hash<uint64_t>()(uint64_t(guid)); - } -}; -} // namespace std diff --git a/include/armnn/profiling/IProfilingGuidGenerator.hpp b/include/armnn/profiling/IProfilingGuidGenerator.hpp index fb9f7401fb..95a210604e 100644 --- a/include/armnn/profiling/IProfilingGuidGenerator.hpp +++ b/include/armnn/profiling/IProfilingGuidGenerator.hpp @@ -5,7 +5,7 @@ #pragma once -#include <armnn/Types.hpp> +#include <common/include/ProfilingGuid.hpp> #include <string> diff --git a/profiling/common/include/CommandHandlerFunctor.hpp b/profiling/common/include/CommandHandlerFunctor.hpp index 9827aa05ba..7e31a709a6 100644 --- a/profiling/common/include/CommandHandlerFunctor.hpp +++ b/profiling/common/include/CommandHandlerFunctor.hpp @@ -5,7 +5,7 @@ #pragma once -#include <Packet.hpp> +#include "Packet.hpp" #include <cstdint> namespace arm diff --git a/profiling/common/include/ProfilingGuid.hpp b/profiling/common/include/ProfilingGuid.hpp new file mode 100644 index 0000000000..4d0dd9b3c9 --- /dev/null +++ b/profiling/common/include/ProfilingGuid.hpp @@ -0,0 +1,113 @@ +// +// Copyright © 2021 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include <memory> +#include <stdint.h> + +namespace armnn +{ + +namespace profiling +{ + +static constexpr uint64_t MIN_STATIC_GUID = 1llu << 63; + +class ProfilingGuid +{ +public: + ProfilingGuid() : m_Guid(0) {} + + 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 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; + } + + 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 + + + +namespace std +{ +/// make ProfilingGuid hashable +template <> +struct hash<armnn::profiling::ProfilingGuid> +{ + std::size_t operator()(armnn::profiling::ProfilingGuid const& guid) const noexcept + { + return hash<uint64_t>()(uint64_t(guid)); + } +}; + +/// make ProfilingDynamicGuid hashable +template <> +struct hash<armnn::profiling::ProfilingDynamicGuid> +{ + std::size_t operator()(armnn::profiling::ProfilingDynamicGuid const& guid) const noexcept + { + return hash<uint64_t>()(uint64_t(guid)); + } +}; + +/// make ProfilingStaticGuid hashable +template <> +struct hash<armnn::profiling::ProfilingStaticGuid> +{ + std::size_t operator()(armnn::profiling::ProfilingStaticGuid const& guid) const noexcept + { + return hash<uint64_t>()(uint64_t(guid)); + } +}; + +} // namespace std
\ No newline at end of file diff --git a/python/pyarmnn/CMakeLists.txt b/python/pyarmnn/CMakeLists.txt index 2ef81d9ab7..4823c4db92 100644 --- a/python/pyarmnn/CMakeLists.txt +++ b/python/pyarmnn/CMakeLists.txt @@ -13,7 +13,7 @@ configure_file(${SWIG_GENERATE_IN} ${SWIG_GENERATE} COPYONLY) # local env variables passed down to the python scripts # scripts can thus be used standalone -set(ARMNN_ENV ARMNN_INCLUDE=${PROJECT_SOURCE_DIR}/include +set(ARMNN_ENV ARMNN_INCLUDE="${PROJECT_SOURCE_DIR}/include,${PROJECT_SOURCE_DIR}/profiling/common/include" ARMNN_LIB=${PROJECT_BINARY_DIR} SWIG_EXECUTABLE=${SWIG_EXECUTABLE}) diff --git a/python/pyarmnn/setup.py b/python/pyarmnn/setup.py index 78868549f3..7bc4a47619 100755 --- a/python/pyarmnn/setup.py +++ b/python/pyarmnn/setup.py @@ -124,12 +124,25 @@ def find_includes(armnn_include_env: str = INCLUDE_ENV_NAME): Returns: list: A list of paths to include. """ - armnn_include_path = os.getenv(armnn_include_env) - if armnn_include_path is not None and os.path.exists(armnn_include_path): - armnn_include_path = [armnn_include_path] - else: - armnn_include_path = ['/usr/local/include', '/usr/include'] - return armnn_include_path + + # split multiple paths + global armnn_include_path + armnn_include_path_raw = os.getenv(armnn_include_env) + if not armnn_include_path_raw == None: + armnn_include_path = armnn_include_path_raw.split(",") + + # validate input paths + armnn_include_path_result = [] + for path in armnn_include_path: + if path is not None and os.path.exists(path): + armnn_include_path_result = armnn_include_path_result + [path] + + + # if none exist revert to default + if len(armnn_include_path_result) == 0: + armnn_include_path_result = ['/usr/local/include', '/usr/include'] + return armnn_include_path_result + @lru_cache(maxsize=1) diff --git a/python/pyarmnn/src/pyarmnn/swig/armnn.i b/python/pyarmnn/src/pyarmnn/swig/armnn.i index 2227c9b20a..172d2d80cf 100644 --- a/python/pyarmnn/src/pyarmnn/swig/armnn.i +++ b/python/pyarmnn/src/pyarmnn/swig/armnn.i @@ -6,6 +6,7 @@ %{ #define SWIG_FILE_WITH_INIT #include "armnn/Types.hpp" +#include "ProfilingGuid.hpp" %} //typemap definitions and other common stuff diff --git a/python/pyarmnn/src/pyarmnn/swig/armnn_deserializer.i b/python/pyarmnn/src/pyarmnn/swig/armnn_deserializer.i index bc8228a5eb..073fadaba9 100644 --- a/python/pyarmnn/src/pyarmnn/swig/armnn_deserializer.i +++ b/python/pyarmnn/src/pyarmnn/swig/armnn_deserializer.i @@ -6,6 +6,7 @@ %{ #include "armnnDeserializer/IDeserializer.hpp" #include "armnn/Types.hpp" +#include "ProfilingGuid.hpp" #include "armnn/INetwork.hpp" #include "armnn/Exceptions.hpp" #include <string> diff --git a/python/pyarmnn/src/pyarmnn/swig/armnn_tfliteparser.i b/python/pyarmnn/src/pyarmnn/swig/armnn_tfliteparser.i index 3ed5d6b8fd..d2d79cc627 100644 --- a/python/pyarmnn/src/pyarmnn/swig/armnn_tfliteparser.i +++ b/python/pyarmnn/src/pyarmnn/swig/armnn_tfliteparser.i @@ -6,6 +6,7 @@ %{ #include "armnnTfLiteParser/ITfLiteParser.hpp" #include "armnn/Types.hpp" +#include "ProfilingGuid.hpp" #include "armnn/INetwork.hpp" %} diff --git a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i index a050722bb9..00b835bfb3 100644 --- a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i +++ b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i @@ -5,6 +5,7 @@ %{ #include "armnn/Descriptors.hpp" #include "armnn/Types.hpp" +#include "ProfilingGuid.hpp" %} namespace std { diff --git a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i index 57bf355253..7dc88ac176 100644 --- a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i +++ b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i @@ -6,6 +6,7 @@ #include "armnn/INetwork.hpp" #include "armnn/BackendId.hpp" #include "armnn/Types.hpp" +#include "ProfilingGuid.hpp" #include "armnn/Optional.hpp" #include <fstream> %} diff --git a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_types.i b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_types.i index e0ad174440..b838fce53d 100644 --- a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_types.i +++ b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_types.i @@ -4,6 +4,7 @@ // %{ #include "armnn/Types.hpp" +#include "ProfilingGuid.hpp" %} %include <typemaps/permutation_vector.i> @@ -110,6 +111,7 @@ Returns: #define ARMNN_DEPRECATED_ENUM // SWIG does not support C++ attributes, need this to help generate from Deprecated.hpp. #define ARMNN_DEPRECATED_ENUM_MSG(message) // SWIG does not support C++ attributes, need this to help generate from Deprecated.hpp. %include "armnn/Types.hpp" +%include "ProfilingGuid.hpp" diff --git a/src/armnn/InternalTypes.hpp b/src/armnn/InternalTypes.hpp index 9850520116..a46250546d 100644 --- a/src/armnn/InternalTypes.hpp +++ b/src/armnn/InternalTypes.hpp @@ -5,6 +5,7 @@ #pragma once #include <armnn/Types.hpp> +#include <common/include/ProfilingGuid.hpp> #include <array> diff --git a/src/armnn/OptimizedNetworkImpl.hpp b/src/armnn/OptimizedNetworkImpl.hpp index 25bf9ca49c..fe55ca233b 100644 --- a/src/armnn/OptimizedNetworkImpl.hpp +++ b/src/armnn/OptimizedNetworkImpl.hpp @@ -3,6 +3,8 @@ // SPDX-License-Identifier: MIT // +#include <common/include/ProfilingGuid.hpp> + namespace armnn { diff --git a/src/armnn/RangeTracker.hpp b/src/armnn/RangeTracker.hpp index 6662775e38..89d19acf79 100644 --- a/src/armnn/RangeTracker.hpp +++ b/src/armnn/RangeTracker.hpp @@ -8,6 +8,8 @@ #include <armnn/INetwork.hpp> #include <armnn/Types.hpp> +#include <common/include/ProfilingGuid.hpp> + #include <utility> #include <unordered_map> diff --git a/src/armnnSerializer/Serializer.hpp b/src/armnnSerializer/Serializer.hpp index 022cf64592..7bbcc2464e 100644 --- a/src/armnnSerializer/Serializer.hpp +++ b/src/armnnSerializer/Serializer.hpp @@ -10,6 +10,8 @@ #include <armnnSerializer/ISerializer.hpp> +#include <common/include/ProfilingGuid.hpp> + #include <unordered_map> #include "ArmnnSchema_generated.h" diff --git a/src/armnnUtils/DotSerializer.cpp b/src/armnnUtils/DotSerializer.cpp index 87376e61d1..0262b71cf2 100644 --- a/src/armnnUtils/DotSerializer.cpp +++ b/src/armnnUtils/DotSerializer.cpp @@ -5,6 +5,7 @@ #include "DotSerializer.hpp" #include "armnn/utility/StringUtils.hpp" +#include <common/include/ProfilingGuid.hpp> #include <sstream> #include <cstring> diff --git a/src/backends/reference/workloads/Debug.cpp b/src/backends/reference/workloads/Debug.cpp index df05ad73dc..24000d45e6 100644 --- a/src/backends/reference/workloads/Debug.cpp +++ b/src/backends/reference/workloads/Debug.cpp @@ -4,6 +4,7 @@ // #include "Debug.hpp" +#include <common/include/ProfilingGuid.hpp> #include <BFloat16.hpp> #include <Half.hpp> diff --git a/src/profiling/FileOnlyProfilingConnection.cpp b/src/profiling/FileOnlyProfilingConnection.cpp index a21ec2ff02..3b3d7a8284 100644 --- a/src/profiling/FileOnlyProfilingConnection.cpp +++ b/src/profiling/FileOnlyProfilingConnection.cpp @@ -4,11 +4,11 @@ // #include "FileOnlyProfilingConnection.hpp" -#include "PacketVersionResolver.hpp" #include <armnn/Exceptions.hpp> #include <common/include/Constants.hpp> #include <common/include/ProfilingException.hpp> +#include <common/include/PacketVersionResolver.hpp> #include <algorithm> #include <iostream> diff --git a/src/profiling/IProfilingServiceStatus.hpp b/src/profiling/IProfilingServiceStatus.hpp index 45d4aac088..1d272463ae 100644 --- a/src/profiling/IProfilingServiceStatus.hpp +++ b/src/profiling/IProfilingServiceStatus.hpp @@ -5,9 +5,10 @@ #pragma once -#include <Packet.hpp> #include <armnn/profiling/ILocalPacketHandler.hpp> +#include <common/include/Packet.hpp> + #include <cstdint> namespace armnn diff --git a/src/profiling/LabelsAndEventClasses.hpp b/src/profiling/LabelsAndEventClasses.hpp index b06b9a1488..dad27e1aed 100644 --- a/src/profiling/LabelsAndEventClasses.hpp +++ b/src/profiling/LabelsAndEventClasses.hpp @@ -6,8 +6,7 @@ #pragma once #include "ProfilingGuidGenerator.hpp" - -#include <armnn/Types.hpp> +#include <common/include/ProfilingGuid.hpp> #include <DllExport.hpp> namespace armnn diff --git a/src/profiling/PeriodicCounterCapture.hpp b/src/profiling/PeriodicCounterCapture.hpp index ac084af3dc..b7b1a20e1c 100644 --- a/src/profiling/PeriodicCounterCapture.hpp +++ b/src/profiling/PeriodicCounterCapture.hpp @@ -7,15 +7,17 @@ #include "IPeriodicCounterCapture.hpp" #include "Holder.hpp" -#include <Packet.hpp> #include "SendCounterPacket.hpp" #include "ICounterValues.hpp" #include "CounterIdMap.hpp" +#include <armnn/backends/profiling/IBackendProfilingContext.hpp> + +#include <common/include/Packet.hpp> + #include <atomic> #include <mutex> #include <thread> -#include <armnn/backends/profiling/IBackendProfilingContext.hpp> namespace armnn { diff --git a/src/profiling/ProfilingGuidGenerator.hpp b/src/profiling/ProfilingGuidGenerator.hpp index 86f9ce09de..3798e0cc2d 100644 --- a/src/profiling/ProfilingGuidGenerator.hpp +++ b/src/profiling/ProfilingGuidGenerator.hpp @@ -7,6 +7,8 @@ #include "armnn/profiling/IProfilingGuidGenerator.hpp" +#include <common/include/ProfilingGuid.hpp> + #include <functional> #include <mutex> diff --git a/src/profiling/ProfilingService.cpp b/src/profiling/ProfilingService.cpp index 6fe52f845e..fe407e478a 100644 --- a/src/profiling/ProfilingService.cpp +++ b/src/profiling/ProfilingService.cpp @@ -9,6 +9,8 @@ #include <armnn/Logging.hpp> #include <armnn/utility/NumericCast.hpp> +#include <common/include/ProfilingGuid.hpp> + #include <common/include/SocketConnectionException.hpp> #include <fmt/format.h> diff --git a/src/profiling/TimelineUtilityMethods.cpp b/src/profiling/TimelineUtilityMethods.cpp index e72894a6ab..f49801b0a8 100644 --- a/src/profiling/TimelineUtilityMethods.cpp +++ b/src/profiling/TimelineUtilityMethods.cpp @@ -3,9 +3,12 @@ // SPDX-License-Identifier: MIT // #include "LabelsAndEventClasses.hpp" -#include <Threads.hpp> #include "TimelineUtilityMethods.hpp" +#include <common/include/ProfilingGuid.hpp> + +#include <Threads.hpp> + namespace armnn { diff --git a/src/profiling/test/ProfilingMocks.hpp b/src/profiling/test/ProfilingMocks.hpp index 19d79e25e7..a34c849302 100644 --- a/src/profiling/test/ProfilingMocks.hpp +++ b/src/profiling/test/ProfilingMocks.hpp @@ -21,6 +21,8 @@ #include <armnn/utility/IgnoreUnused.hpp> #include <armnn/utility/NumericCast.hpp> +#include <common/include/ProfilingGuid.hpp> + #include <atomic> #include <condition_variable> #include <mutex> diff --git a/tests/InferenceModel.hpp b/tests/InferenceModel.hpp index fd2ab5f6ba..9d6096a3eb 100644 --- a/tests/InferenceModel.hpp +++ b/tests/InferenceModel.hpp @@ -11,6 +11,7 @@ #include <armnn/BackendRegistry.hpp> #include <armnn/utility/Assert.hpp> #include <armnn/utility/NumericCast.hpp> +#include <common/include/ProfilingGuid.hpp> #if defined(ARMNN_SERIALIZER) #include "armnnDeserializer/IDeserializer.hpp" |