[neurun] Remove OP macro of StageGenerator in backends (#4526)
author윤지영/On-Device Lab(SR)/Staff Engineer/삼성전자 <jy910.yun@samsung.com>
Tue, 5 Mar 2019 05:45:34 +0000 (14:45 +0900)
committer오형석/On-Device Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Tue, 5 Mar 2019 05:45:34 +0000 (14:45 +0900)
The OP macro forces all operation to be implemented.
But each operation is meaningful only when the operation is actually implemented.
If backend does not have the operation, neurun can use a different backend.

Remove dummy definition and add default throw function

Signed-off-by: Jiyoung Yun <jy910.yun@samsung.com>
runtimes/neurun/src/backend/acl_cl/StageGenerator.cc
runtimes/neurun/src/backend/acl_cl/StageGenerator.h
runtimes/neurun/src/backend/cpu/StageGenerator.cc
runtimes/neurun/src/backend/cpu/StageGenerator.h
runtimes/neurun/src/backend/interface/IStageGenerator.h

index d84c5ad..220b15f 100644 (file)
@@ -1093,11 +1093,6 @@ void StageGenerator::visit(const model::operation::StridedSliceNode &node)
   });
 }
 
-void StageGenerator::visit(const model::operation::PermuteNode & /* node */)
-{
-  throw "Unsupported";
-}
-
 void StageGenerator::visit(const model::operation::AddNode &node)
 {
   const auto output_index{node.getOutputs().at(0)};
@@ -1217,11 +1212,6 @@ void StageGenerator::visit(const model::operation::SubNode &node)
   });
 }
 
-void StageGenerator::visit(const model::operation::LogisticNode &)
-{
-  throw std::runtime_error("LogisticNode for acl_cl is not implemented yet");
-}
-
 } // namespace acl_cl
 } // namespace backend
 } // namespace neurun
index 1dac259..e6e1a90 100644 (file)
@@ -37,10 +37,19 @@ public:
 
   virtual std::shared_ptr<ITensorBuilder> tensor_builder() override { return _tensor_builder; }
 
-#define OP(InternalName, IsNnApi, NnApiName) \
-  virtual void visit(const model::operation::InternalName &) override;
-#include "model/operation/Op.lst"
-#undef OP
+  virtual void visit(const model::operation::Conv2DNode &) override;
+  virtual void visit(const model::operation::DepthwiseConv2DNode &) override;
+  virtual void visit(const model::operation::MaxPool2DNode &) override;
+  virtual void visit(const model::operation::AvgPool2DNode &) override;
+  virtual void visit(const model::operation::ConcatNode &) override;
+  virtual void visit(const model::operation::FullyConnectedNode &) override;
+  virtual void visit(const model::operation::MulNode &) override;
+  virtual void visit(const model::operation::ReshapeNode &) override;
+  virtual void visit(const model::operation::TanhNode &) override;
+  virtual void visit(const model::operation::SoftmaxNode &) override;
+  virtual void visit(const model::operation::StridedSliceNode &) override;
+  virtual void visit(const model::operation::AddNode &) override;
+  virtual void visit(const model::operation::SubNode &) override;
 
 private:
   const neurun::model::operand::Set &_ctx;
index 56f5348..4ec98f8 100644 (file)
@@ -651,18 +651,6 @@ void StageGenerator::visit(const model::operation::SoftmaxNode &node)
   });
 }
 
-void StageGenerator::visit(const model::operation::StridedSliceNode &)
-{
-  throw std::runtime_error("StridedSliceNode for cpu is not implemented yet.");
-}
-
-void StageGenerator::visit(const model::operation::TanhNode &) { throw std::runtime_error("NYI"); }
-
-void StageGenerator::visit(const model::operation::LogisticNode &)
-{
-  throw std::runtime_error("LogisticNode for cpu is not implemented yet");
-}
-
 void StageGenerator::visit(const model::operation::PermuteNode &node)
 {
   const auto output_index{node.getOutputs().at(0)};
@@ -706,10 +694,6 @@ void StageGenerator::visit(const model::operation::PermuteNode &node)
   });
 }
 
-void StageGenerator::visit(const model::operation::AddNode &) { throw std::runtime_error("NYI"); }
-
-void StageGenerator::visit(const model::operation::SubNode &) { throw std::runtime_error("NYI"); }
-
 } // namespace neurun
 } // namespace backend
 } // namespace cpu
index 6a0e387..c6915f7 100644 (file)
@@ -38,10 +38,16 @@ public:
 
   virtual std::shared_ptr<ITensorBuilder> tensor_builder() override { return _tensor_builder; }
 
-#define OP(InternalName, IsNnApi, NnApiName) \
-  virtual void visit(const model::operation::InternalName &) override;
-#include "model/operation/Op.lst"
-#undef OP
+  virtual void visit(const model::operation::Conv2DNode &);
+  virtual void visit(const model::operation::DepthwiseConv2DNode &);
+  virtual void visit(const model::operation::MaxPool2DNode &);
+  virtual void visit(const model::operation::AvgPool2DNode &);
+  virtual void visit(const model::operation::ConcatNode &);
+  virtual void visit(const model::operation::FullyConnectedNode &);
+  virtual void visit(const model::operation::MulNode &);
+  virtual void visit(const model::operation::ReshapeNode &);
+  virtual void visit(const model::operation::SoftmaxNode &);
+  virtual void visit(const model::operation::PermuteNode &);
 
 private:
   const neurun::model::operand::Set &_ctx;
index 1935676..71a39b8 100644 (file)
@@ -51,8 +51,11 @@ public:
   virtual std::shared_ptr<ITensorBuilder> tensor_builder() = 0;
 
 protected:
-#define OP(InternalName, IsNnApi, NnApiName) \
-  virtual void visit(const model::operation::InternalName &) override {}
+#define OP(InternalName, IsNnApi, NnApiName)                          \
+  virtual void visit(const model::operation::InternalName &) override \
+  {                                                                   \
+    throw std::runtime_error("NYI");                                  \
+  }
 #include "model/operation/Op.lst"
 #undef OP