From fdf56fb9d414a754e7cedfdc1351ab0ce2866a0c Mon Sep 17 00:00:00 2001 From: Viet-Hoa Do Date: Thu, 18 Jan 2024 16:10:46 +0000 Subject: Make GpuWorkloadContext own all tensor info objects * The tensor info objects created by calling create_tensor_info is now solely owned by the context object. The user only receives pointers to those objects. - Internally pointers to tensor info objects are used in various places. It's safer for dynamic fusion to manage these objects directly rather than relying on the users. - The validation test is updated to use the modified API. * Make various changes in dynamic fusion API to make it more friendly (e.g. making some of the objects moveable). Partially resolves: COMPMID-6707 Signed-off-by: Viet-Hoa Do Change-Id: Ifee70e53c05f8e7b72bf9ef123701ff291c5ee80 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/10990 Tested-by: Arm Jenkins Reviewed-by: Jakub Sujak Comments-Addressed: Arm Jenkins Benchmark: Arm Jenkins --- .../runtime/gpu/cl/ClWorkloadRuntime.h | 18 ++++++++++++---- .../dynamic_fusion/sketch/gpu/GpuWorkloadContext.h | 25 +++++++++++++--------- .../dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h | 21 ++++++++++++++---- 3 files changed, 46 insertions(+), 18 deletions(-) (limited to 'arm_compute') diff --git a/arm_compute/dynamic_fusion/runtime/gpu/cl/ClWorkloadRuntime.h b/arm_compute/dynamic_fusion/runtime/gpu/cl/ClWorkloadRuntime.h index 3deaff74fc..6b92f12223 100644 --- a/arm_compute/dynamic_fusion/runtime/gpu/cl/ClWorkloadRuntime.h +++ b/arm_compute/dynamic_fusion/runtime/gpu/cl/ClWorkloadRuntime.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2023 Arm Limited. + * Copyright (c) 2022-2024 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -21,8 +21,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef ARM_COMPUTE_DYNAMIC_FUSION_RUNTIME_GPU_CL_CLWORKLOADRUNTIME -#define ARM_COMPUTE_DYNAMIC_FUSION_RUNTIME_GPU_CL_CLWORKLOADRUNTIME +#ifndef ACL_ARM_COMPUTE_DYNAMIC_FUSION_RUNTIME_GPU_CL_CLWORKLOADRUNTIME_H +#define ACL_ARM_COMPUTE_DYNAMIC_FUSION_RUNTIME_GPU_CL_CLWORKLOADRUNTIME_H #include "arm_compute/core/TensorInfo.h" #include "arm_compute/dynamic_fusion/sketch/MemoryDescriptor.h" @@ -46,8 +46,18 @@ class GpuWorkloadSketch; class ClWorkloadRuntime { public: + /** Default constructor. */ ClWorkloadRuntime(); + + /** Destructor */ ~ClWorkloadRuntime(); + + /** Move constructor */ + ClWorkloadRuntime(ClWorkloadRuntime &&); + + /** Move assignment */ + ClWorkloadRuntime &operator=(ClWorkloadRuntime &&); + /** Configure @ref ClWorkloadRuntime * @note A runtime cannot be re-configured * @@ -78,4 +88,4 @@ private: } // namespace dynamic_fusion } // namespace experimental } // namespace arm_compute -#endif /* ARM_COMPUTE_DYNAMIC_FUSION_RUNTIME_GPU_CL_CLWORKLOADRUNTIME */ +#endif // ACL_ARM_COMPUTE_DYNAMIC_FUSION_RUNTIME_GPU_CL_CLWORKLOADRUNTIME_H diff --git a/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadContext.h b/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadContext.h index 38b350c7eb..76e425513e 100644 --- a/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadContext.h +++ b/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadContext.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2023 Arm Limited. + * Copyright (c) 2022-2024 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -21,8 +21,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADCONTEXT -#define ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADCONTEXT +#ifndef ACL_ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADCONTEXT_H +#define ACL_ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADCONTEXT_H #include "arm_compute/core/GPUTarget.h" #include "arm_compute/core/TensorInfo.h" @@ -85,11 +85,14 @@ public: * @return TensorInfo Newly created tensor info */ template - TensorInfo create_tensor_info(TArgs &&...args) + ITensorInfo *create_tensor_info(TArgs &&...args) { - auto tensor_info = TensorInfo(std::forward(args)...); - register_user_tensor(tensor_info); - return tensor_info; + auto tensor_info = std::make_unique(std::forward(args)...); + auto *tensor_info_ptr = tensor_info.get(); + + register_user_tensor(std::move(tensor_info)); + + return tensor_info_ptr; } /** Get the internal implementation */ @@ -101,9 +104,11 @@ public: private: /** Set a new ID to the tensor info and register its memory descriptor to the context. * - * @param[in,out] tensor_info @ref ITensorInfo to be registered. + * The ownership of the tensor info object will be transfered to this context object. + * + * @param[in] tensor_info @ref TensorInfo to be registered. */ - void register_user_tensor(ITensorInfo &tensor_info); + void register_user_tensor(std::unique_ptr &&tensor_info); /** Internal implementation */ std::unique_ptr _impl; @@ -113,4 +118,4 @@ private: } // namespace experimental } // namespace arm_compute -#endif /* ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADCONTEXT */ +#endif // ACL_ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADCONTEXT_H diff --git a/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h b/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h index 75c2b1f528..1c738bd060 100644 --- a/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h +++ b/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2023 Arm Limited. + * Copyright (c) 2022-2024 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -21,8 +21,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCH -#define ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCH +#ifndef ACL_ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCH_H +#define ACL_ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCH_H #include "arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadContext.h" @@ -53,15 +53,28 @@ public: * @param[in] context Gpu context for the creation of a workload */ explicit GpuWorkloadSketch(GpuWorkloadContext *context); + /** Destructor */ ~GpuWorkloadSketch(); + + /** Move constructor */ + GpuWorkloadSketch(GpuWorkloadSketch &&); + + /** Move assignment */ + GpuWorkloadSketch &operator=(GpuWorkloadSketch &&); + /** Get the implementation */ Implementation &implementation(); + /** Get the implementation */ const Implementation &implementation() const; + /** Get the gpu workload context of this sketch */ const GpuWorkloadContext *gpu_context() const; + /** Get the gpu workload context of this sketch */ + GpuWorkloadContext *gpu_context(); + private: std::unique_ptr _impl; /**< Internal opaque implementation*/ }; @@ -69,4 +82,4 @@ private: } // namespace dynamic_fusion } // namespace experimental } // namespace arm_compute -#endif /* ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCH */ +#endif // ACL_ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCH_H -- cgit v1.2.1