diff options
author | Georgios Pinitas <georgios.pinitas@arm.com> | 2018-08-15 12:14:46 +0100 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:54:54 +0000 |
commit | 2a2db590fd179dcb8e1a575293cd2b887e2dc246 (patch) | |
tree | 5e10da7cb6777f3020b84a2389b279ceef2be5ee /src/graph/Utils.cpp | |
parent | c1961b51df2e15a01a5950139e81bbd47fbfa627 (diff) | |
download | ComputeLibrary-2a2db590fd179dcb8e1a575293cd2b887e2dc246.tar.gz |
COMPMID-1505: Add native grouping support at graph level
Change-Id: Iedc91b0aee743b59af5140c8acb8124548da3163
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/144362
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Giorgio Arena <giorgio.arena@arm.com>
Reviewed-by: Michele DiGiorgio <michele.digiorgio@arm.com>
Diffstat (limited to 'src/graph/Utils.cpp')
-rw-r--r-- | src/graph/Utils.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/graph/Utils.cpp b/src/graph/Utils.cpp index 4715694f15..75644a8933 100644 --- a/src/graph/Utils.cpp +++ b/src/graph/Utils.cpp @@ -78,13 +78,21 @@ PassManager create_default_pass_manager(Target target) { PassManager pm; + // Passes that mutate graph IR + pm.append(support::cpp14::make_unique<GroupedConvolutionMutator>()); if(target != Target::GC) { pm.append(support::cpp14::make_unique<NodeFusionMutator>()); pm.append(support::cpp14::make_unique<InPlaceOperationMutator>()); + } + + // Passes that mutate backend information + if(target != Target::GC) + { pm.append(support::cpp14::make_unique<DepthConcatSubTensorMutator>()); pm.append(support::cpp14::make_unique<SplitLayerSubTensorMutator>()); } + pm.append(support::cpp14::make_unique<NodeExecutionMethodMutator>()); return pm; } @@ -139,5 +147,38 @@ size_t get_dimension_idx(const TensorDescriptor &descriptor, const DataLayoutDim break; } } + +std::vector<NodeIdxPair> get_driving_nodes(const INode &node) +{ + std::vector<NodeIdxPair> driving_nodes; + + const Graph *g = node.graph(); + ARM_COMPUTE_ERROR_ON(g == nullptr); + + for(auto &output_edge_id : node.output_edges()) + { + auto output_edge = g->edge(output_edge_id); + if(output_edge != nullptr) + { + ARM_COMPUTE_ERROR_ON(output_edge->consumer() == nullptr); + driving_nodes.push_back({ output_edge->consumer_id(), output_edge->consumer_idx() }); + } + } + + return driving_nodes; +} + +void configure_tensor(Tensor *tensor) +{ + if(tensor != nullptr && tensor->handle() == nullptr) + { + Target target = tensor->desc().target; + auto backend = backends::BackendRegistry::get().find_backend(target); + ARM_COMPUTE_ERROR_ON_MSG(!backend, "Requested backend doesn't exist!"); + auto handle = backend->create_tensor(*tensor); + ARM_COMPUTE_ERROR_ON_MSG(!backend, "Couldn't create backend handle!"); + tensor->set_handle(std::move(handle)); + } +} } // namespace graph } // namespace arm_compute |