aboutsummaryrefslogtreecommitdiff
path: root/arm_compute/dynamic_fusion
diff options
context:
space:
mode:
Diffstat (limited to 'arm_compute/dynamic_fusion')
-rw-r--r--arm_compute/dynamic_fusion/sketch/MemoryDescriptor.h27
-rw-r--r--arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h17
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*/
};