From be824a0eb6f224f25f6265b126f3818bcd89804b Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EC=9D=B4=ED=95=9C=EC=A2=85/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Engineer/=EC=82=BC=EC=84=B1=EC=A0=84?= =?utf8?q?=EC=9E=90?= Date: Wed, 5 Sep 2018 13:14:12 +0900 Subject: [PATCH] [neurun] Do not use addTensorBuilder (#2573) PR #2563 has introduced `IPlanBuilder::addTensorBuilder`. However adding a call to `addTensorBuilder` for all nodes from Planner is an overhead for development. So this commit revises to remove the calls. However with this commit, `Linear::markTensor` method returns `TensorBuilderSet` and passes it to `PlanBuilder::finalize`. Still need to enhance this structure, so TODO comments are left. Signed-off-by: Hanjoung Lee --- runtimes/neurun/src/backend/ITensorBuilder.h | 13 ++++++++++ runtimes/neurun/src/codegen/IPlanBuilder.h | 1 - runtimes/neurun/src/codegen/PlanBuilder.cc | 11 +++------ runtimes/neurun/src/codegen/PlanBuilder.h | 7 ++---- runtimes/neurun/src/codegen/Planner.cc | 28 ---------------------- .../neurun/src/frontend/wrapper/compilation.cc | 4 ++-- runtimes/neurun/src/linear/Linear.cc | 6 ++++- runtimes/neurun/src/linear/Linear.h | 5 ++-- 8 files changed, 28 insertions(+), 47 deletions(-) diff --git a/runtimes/neurun/src/backend/ITensorBuilder.h b/runtimes/neurun/src/backend/ITensorBuilder.h index 8884ae3..e3aa200 100644 --- a/runtimes/neurun/src/backend/ITensorBuilder.h +++ b/runtimes/neurun/src/backend/ITensorBuilder.h @@ -25,4 +25,17 @@ struct ITensorBuilder } // namespace backend } // namespace neurun +#include +#include + +namespace neurun +{ +namespace backend +{ + +using TensorBuilderSet = std::set>; + +} // namespace backend +} // namespace neurun + #endif // __INTERNAL_ITENSOR_BUILDER_H__ diff --git a/runtimes/neurun/src/codegen/IPlanBuilder.h b/runtimes/neurun/src/codegen/IPlanBuilder.h index 1a6dd9d..fc9cc36 100644 --- a/runtimes/neurun/src/codegen/IPlanBuilder.h +++ b/runtimes/neurun/src/codegen/IPlanBuilder.h @@ -16,7 +16,6 @@ struct IPlanBuilder virtual void addShapeConstr(const ::neurun::graph::operand::Index &ind, const ::arm_compute::TensorInfo &info) = 0; - virtual void addTensorBuilder(std::shared_ptr tensor_builder) = 0; virtual void addInitializer(const ::neurun::graph::operand::Index &ind, const Initializer &initializer) = 0; virtual void addStage(const Stage &) = 0; diff --git a/runtimes/neurun/src/codegen/PlanBuilder.cc b/runtimes/neurun/src/codegen/PlanBuilder.cc index cba9046..2435f71 100644 --- a/runtimes/neurun/src/codegen/PlanBuilder.cc +++ b/runtimes/neurun/src/codegen/PlanBuilder.cc @@ -11,11 +11,6 @@ void PlanBuilder::addShapeConstr(const ::neurun::graph::operand::Index &ind, _tensor_info_ctx[ind.asInt()] = info; } -void PlanBuilder::addTensorBuilder(std::shared_ptr tensor_builder) -{ - _tensor_builders.insert(tensor_builder); -} - void PlanBuilder::addInitializer(const ::neurun::graph::operand::Index &ind, const Initializer &initializer) { @@ -24,10 +19,10 @@ void PlanBuilder::addInitializer(const ::neurun::graph::operand::Index &ind, void PlanBuilder::addStage(const Stage &stage) { _stages.emplace_back(stage); } -void PlanBuilder::finalize() +void PlanBuilder::finalize(const backend::TensorBuilderSet &tensor_builders) { // Prepare tensors - for (auto &tensor_builder : _tensor_builders) + for (auto &tensor_builder : tensor_builders) { tensor_builder->prepare(_plan, _tensor_info_ctx); } @@ -42,7 +37,7 @@ void PlanBuilder::finalize() // TODO Add code for CPU/ACL tensor allocation // Allocate Tensor Memory for cl_tensors - for (auto &tensor_builder : _tensor_builders) + for (auto &tensor_builder : tensor_builders) { tensor_builder->allocate(); } diff --git a/runtimes/neurun/src/codegen/PlanBuilder.h b/runtimes/neurun/src/codegen/PlanBuilder.h index d074abf..72f2b43 100644 --- a/runtimes/neurun/src/codegen/PlanBuilder.h +++ b/runtimes/neurun/src/codegen/PlanBuilder.h @@ -43,9 +43,6 @@ public: const ::arm_compute::TensorInfo &info) override; public: - void addTensorBuilder(std::shared_ptr tensor_builder) override; - -public: void addInitializer(const ::neurun::graph::operand::Index &ind, const Initializer &initializer) override; @@ -53,7 +50,8 @@ public: void addStage(const Stage &stage) override; public: - void finalize(); + // TODO Remove the argument `tensor_builders` + void finalize(const backend::TensorBuilderSet &tensor_builders); public: const std::map &tensor_info_ctx() { return _tensor_info_ctx; } @@ -64,7 +62,6 @@ private: private: std::map _tensor_info_ctx; std::map _initializer_ctx; - std::set> _tensor_builders; std::vector _stages; }; diff --git a/runtimes/neurun/src/codegen/Planner.cc b/runtimes/neurun/src/codegen/Planner.cc index 8d0bf3a..477b575 100644 --- a/runtimes/neurun/src/codegen/Planner.cc +++ b/runtimes/neurun/src/codegen/Planner.cc @@ -43,10 +43,6 @@ void Planner::visit(const graph::operation::Conv2D::Implicit::Node &node) // Generate Stage auto stage_gen = backend.stage_gen(); _builder.addStage(stage_gen->generate(node)); - - // Generate TensorBuilder - auto tensor_builder = backend.tensor_builder(); - _builder.addTensorBuilder(tensor_builder); } void Planner::visit(const graph::operation::MaxPool2D::Implicit::Node &node) @@ -67,10 +63,6 @@ void Planner::visit(const graph::operation::MaxPool2D::Implicit::Node &node) // Generate Stage auto stage_gen = backend.stage_gen(); _builder.addStage(stage_gen->generate(node)); - - // Generate TensorBuilder - auto tensor_builder = backend.tensor_builder(); - _builder.addTensorBuilder(tensor_builder); } void Planner::visit(const graph::operation::AvgPool2D::Implicit::Node &node) @@ -91,10 +83,6 @@ void Planner::visit(const graph::operation::AvgPool2D::Implicit::Node &node) // Generate Stage auto stage_gen = backend.stage_gen(); _builder.addStage(stage_gen->generate(node)); - - // Generate TensorBuilder - auto tensor_builder = backend.tensor_builder(); - _builder.addTensorBuilder(tensor_builder); } void Planner::visit(const graph::operation::Concat::Node &node) @@ -127,10 +115,6 @@ void Planner::visit(const graph::operation::Concat::Node &node) // Generate Stage auto stage_gen = backend.stage_gen(); _builder.addStage(stage_gen->generate(node)); - - // Generate TensorBuilder - auto tensor_builder = backend.tensor_builder(); - _builder.addTensorBuilder(tensor_builder); } void Planner::visit(const graph::operation::FullyConnected::Node &node) @@ -177,10 +161,6 @@ void Planner::visit(const graph::operation::FullyConnected::Node &node) // Generate Stage auto stage_gen = backend.stage_gen(); _builder.addStage(stage_gen->generate(node)); - - // Generate TensorBuilder - auto tensor_builder = backend.tensor_builder(); - _builder.addTensorBuilder(tensor_builder); } void Planner::visit(const graph::operation::Reshape::Node &node) @@ -214,10 +194,6 @@ void Planner::visit(const graph::operation::Reshape::Node &node) // Generate Stage auto stage_gen = backend.stage_gen(); _builder.addStage(stage_gen->generate(node)); - - // Generate TensorBuilder - auto tensor_builder = backend.tensor_builder(); - _builder.addTensorBuilder(tensor_builder); } void Planner::visit(const graph::operation::Softmax::Node &node) @@ -246,10 +222,6 @@ void Planner::visit(const graph::operation::Softmax::Node &node) // Generate Stage auto stage_gen = backend.stage_gen(); _builder.addStage(stage_gen->generate(node)); - - // Generate TensorBuilder - auto tensor_builder = backend.tensor_builder(); - _builder.addTensorBuilder(tensor_builder); } void Planner::visit(const graph::operation::NOP::Node & /* node */) diff --git a/runtimes/neurun/src/frontend/wrapper/compilation.cc b/runtimes/neurun/src/frontend/wrapper/compilation.cc index 1e1cf3f..8fa7a39 100644 --- a/runtimes/neurun/src/frontend/wrapper/compilation.cc +++ b/runtimes/neurun/src/frontend/wrapper/compilation.cc @@ -40,12 +40,12 @@ int ANeuralNetworksCompilation::finish() neurun::codegen::PlanBuilder plan_builder{plan}; - linear->markTensors(); + auto tensor_builders = linear->markTensors(); linear->accept(neurun::codegen::Planner{operands, plan_builder}); // TODO Add optimization passes - plan_builder.finalize(); + plan_builder.finalize(tensor_builders); return ANEURALNETWORKS_NO_ERROR; } diff --git a/runtimes/neurun/src/linear/Linear.cc b/runtimes/neurun/src/linear/Linear.cc index e898b73..3d43ef7 100644 --- a/runtimes/neurun/src/linear/Linear.cc +++ b/runtimes/neurun/src/linear/Linear.cc @@ -33,20 +33,24 @@ void Linear::accept(graph::operation::NodeVisitor &&visitor) const } } -void Linear::markTensors() const +backend::TensorBuilderSet Linear::markTensors() const { + backend::TensorBuilderSet tensor_builders; for (const auto op : _operations) { const auto tensor_builder = op->lower_info()->backend().stage_gen()->tensor_builder(); for (const auto &ind : op->getInputs()) { tensor_builder->mark(ind); + tensor_builders.insert(tensor_builder); } for (const auto &ind : op->getOutputs()) { tensor_builder->mark(ind); + tensor_builders.insert(tensor_builder); } } + return tensor_builders; } } // namespace linear diff --git a/runtimes/neurun/src/linear/Linear.h b/runtimes/neurun/src/linear/Linear.h index 574a29b..9e379d3 100644 --- a/runtimes/neurun/src/linear/Linear.h +++ b/runtimes/neurun/src/linear/Linear.h @@ -4,6 +4,7 @@ #include #include "graph/operation/Node.h" +#include "backend/ITensorBuilder.h" namespace neurun { @@ -48,8 +49,8 @@ public: public: void accept(graph::operation::NodeVisitor &&visitor) const; - // TODO Remove this since tensor marking will be replaced with another way - virtual void markTensors() const; + // TODO Should not return TensorBuilderSet + virtual backend::TensorBuilderSet markTensors() const; public: private: -- 2.7.4