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