diff options
author | Colm Donelan <colm.donelan@arm.com> | 2022-12-21 15:33:39 +0000 |
---|---|---|
committer | Colm Donelan <colm.donelan@arm.com> | 2023-01-05 11:57:23 +0000 |
commit | 7000d679b5e5ea1df64a25fbe8e97ec23b95aff6 (patch) | |
tree | e3c5c7ce8dd27d55c4551fcbfe3c0f35110222ee /src/armnn | |
parent | 0506ef0a099f5ba564af5e110e6857a68f462080 (diff) | |
download | armnn-7000d679b5e5ea1df64a25fbe8e97ec23b95aff6.tar.gz |
Deregistering custom allocators in RuntimeImpl destructor.
Signed-off-by: Colm Donelan <colm.donelan@arm.com>
Change-Id: Ib148daf81700d9038d6e91a35c9c17e770c26e84
Diffstat (limited to 'src/armnn')
-rw-r--r-- | src/armnn/Runtime.cpp | 10 | ||||
-rw-r--r-- | src/armnn/Runtime.hpp | 6 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp index 75b1ee8179..cec54f4ec8 100644 --- a/src/armnn/Runtime.cpp +++ b/src/armnn/Runtime.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2017 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2017, 2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -393,6 +393,7 @@ RuntimeImpl::RuntimeImpl(const IRuntime::CreationOptions& options) } // No errors so register the Custom Allocator with the BackendRegistry BackendRegistryInstance().RegisterAllocator(id, customAllocatorMapIterator->second); + m_AllocatorsAddedByThisRuntime.emplace(id); } else { @@ -428,6 +429,7 @@ RuntimeImpl::RuntimeImpl(const IRuntime::CreationOptions& options) } // No errors so register the Custom Allocator with the BackendRegistry BackendRegistryInstance().RegisterAllocator(id, customAllocatorMapIterator->second); + m_AllocatorsAddedByThisRuntime.emplace(id); } } @@ -584,6 +586,12 @@ RuntimeImpl::~RuntimeImpl() m_BackendContexts.clear(); BackendRegistryInstance().SetProfilingService(armnn::EmptyOptional()); + // Remove custom allocators that this runtime has added. + // Note: that as backends can be per process and there can be many instances of a runtime in a process an allocator + // may have been overwritten by another runtime. + for_each(m_AllocatorsAddedByThisRuntime.begin(), m_AllocatorsAddedByThisRuntime.end(), + [](BackendId id) {BackendRegistryInstance().DeregisterAllocator(id);}); + ARMNN_LOG(info) << "Shutdown time: " << std::setprecision(2) << std::fixed << armnn::GetTimeDuration(startTime).count() << " ms."; } diff --git a/src/armnn/Runtime.hpp b/src/armnn/Runtime.hpp index f5dfadf948..9d47b7898d 100644 --- a/src/armnn/Runtime.hpp +++ b/src/armnn/Runtime.hpp @@ -1,5 +1,5 @@ // -// Copyright © 2017 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2017, 2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once @@ -157,6 +157,10 @@ private: /// Profiling Service Instance std::unique_ptr<arm::pipe::IProfilingService> m_ProfilingService; + + /// Keep track of backend ids of the custom allocators that this instance of the runtime added. The + /// destructor can then clean up for this runtime. + std::set<BackendId> m_AllocatorsAddedByThisRuntime; }; } // namespace armnn |