From 5c2fb3f34462632b99331e2cc2d964c99fc1782b Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Tue, 1 May 2018 15:26:20 +0100 Subject: COMPMID-997: Add support for node's name in GraphAPI. Change-Id: I0ca02e42807c1ad9afeffb7202a3556feb11442f Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/129701 Tested-by: Jenkins Reviewed-by: Anthony Barbier Reviewed-by: Georgios Pinitas --- arm_compute/graph/Workload.h | 21 +++++++++++++++++++++ arm_compute/graph/frontend/ILayer.h | 22 ++++++++++++++++++++++ arm_compute/graph/frontend/IStreamOperators.h | 12 ++++++++++++ arm_compute/graph/frontend/Layers.h | 26 +++++++++++++------------- 4 files changed, 68 insertions(+), 13 deletions(-) (limited to 'arm_compute/graph') diff --git a/arm_compute/graph/Workload.h b/arm_compute/graph/Workload.h index 11bb22ea9a..5ca9fd6c58 100644 --- a/arm_compute/graph/Workload.h +++ b/arm_compute/graph/Workload.h @@ -39,6 +39,27 @@ class INode; class Tensor; class Graph; +struct ExecutionTask; + +void execute_task(ExecutionTask &task); + +/** Task executor */ +class TaskExecutor final +{ +private: + /** Default constructor **/ + TaskExecutor(); + +public: + /** Task executor accessor + * + * @return Task executor instance + */ + static TaskExecutor &get(); + /** Function that is responsible for executing tasks */ + std::function execute_function; +}; + /** Execution task * * Contains all the information required to execute a given task diff --git a/arm_compute/graph/frontend/ILayer.h b/arm_compute/graph/frontend/ILayer.h index 5add8ab440..f7caaea47d 100644 --- a/arm_compute/graph/frontend/ILayer.h +++ b/arm_compute/graph/frontend/ILayer.h @@ -46,6 +46,28 @@ public: * @return ID of the created node. */ virtual NodeID create_layer(IStream &s) = 0; + /** Sets the name of the layer + * + * @param[in] name Name of the layer + * + * @return The layer object + */ + ILayer &set_name(std::string name) + { + _name = name; + return *this; + } + /** Layer name accessor + * + * @return Returns the name of the layer + */ + const std::string &name() const + { + return _name; + } + +private: + std::string _name = {}; }; } // namespace frontend } // namespace graph diff --git a/arm_compute/graph/frontend/IStreamOperators.h b/arm_compute/graph/frontend/IStreamOperators.h index 1eb6522935..350d78fd1c 100644 --- a/arm_compute/graph/frontend/IStreamOperators.h +++ b/arm_compute/graph/frontend/IStreamOperators.h @@ -48,6 +48,18 @@ inline IStream &operator<<(IStream &s, ILayer &&layer) s.add_layer(layer); return s; } +/** Overloaded stream operator to add a node to the graph + * + * @param[in, out] s Stream to add the tensor + * @param[in] layer Layer to be added + * + * @return Updated stream + */ +inline IStream &operator<<(IStream &s, ILayer &layer) +{ + s.add_layer(layer); + return s; +} /** Overloaded stream operator to provide a target hint to the graph * * @param[in, out] s Stream to provide the hint to diff --git a/arm_compute/graph/frontend/Layers.h b/arm_compute/graph/frontend/Layers.h index 2e7c50e6da..54cf515aa7 100644 --- a/arm_compute/graph/frontend/Layers.h +++ b/arm_compute/graph/frontend/Layers.h @@ -57,7 +57,7 @@ public: NodeID create_layer(IStream &s) override { - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; return GraphBuilder::add_input_node(s.graph(), common_params, _desc, std::move(_accessor)); } @@ -81,7 +81,7 @@ public: NodeID create_layer(IStream &s) override { - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; NodeIdxPair input = { s.tail_node(), 0 }; return GraphBuilder::add_output_node(s.graph(), common_params, input, std::move(_accessor)); } @@ -105,7 +105,7 @@ public: NodeID create_layer(IStream &s) override { - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; NodeIdxPair input = { s.tail_node(), 0 }; return GraphBuilder::add_activation_node(s.graph(), common_params, input, _act_info); } @@ -140,7 +140,7 @@ public: ARM_COMPUTE_ERROR_ON(_mean == nullptr); ARM_COMPUTE_ERROR_ON(_var == nullptr); - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; NodeIdxPair input = { s.tail_node(), 0 }; return GraphBuilder::add_batch_normalization_node(s.graph(), common_params, input, _epsilon, std::move(_mean), std::move(_var), std::move(_beta), std::move(_gamma)); @@ -194,7 +194,7 @@ public: NodeID create_layer(IStream &s) override { NodeIdxPair input = { s.tail_node(), 0 }; - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; return GraphBuilder::add_convolution_node(s.graph(), common_params, input, Size2D(_conv_width, _conv_height), _ofm, _conv_info, _num_groups, s.hints().convolution_method_hint, @@ -244,7 +244,7 @@ public: NodeID create_layer(IStream &s) override { NodeIdxPair input = { s.tail_node(), 0 }; - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; return GraphBuilder::add_depthwise_convolution_node(s.graph(), common_params, input, Size2D(_conv_width, _conv_height), _conv_info, s.hints().depthwise_convolution_method_hint, @@ -271,7 +271,7 @@ public: NodeID create_layer(IStream &s) override { - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; NodeIdxPair input = { s.tail_node(), 0 }; return GraphBuilder::add_flatten_node(s.graph(), common_params, input); } @@ -296,7 +296,7 @@ public: NodeID create_layer(IStream &s) override { - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; NodeIdxPair input = { s.tail_node(), 0 }; return GraphBuilder::add_fully_connected_layer(s.graph(), common_params, input, _num_outputs, std::move(_weights), std::move(_bias)); @@ -323,7 +323,7 @@ public: NodeID create_layer(IStream &s) override { - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; NodeIdxPair input = { s.tail_node(), 0 }; return GraphBuilder::add_normalization_node(s.graph(), common_params, input, _norm_info); } @@ -347,7 +347,7 @@ public: NodeID create_layer(IStream &s) override { - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; NodeIdxPair input = { s.tail_node(), 0 }; return GraphBuilder::add_pooling_node(s.graph(), common_params, input, _pool_info); } @@ -371,7 +371,7 @@ public: NodeID create_layer(IStream &s) override { - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; NodeIdxPair input = { s.tail_node(), 0 }; return GraphBuilder::add_reshape_node(s.graph(), common_params, input, _shape); } @@ -395,7 +395,7 @@ public: NodeID create_layer(IStream &s) override { - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; NodeIdxPair input = { s.tail_node(), 0 }; return GraphBuilder::add_softmax_node(s.graph(), common_params, input, _beta); } @@ -441,7 +441,7 @@ public: NodeID create_layer(IStream &s) override { NodeID nid = EmptyNodeID; - NodeParams common_params = { "", s.hints().target_hint }; + NodeParams common_params = { name(), s.hints().target_hint }; if(_sub_streams.size() == 1 && _sub_streams.at(0) != nullptr) { nid = _sub_streams[0]->tail_node(); -- cgit v1.2.1