From cae56b848f5e715801795fb4d161a95c1927023f 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: Tue, 23 Oct 2018 18:37:28 +0900 Subject: [PATCH] [neurun] Add default generate method (#3293) Add default generate method for all IInitalizerGenerator. It returns an empty list - i.e. no-op. Also this makes `Planner::visit` methods call the initializer generation so all of them are identical. Later, Planner implementation will be unified. Signed-off-by: Hanjoung Lee --- .../src/backend/interface/IInitializerGenerator.h | 32 +++++++++++++++-- runtimes/neurun/src/codegen/Planner.cc | 42 ++++++++++++++++++++-- 2 files changed, 69 insertions(+), 5 deletions(-) diff --git a/runtimes/neurun/src/backend/interface/IInitializerGenerator.h b/runtimes/neurun/src/backend/interface/IInitializerGenerator.h index bdeb70e..c5323e0 100644 --- a/runtimes/neurun/src/backend/interface/IInitializerGenerator.h +++ b/runtimes/neurun/src/backend/interface/IInitializerGenerator.h @@ -23,7 +23,15 @@ #include "graph/operand/Index.h" #include "graph/operation/Conv2D.h" +#include "graph/operation/MaxPool2D.h" +#include "graph/operation/AvgPool2D.h" +#include "graph/operation/Concat.h" #include "graph/operation/FullyConnected.h" +#include "graph/operation/Reshape.h" +#include "graph/operation/Softmax.h" +#include "graph/operation/NOP.h" +#include "graph/operation/Permute.h" +#include "graph/operation/Add.h" using InitializerFn = std::function; @@ -44,8 +52,28 @@ struct IInitializerGenerator { virtual ~IInitializerGenerator() = default; - virtual Initializer generate(const graph::operation::Conv2D::Implicit::Node &node) = 0; - virtual Initializer generate(const graph::operation::FullyConnected::Node &node) = 0; + virtual Initializer generate(const graph::operation::Conv2D::Implicit::Node &) + { + return Initializer{}; + } + virtual Initializer generate(const graph::operation::MaxPool2D::Implicit::Node &) + { + return Initializer{}; + } + virtual Initializer generate(const graph::operation::AvgPool2D::Implicit::Node &) + { + return Initializer{}; + } + virtual Initializer generate(const graph::operation::Concat::Node &) { return Initializer{}; } + virtual Initializer generate(const graph::operation::FullyConnected::Node &) + { + return Initializer{}; + } + virtual Initializer generate(const graph::operation::Reshape::Node &) { return Initializer{}; } + virtual Initializer generate(const graph::operation::Softmax::Node &) { return Initializer{}; } + virtual Initializer generate(const graph::operation::NOP::Node &) { return Initializer{}; } + virtual Initializer generate(const graph::operation::Permute::Node &) { return Initializer{}; } + virtual Initializer generate(const graph::operation::Add::Node &) { return Initializer{}; } }; } // namespace backend diff --git a/runtimes/neurun/src/codegen/Planner.cc b/runtimes/neurun/src/codegen/Planner.cc index 3463060..c0063d6 100644 --- a/runtimes/neurun/src/codegen/Planner.cc +++ b/runtimes/neurun/src/codegen/Planner.cc @@ -49,6 +49,10 @@ void Planner::visit(const graph::operation::MaxPool2D::Implicit::Node &node) // backend auto backend = node.lower_info()->backend(); + // Generate Initializers + auto init_gen = backend->initializer_gen(); + _builder.addInitializer(init_gen->generate(node)); + // Generate Stage auto stage_gen = backend->stage_gen(); _builder.addStage(stage_gen->generate(node)); @@ -59,6 +63,10 @@ void Planner::visit(const graph::operation::AvgPool2D::Implicit::Node &node) // backend auto backend = node.lower_info()->backend(); + // Generate Initializers + auto init_gen = backend->initializer_gen(); + _builder.addInitializer(init_gen->generate(node)); + // Generate Stage auto stage_gen = backend->stage_gen(); _builder.addStage(stage_gen->generate(node)); @@ -74,6 +82,10 @@ void Planner::visit(const graph::operation::Concat::Node &node) // backend auto backend = node.lower_info()->backend(); + // Generate Initializers + auto init_gen = backend->initializer_gen(); + _builder.addInitializer(init_gen->generate(node)); + // Generate Stage auto stage_gen = backend->stage_gen(); _builder.addStage(stage_gen->generate(node)); @@ -119,6 +131,10 @@ void Planner::visit(const graph::operation::Reshape::Node &node) // backend auto backend = node.lower_info()->backend(); + // Generate Initializers + auto init_gen = backend->initializer_gen(); + _builder.addInitializer(init_gen->generate(node)); + // Generate Stage auto stage_gen = backend->stage_gen(); _builder.addStage(stage_gen->generate(node)); @@ -142,15 +158,27 @@ void Planner::visit(const graph::operation::Softmax::Node &node) // backend auto backend = node.lower_info()->backend(); + // Generate Initializers + auto init_gen = backend->initializer_gen(); + _builder.addInitializer(init_gen->generate(node)); + // Generate Stage auto stage_gen = backend->stage_gen(); _builder.addStage(stage_gen->generate(node)); } -void Planner::visit(const graph::operation::NOP::Node & /* node */) +void Planner::visit(const graph::operation::NOP::Node &node) { - // DO NOTHING - // TODO : It's just for graph manipulation test now, it should be added tensor copy stage later. + // backend + auto backend = node.lower_info()->backend(); + + // Generate Initializers + auto init_gen = backend->initializer_gen(); + _builder.addInitializer(init_gen->generate(node)); + + // Generate Stage + auto stage_gen = backend->stage_gen(); + _builder.addStage(stage_gen->generate(node)); } void Planner::visit(const graph::operation::Permute::Node &node) @@ -165,6 +193,10 @@ void Planner::visit(const graph::operation::Permute::Node &node) // backend auto backend = node.lower_info()->backend(); + // Generate Initializers + auto init_gen = backend->initializer_gen(); + _builder.addInitializer(init_gen->generate(node)); + // Generate Stage auto stage_gen = backend->stage_gen(); _builder.addStage(stage_gen->generate(node)); @@ -177,6 +209,10 @@ void Planner::visit(const graph::operation::Add::Node &node) // backend auto backend = node.lower_info()->backend(); + // Generate Initializers + auto init_gen = backend->initializer_gen(); + _builder.addInitializer(init_gen->generate(node)); + // Generate Stage auto stage_gen = backend->stage_gen(); _builder.addStage(stage_gen->generate(node)); -- 2.7.4