aboutsummaryrefslogtreecommitdiff
path: root/src/dynamic_fusion/sketch/gpu/GpuKernelComponentGraph.cpp
diff options
context:
space:
mode:
authorSiCong Li <sicong.li@arm.com>2023-01-12 12:54:49 +0000
committerSiCong Li <sicong.li@arm.com>2023-01-20 15:21:31 +0000
commit5a2bc0169d942f7029d73a3afff1eab18b6f65ef (patch)
treeefa7850199b40109b73b0ee35bb8f57531c983e9 /src/dynamic_fusion/sketch/gpu/GpuKernelComponentGraph.cpp
parenta18d85c6d2c0025938c2dc10e553eb82c01922f2 (diff)
downloadComputeLibrary-5a2bc0169d942f7029d73a3afff1eab18b6f65ef.tar.gz
Add Auxiliary tensors
The asssign_memory_descriptors method could not automatically assign Auxiliary tensors. Therefore changes are made to allow developers to explicitly mark auxiliary tensors. However, to avoid ambiguity between auxiliary and "intermediate" tensors, we solidify the definitions of both: Intermediate tensors are a strictly topological term. They are defined as "inner" tensors within a workload, hidden from the user, as opposed to input and output tensors exposed to the users. Auxiliary tensors are a subcategory of Intermediate tensors, and are also about memory allocation. They are intermediate tensors that need real memory backing. For more details please see the documentation of MemoryType enum Rename MemoryType::NoAlloc to MemoryType::Virtual Partially resolves: COMPMID-5523 Signed-off-by: SiCong Li <sicong.li@arm.com> Change-Id: Ibde44c2ec1570be9423e0fb38b53bb136ffc36dd Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/8940 Benchmark: Arm Jenkins <bsgcomp@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com> Reviewed-by: Gunes Bayir <gunes.bayir@arm.com>
Diffstat (limited to 'src/dynamic_fusion/sketch/gpu/GpuKernelComponentGraph.cpp')
-rw-r--r--src/dynamic_fusion/sketch/gpu/GpuKernelComponentGraph.cpp51
1 files changed, 4 insertions, 47 deletions
diff --git a/src/dynamic_fusion/sketch/gpu/GpuKernelComponentGraph.cpp b/src/dynamic_fusion/sketch/gpu/GpuKernelComponentGraph.cpp
index 669913ce30..4cf7a7fece 100644
--- a/src/dynamic_fusion/sketch/gpu/GpuKernelComponentGraph.cpp
+++ b/src/dynamic_fusion/sketch/gpu/GpuKernelComponentGraph.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 Arm Limited.
+ * Copyright (c) 2022-2023 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -31,46 +31,6 @@ namespace experimental
{
namespace dynamic_fusion
{
-namespace
-{
-/** Automatically create memory descriptors for all tensors in the graph
- *
- * @param[in] tensors @ref ITensorInfo map
- * @param[in] graph @ref DependencyGraph of which the @p tensors are a part
- *
- * @return MemoryDescriptorMap An assignment map of @ref MemoryDescriptors for each ITensorInfo in the graph
- */
-MemoryDescriptorMap assign_memory_descriptors(const std::map<ITensorInfo::Id, const ITensorInfo *> tensors, const DependencyGraph &graph)
-{
- const auto all_tensors = graph.all_tensors();
- const auto src_tensors = graph.global_src_tensors();
- const auto dst_tensors = graph.global_dst_tensors();
- const auto interm_tensors = graph.intermediate_tensors();
-
- MemoryDescriptorMap mem_map{};
- for(auto t_id : all_tensors)
- {
- const auto &tensor = tensors.at(t_id);
- // Only global src and dst tensors to the entire component graph are "User" tensors, which are user-specified memories
- if(is_in(t_id, src_tensors) || is_in(t_id, dst_tensors))
- {
- mem_map[t_id] = MemoryDescriptor{ MemoryType::User };
- }
- else if(is_in(t_id, interm_tensors))
- {
- mem_map[t_id] = MemoryDescriptor { MemoryType::NoAlloc };
- }
- else
- {
- AuxMemoryInfo aux_mem_info{ tensor->total_size() };
- mem_map[t_id] = MemoryDescriptor{ MemoryType::Auxiliary, aux_mem_info };
- }
- }
- return mem_map;
-}
-
-} // namespace
-
std::vector<DependencyGraph::TensorId> GpuKernelComponentGraph::get_tensor_ids(const std::vector<const ITensorInfo *> tensors)
{
std::vector<DependencyGraph::TensorId> tensor_ids{};
@@ -89,19 +49,16 @@ GpuKernelComponentGraph::GpuKernelComponentGraph(GpuComponentServices *services)
{
}
-GpuKernelComponentStream GpuKernelComponentGraph::fuse() const
+GpuKernelComponentStream GpuKernelComponentGraph::fuse(const MemoryDescriptorMap &mem_map) const
{
- // Obtain memory descriptor map
- const auto mem_map = assign_memory_descriptors(_tensors, _dependency_graph);
-
GpuKernelComponentStream stream{ _services, mem_map };
- const auto op_seq = _dependency_graph.build_operators_sequence();
+ const auto op_seq = _dependency_graph.build_operators_sequence();
stream.new_component_group();
for(auto op : op_seq)
{
const auto component = _components.at(op.op).get();
- const auto success = stream.add_component(component);
+ const auto success = stream.add_component(component);
ARM_COMPUTE_ERROR_ON(!success);
ARM_COMPUTE_UNUSED(success);
}