diff options
author | Viet-Hoa Do <viet-hoa.do@arm.com> | 2023-05-17 15:17:48 +0100 |
---|---|---|
committer | Viet-Hoa Do <viet-hoa.do@arm.com> | 2023-06-12 14:41:18 +0000 |
commit | 3fcf3dcf7b6ffc613468ccaca580bde495677440 (patch) | |
tree | 567c85806318a868b0029f969cac823dd48fe44a /src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp | |
parent | 48cfd5f7895f13167e4e9cd974dbc1e983e04ed7 (diff) | |
download | ComputeLibrary-3fcf3dcf7b6ffc613468ccaca580bde495677440.tar.gz |
Add multi-sketch support for dynamic fusion
* Tensors are owned by workload context instead of workload sketch
so that they can be used by multiple sketches.
* Add an integration test for multi-sketch case.
Resolves: COMPMID-6148
Signed-off-by: Viet-Hoa Do <viet-hoa.do@arm.com>
Change-Id: I37d0de5ac103fb2a85020aa1c26e49eb304f47b7
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/9706
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: SiCong Li <sicong.li@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
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 |