diff options
Diffstat (limited to 'arm_compute/dynamic_fusion')
-rw-r--r-- | arm_compute/dynamic_fusion/sketch/MemoryDescriptor.h | 27 | ||||
-rw-r--r-- | arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h | 17 |
2 files changed, 29 insertions, 15 deletions
diff --git a/arm_compute/dynamic_fusion/sketch/MemoryDescriptor.h b/arm_compute/dynamic_fusion/sketch/MemoryDescriptor.h index 25023ff0a1..3daedd4efb 100644 --- a/arm_compute/dynamic_fusion/sketch/MemoryDescriptor.h +++ b/arm_compute/dynamic_fusion/sketch/MemoryDescriptor.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Arm Limited. + * Copyright (c) 2022-2023 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -32,12 +32,31 @@ namespace experimental { namespace dynamic_fusion { -/** Type of memory used by a workload tensor */ +/** Type of memory used by a workload tensor + * + * We can classify tensors in 2 dimensions: Topology (where they are in a workload) and Memory allocation: + * Topology: + * Argument tensors: "Outer" tensors exposed to the users as inputs and outputs (arguments) + * Intermediate tensors: "Inner" tensors hidden from the users as links between operators + * Memory allocation: + * Alloc: Tensors that need to be allocated real backing memory + * No-Alloc: Tensors that don't need to be allocated real backing memory + * + * We end up with 3 MemoryType based on the product of these two classifications + * | Argument | Intermediate | + * ---------*----------------*-------------------* + * Alloc | User | Auxiliary | + * ---------*----------------*-------------------* + * No-Alloc * N/A | Virtual | + * ---------*----------------*-------------------* + */ enum class MemoryType { + /** Both User and Auxiliary types are of Alloc type. Since they require memory allocation */ User = 0, /**< Memory coming directly from users, e.g. for argument tensors */ - Auxiliary = 1, /**< Additional memory required by the workload tensor, e.g. for temporary tensors */ - NoAlloc = 2, /**< Temporary tile which is not allocated as a whole tensor in the memory */ + Auxiliary = 1, /**< Additional memory required by the workload tensor, e.g. for tensors holding temporary results between kernels */ + /** Virtual type is of No-Alloc type. Since it doesn't require memory allocation */ + Virtual = 2, /**< Temporary tile which is not allocated as a whole tensor in the memory. It is mainly used at sketch time to link operators; there should be no Virtual tensors at runtime */ }; /** Memory information for tensors with @ref MemoryType::Auxiliary. diff --git a/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h b/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h index f19ad6dfc5..422edb35f1 100644 --- a/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h +++ b/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h @@ -70,18 +70,9 @@ public: TensorInfo create_tensor_info(Args &&... args) { auto tensor_info = TensorInfo(std::forward<Args>(args)...); - tensor_info.set_id(allocate_new_tensor_id()); + register_new_tensor(tensor_info); return tensor_info; } - /** Create a @ref TensorInfo associated with the workload sketch by copying from an existing tensor info - * @note The newly copied tensor will have a different identity within the workload than the one copied from - * To copy the identity of @p tensor_info as well, use @ref TensorInfo 's copy constructors instead - * - * @param[in] tensor_info @ref ITensorInfo to copy from - * - * @return TensorInfo Newly created tensor info - */ - TensorInfo create_tensor_info(const ITensorInfo &tensor_info); /** Create a default @ref TensorInfo associated with the workload sketch * It is usually used by user input or output tensors * @@ -90,7 +81,11 @@ public: TensorInfo create_tensor_info(); private: - ITensorInfo::Id allocate_new_tensor_id(); + /** Register a new tensor by setting a new id to it and register its memory descriptor in the sketch + * + * @param[in,out] tensor_info @ref ITensorInfo that will be registered + */ + void register_new_tensor(ITensorInfo &tensor_info); std::unique_ptr<Implementation> _impl; /**< Internal opaque implementation*/ }; |