[neurun] Add default generate method (#3293)
author이한종/동작제어Lab(SR)/Engineer/삼성전자 <hanjoung.lee@samsung.com>
Tue, 23 Oct 2018 09:37:28 +0000 (18:37 +0900)
committer이춘석/동작제어Lab(SR)/Staff Engineer/삼성전자 <chunseok.lee@samsung.com>
Tue, 23 Oct 2018 09:37:28 +0000 (18:37 +0900)
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 <hanjoung.lee@samsung.com>
runtimes/neurun/src/backend/interface/IInitializerGenerator.h
runtimes/neurun/src/codegen/Planner.cc

index bdeb70e..c5323e0 100644 (file)
 
 #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<void(::arm_compute::ITensor &)>;
 
@@ -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
index 3463060..c0063d6 100644 (file)
@@ -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));