xref: /aosp_15_r20/external/armnn/src/backends/cl/ClBackendDefaultAllocator.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker #pragma once
6*89c4ff92SAndroid Build Coastguard Worker #include <cstddef>
7*89c4ff92SAndroid Build Coastguard Worker #include <memory>
8*89c4ff92SAndroid Build Coastguard Worker #include <armnn/MemorySources.hpp>
9*89c4ff92SAndroid Build Coastguard Worker #include <armnn/utility/IgnoreUnused.hpp>
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker namespace armnn
12*89c4ff92SAndroid Build Coastguard Worker {
13*89c4ff92SAndroid Build Coastguard Worker /** Default Memory Allocator class returned from IBackendInternal::GetDefaultAllocator(MemorySource) */
14*89c4ff92SAndroid Build Coastguard Worker class ClBackendDefaultAllocator : public armnn::ICustomAllocator
15*89c4ff92SAndroid Build Coastguard Worker {
16*89c4ff92SAndroid Build Coastguard Worker public:
17*89c4ff92SAndroid Build Coastguard Worker     ClBackendDefaultAllocator() = default;
18*89c4ff92SAndroid Build Coastguard Worker 
allocate(size_t size,size_t alignment=0)19*89c4ff92SAndroid Build Coastguard Worker     void* allocate(size_t size, size_t alignment = 0) override
20*89c4ff92SAndroid Build Coastguard Worker     {
21*89c4ff92SAndroid Build Coastguard Worker         IgnoreUnused(alignment);
22*89c4ff92SAndroid Build Coastguard Worker         cl_mem buf{ clCreateBuffer(arm_compute::CLScheduler::get().context().get(),
23*89c4ff92SAndroid Build Coastguard Worker                                    CL_MEM_ALLOC_HOST_PTR | CL_MEM_READ_WRITE,
24*89c4ff92SAndroid Build Coastguard Worker                                    size,
25*89c4ff92SAndroid Build Coastguard Worker                                    nullptr,
26*89c4ff92SAndroid Build Coastguard Worker                                    nullptr)};
27*89c4ff92SAndroid Build Coastguard Worker         return static_cast<void *>(buf);
28*89c4ff92SAndroid Build Coastguard Worker     }
29*89c4ff92SAndroid Build Coastguard Worker 
free(void * ptr)30*89c4ff92SAndroid Build Coastguard Worker     void free(void* ptr) override
31*89c4ff92SAndroid Build Coastguard Worker     {
32*89c4ff92SAndroid Build Coastguard Worker         ARM_COMPUTE_ERROR_ON(ptr == nullptr);
33*89c4ff92SAndroid Build Coastguard Worker         clReleaseMemObject(static_cast<cl_mem>(ptr));
34*89c4ff92SAndroid Build Coastguard Worker     }
35*89c4ff92SAndroid Build Coastguard Worker 
GetMemorySourceType()36*89c4ff92SAndroid Build Coastguard Worker     armnn::MemorySource GetMemorySourceType() override
37*89c4ff92SAndroid Build Coastguard Worker     {
38*89c4ff92SAndroid Build Coastguard Worker         return armnn::MemorySource::Gralloc;
39*89c4ff92SAndroid Build Coastguard Worker     }
40*89c4ff92SAndroid Build Coastguard Worker 
GetMemoryRegionAtOffset(void * buffer,size_t offset,size_t alignment=0)41*89c4ff92SAndroid Build Coastguard Worker     void* GetMemoryRegionAtOffset(void* buffer, size_t offset, size_t alignment = 0) override
42*89c4ff92SAndroid Build Coastguard Worker     {
43*89c4ff92SAndroid Build Coastguard Worker         IgnoreUnused(alignment);
44*89c4ff92SAndroid Build Coastguard Worker         return static_cast<char*>(buffer) + offset;
45*89c4ff92SAndroid Build Coastguard Worker     }
46*89c4ff92SAndroid Build Coastguard Worker };
47*89c4ff92SAndroid Build Coastguard Worker } // namespace armnn