blob: 2b82c185f0e15ba5f86c80abdc0fa241b6bbe82d [file] [log] [blame]
arovir014424b0a2018-10-04 10:46:04 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "ClBackend.hpp"
David Beck3e9e1152018-10-17 14:17:50 +01007#include "ClBackendId.hpp"
arovir01a0944792018-10-11 15:00:58 +01008#include "ClWorkloadFactory.hpp"
David Beck1b61be52018-11-08 09:19:14 +00009#include "ClBackendContext.hpp"
David Beck111b5d92018-11-12 14:59:37 +000010#include "ClLayerSupport.hpp"
arovir01a0944792018-10-11 15:00:58 +010011
Aron Virginas-Tar56055192018-11-12 18:10:43 +000012#include <aclCommon/BaseMemoryManager.hpp>
13
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000014#include <backendsCommon/BackendRegistry.hpp>
Aron Virginas-Tar56055192018-11-12 18:10:43 +000015#include <backendsCommon/IBackendContext.hpp>
16#include <backendsCommon/IMemoryManager.hpp>
17
David Beck263e3492018-11-09 14:46:40 +000018#include <Optimizer.hpp>
arovir014424b0a2018-10-04 10:46:04 +010019
Aron Virginas-Tar56055192018-11-12 18:10:43 +000020#include <arm_compute/runtime/CL/CLBufferAllocator.h>
21
22#include <boost/polymorphic_pointer_cast.hpp>
23
arovir014424b0a2018-10-04 10:46:04 +010024namespace armnn
25{
26
David Beck6b779f02018-10-09 17:20:21 +010027namespace
28{
David Beck6b779f02018-10-09 17:20:21 +010029
David Beck111b5d92018-11-12 14:59:37 +000030static BackendRegistry::StaticRegistryInitializer g_RegisterHelper
David Beck3e9e1152018-10-17 14:17:50 +010031{
32 BackendRegistryInstance(),
David Beck3cc9a622018-10-12 10:38:31 +010033 ClBackend::GetIdStatic(),
David Beck9efb57d2018-11-05 13:40:33 +000034 []()
David Beck6b779f02018-10-09 17:20:21 +010035 {
David Beck29c75de2018-10-23 13:35:58 +010036 return IBackendInternalUniquePtr(new ClBackend);
David Beck6b779f02018-10-09 17:20:21 +010037 }
38};
39
David Beck9efb57d2018-11-05 13:40:33 +000040}
arovir014424b0a2018-10-04 10:46:04 +010041
David Beck3cc9a622018-10-12 10:38:31 +010042const BackendId& ClBackend::GetIdStatic()
arovir014424b0a2018-10-04 10:46:04 +010043{
David Beck3e9e1152018-10-17 14:17:50 +010044 static const BackendId s_Id{ClBackendId()};
arovir014424b0a2018-10-04 10:46:04 +010045 return s_Id;
46}
47
Aron Virginas-Tar56055192018-11-12 18:10:43 +000048IBackendInternal::IMemoryManagerUniquePtr ClBackend::CreateMemoryManager() const
arovir014424b0a2018-10-04 10:46:04 +010049{
Aron Virginas-Tar56055192018-11-12 18:10:43 +000050 return std::make_unique<ClMemoryManager>(std::make_unique<arm_compute::CLBufferAllocator>());
51}
52
53IBackendInternal::IWorkloadFactoryPtr ClBackend::CreateWorkloadFactory(
54 const IBackendInternal::IMemoryManagerSharedPtr& memoryManager) const
55{
56 return std::make_unique<ClWorkloadFactory>(
57 boost::polymorphic_pointer_downcast<ClMemoryManager>(memoryManager));
arovir014424b0a2018-10-04 10:46:04 +010058}
59
David Beck1b61be52018-11-08 09:19:14 +000060IBackendInternal::IBackendContextPtr
61ClBackend::CreateBackendContext(const IRuntime::CreationOptions& options) const
62{
63 return IBackendContextPtr{new ClBackendContext{options}};
64}
65
David Beck263e3492018-11-09 14:46:40 +000066IBackendInternal::Optimizations ClBackend::GetOptimizations() const
67{
68 return Optimizations{};
69}
David Beck1b61be52018-11-08 09:19:14 +000070
David Beck111b5d92018-11-12 14:59:37 +000071IBackendInternal::ILayerSupportSharedPtr ClBackend::GetLayerSupport() const
72{
73 static ILayerSupportSharedPtr layerSupport{new ClLayerSupport};
74 return layerSupport;
75}
76
David Beck9efb57d2018-11-05 13:40:33 +000077} // namespace armnn