diff options
Diffstat (limited to 'src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp')
-rw-r--r-- | src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp | 88 |
1 files changed, 84 insertions, 4 deletions
diff --git a/src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp b/src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp index 623bf351f8..50f34d9c14 100644 --- a/src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp +++ b/src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Arm Limited. + * Copyright (c) 2022-2023 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -21,8 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ + #include "arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadContext.h" #include "arm_compute/core/CL/CLCompileContext.h" +#include "src/dynamic_fusion/sketch/gpu/GpuWorkloadContextImpl.h" namespace arm_compute { @@ -30,26 +32,104 @@ namespace experimental { namespace dynamic_fusion { + GpuWorkloadContext::GpuWorkloadContext(CLCompileContext *cl_compile_ctx) - : _gpu_language{ GpuLanguage::OpenCL }, _cl_compile_ctx{ cl_compile_ctx } + : _impl { std::make_unique<Impl>(GpuLanguage::OpenCL, cl_compile_ctx) } { } +GpuWorkloadContext::~GpuWorkloadContext() = default; + +GpuWorkloadContext::GpuWorkloadContext(GpuWorkloadContext &&other) = default; + +GpuWorkloadContext &GpuWorkloadContext::operator=(GpuWorkloadContext &&other) = default; + GpuTarget GpuWorkloadContext::gpu_target() const { - return _cl_compile_ctx->get_gpu_target(); + return _impl->cl_compile_context()->get_gpu_target(); } GpuLanguage GpuWorkloadContext::gpu_language() const { - return _gpu_language; + return _impl->gpu_language(); } const CLCompileContext *GpuWorkloadContext::cl_compile_context() const { + return _impl->cl_compile_context(); +} + +void GpuWorkloadContext::register_user_tensor(ITensorInfo &tensor_info) +{ + _impl->register_user_tensor(tensor_info); +} + +GpuWorkloadContext::Impl &GpuWorkloadContext::implementation() +{ + return *_impl; +} + +const GpuWorkloadContext::Impl &GpuWorkloadContext::implementation() const +{ + return *_impl; +} + +GpuWorkloadContext::Impl::Impl(GpuLanguage gpu_language, CLCompileContext *cl_compile_ctx) + : _gpu_language(gpu_language), _cl_compile_ctx(cl_compile_ctx), + _next_tensor_id(1), _mem_map() +{ +} + +GpuLanguage GpuWorkloadContext::Impl::gpu_language() const +{ + return _gpu_language; +} + +const CLCompileContext *GpuWorkloadContext::Impl::cl_compile_context() const +{ return _cl_compile_ctx; } +const MemoryDescriptorMap &GpuWorkloadContext::Impl::mem_map() const +{ + return _mem_map; +} + +void GpuWorkloadContext::Impl::register_user_tensor(ITensorInfo &tensor_info) +{ + ARM_COMPUTE_ERROR_ON(tensor_info.has_valid_id()); + + const auto tensor_id = next_tensor_id(); + + tensor_info.set_id(tensor_id); + _mem_map[tensor_id] = MemoryDescriptor{ MemoryType::User }; +} + +void GpuWorkloadContext::Impl::register_aux_tensor(ITensorInfo &tensor_info, const AuxMemoryInfo &mem_info) +{ + ARM_COMPUTE_ERROR_ON(tensor_info.has_valid_id()); + + const auto tensor_id = next_tensor_id(); + + tensor_info.set_id(tensor_id); + _mem_map[tensor_id] = MemoryDescriptor{ MemoryType::Auxiliary, mem_info }; +} + +void GpuWorkloadContext::Impl::register_virtual_tensor(ITensorInfo &tensor_info) +{ + ARM_COMPUTE_ERROR_ON(tensor_info.has_valid_id()); + + const auto tensor_id = -next_tensor_id(); + + tensor_info.set_id(tensor_id); + _mem_map[tensor_id] = MemoryDescriptor{ MemoryType::Virtual }; +} + +ITensorInfo::Id GpuWorkloadContext::Impl::next_tensor_id() +{ + return _next_tensor_id++; +} + } // namespace dynamic_fusion } // namespace experimental } // namespace arm_compute |