[neurun] Introduce toString for OpCode (#9005)
author이한종/On-Device Lab(SR)/Engineer/삼성전자 <hanjoung.lee@samsung.com>
Tue, 19 Nov 2019 07:13:04 +0000 (16:13 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Tue, 19 Nov 2019 07:13:04 +0000 (16:13 +0900)
Introduce toString for OpCode so Operation derivatives do not need to
override `name()` method. At first, I wanted to get rid of `name()`
method but left it due to Custom op.

NOTE : We could get rid of `name()` method if we handle custom
operations specially.

Signed-off-by: Hanjoung Lee <hanjoung.lee@samsung.com>
64 files changed:
runtime/neurun/core/include/model/OpCode.h
runtime/neurun/core/include/model/Operation.h
runtime/neurun/core/include/model/operation/Abs.h
runtime/neurun/core/include/model/operation/Add.h
runtime/neurun/core/include/model/operation/ArgMax.h
runtime/neurun/core/include/model/operation/AvgPool2D.h
runtime/neurun/core/include/model/operation/BatchToSpaceND.h
runtime/neurun/core/include/model/operation/Cast.h
runtime/neurun/core/include/model/operation/Comparison.h
runtime/neurun/core/include/model/operation/Concat.h
runtime/neurun/core/include/model/operation/Conv2D.h
runtime/neurun/core/include/model/operation/DepthToSpace.h
runtime/neurun/core/include/model/operation/DepthwiseConv2D.h
runtime/neurun/core/include/model/operation/Dequantize.h
runtime/neurun/core/include/model/operation/Div.h
runtime/neurun/core/include/model/operation/EmbeddingLookup.h
runtime/neurun/core/include/model/operation/Exp.h
runtime/neurun/core/include/model/operation/Floor.h
runtime/neurun/core/include/model/operation/FullyConnected.h
runtime/neurun/core/include/model/operation/Gather.h
runtime/neurun/core/include/model/operation/HashtableLookup.h
runtime/neurun/core/include/model/operation/InstanceNorm.h
runtime/neurun/core/include/model/operation/L2Normalization.h
runtime/neurun/core/include/model/operation/L2Pool2D.h
runtime/neurun/core/include/model/operation/LSTM.h
runtime/neurun/core/include/model/operation/LocalResponseNormalization.h
runtime/neurun/core/include/model/operation/LogicalAnd.h
runtime/neurun/core/include/model/operation/LogicalNot.h
runtime/neurun/core/include/model/operation/LogicalOr.h
runtime/neurun/core/include/model/operation/Logistic.h
runtime/neurun/core/include/model/operation/MaxPool2D.h
runtime/neurun/core/include/model/operation/Mean.h
runtime/neurun/core/include/model/operation/Mul.h
runtime/neurun/core/include/model/operation/Neg.h
runtime/neurun/core/include/model/operation/PReLU.h
runtime/neurun/core/include/model/operation/Pack.h
runtime/neurun/core/include/model/operation/Pad.h
runtime/neurun/core/include/model/operation/Permute.h
runtime/neurun/core/include/model/operation/RNN.h
runtime/neurun/core/include/model/operation/RSQRT.h
runtime/neurun/core/include/model/operation/ReLU.h
runtime/neurun/core/include/model/operation/ReLU1.h
runtime/neurun/core/include/model/operation/ReLU6.h
runtime/neurun/core/include/model/operation/ReduceMax.h
runtime/neurun/core/include/model/operation/ReduceMin.h
runtime/neurun/core/include/model/operation/ReduceSum.h
runtime/neurun/core/include/model/operation/Reshape.h
runtime/neurun/core/include/model/operation/ResizeBilinear.h
runtime/neurun/core/include/model/operation/SQRT.h
runtime/neurun/core/include/model/operation/Softmax.h
runtime/neurun/core/include/model/operation/SpaceToBatchND.h
runtime/neurun/core/include/model/operation/SpaceToDepth.h
runtime/neurun/core/include/model/operation/Split.h
runtime/neurun/core/include/model/operation/SquaredDifference.h
runtime/neurun/core/include/model/operation/Squeeze.h
runtime/neurun/core/include/model/operation/StridedSlice.h
runtime/neurun/core/include/model/operation/Sub.h
runtime/neurun/core/include/model/operation/Tanh.h
runtime/neurun/core/include/model/operation/TopKV2.h
runtime/neurun/core/include/model/operation/Transpose.h
runtime/neurun/core/include/model/operation/TransposeConv.h
runtime/neurun/core/include/model/operation/Unpack.h
runtime/neurun/core/src/model/OpCode.cc [new file with mode: 0644]
runtime/neurun/test/graph/MockNode.h

index d32738a..b698593 100644 (file)
@@ -17,7 +17,8 @@
 #ifndef __NEURUN_MODEL_OP_CODE_H__
 #define __NEURUN_MODEL_OP_CODE_H__
 
-#include <unordered_map>
+#include <functional>
+#include <stdint.h>
 
 namespace neurun
 {
@@ -34,6 +35,8 @@ enum class OpCode
   COUNT
 };
 
+const char *toString(OpCode opcode);
+
 } // namespace model
 } // namespace neurun
 
index b206879..5ae1859 100644 (file)
@@ -55,7 +55,7 @@ public:
 
 public:
   virtual void accept(OperationVisitor &v) const = 0;
-  virtual std::string name() const = 0;
+  virtual std::string name() const { return std::string{toString(opcode())}; }
   virtual OpCode opcode() const = 0;
 
 public:
index 07baa4e..1c0a47f 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Abs"; }
   OpCode opcode() const final { return OpCode::Abs; }
 };
 
index 4f0b575..9efd128 100644 (file)
@@ -46,7 +46,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Add"; }
   OpCode opcode() const final { return OpCode::Add; }
 
 public:
index ac25a0d..e6d28f8 100644 (file)
@@ -45,7 +45,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "ArgMax"; }
   OpCode opcode() const final { return OpCode::ArgMax; }
 
 public:
index b7af571..e9eed79 100644 (file)
@@ -53,7 +53,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "AvgPool2D"; }
   OpCode opcode() const final { return OpCode::AvgPool2D; }
 
 public:
index 5e9c296..a8b98d6 100644 (file)
@@ -40,7 +40,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "BatchToSpaceND"; }
   OpCode opcode() const final { return OpCode::BatchToSpaceND; }
 };
 
index 3d112bb..f5613ce 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Cast"; }
   OpCode opcode() const final { return OpCode::Cast; }
 };
 
index 4b04291..61b9df7 100644 (file)
@@ -56,7 +56,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Comparison"; }
   OpCode opcode() const final { return OpCode::Comparison; }
 
 public:
index 864c036..cf75210 100644 (file)
@@ -42,7 +42,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Concat"; }
   OpCode opcode() const final { return OpCode::Concat; }
 
 public:
index 256bf68..a25cb1f 100644 (file)
@@ -52,7 +52,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Conv2D"; }
   OpCode opcode() const final { return OpCode::Conv2D; }
 
 public:
index d0609da..9b2e891 100644 (file)
@@ -47,7 +47,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "DepthToSpace"; }
   OpCode opcode() const final { return OpCode::DepthToSpace; }
 
 public:
index 519c59b..3205bd5 100644 (file)
@@ -53,7 +53,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "DepthwiseConv2D"; }
   OpCode opcode() const final { return OpCode::DepthwiseConv2D; }
 
 public:
index 76dc776..e3e5480 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Dequantize"; }
   OpCode opcode() const final { return OpCode::Dequantize; }
 };
 
index fb76efa..beb58eb 100644 (file)
@@ -46,7 +46,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Div"; }
   OpCode opcode() const final { return OpCode::Div; }
 
 public:
index 2f159fe..7e3d28d 100644 (file)
@@ -40,7 +40,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "EmbeddingLookup"; }
   OpCode opcode() const final { return OpCode::EmbeddingLookup; }
 };
 
index b314734..8eaef76 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Exp"; }
   OpCode opcode() const final { return OpCode::Exp; }
 };
 
index 2e69c75..189e443 100644 (file)
@@ -41,7 +41,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Floor"; }
   OpCode opcode() const final { return OpCode::Floor; }
 };
 
index d75c0c8..1178aa0 100644 (file)
@@ -50,7 +50,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "FullyConnected"; }
   OpCode opcode() const final { return OpCode::FullyConnected; }
 
 public:
index 0f73d83..7594c94 100644 (file)
@@ -48,7 +48,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Gather"; }
   OpCode opcode() const final { return OpCode::Gather; }
 
 public:
index 4eb0314..837be25 100644 (file)
@@ -47,7 +47,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "HashTableLookup"; }
   OpCode opcode() const final { return OpCode::HashtableLookup; }
 };
 
index b19f73b..61c3057 100644 (file)
@@ -49,7 +49,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "InstanceNorm"; }
   OpCode opcode() const final { return OpCode::InstanceNorm; }
 
 public:
index 273874a..8a2be2f 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "L2Normalization"; }
   OpCode opcode() const final { return OpCode::L2Normalization; }
 };
 
index 0415c96..48ef431 100644 (file)
@@ -52,7 +52,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "L2Pool2D"; }
   OpCode opcode() const final { return OpCode::L2Pool2D; }
 
 public:
index ce28851..db4eb2f 100644 (file)
@@ -73,7 +73,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "LSTM"; }
   OpCode opcode() const final { return OpCode::LSTM; }
 
 public:
index 998b11d..47dd3d7 100644 (file)
@@ -50,7 +50,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "LocalResponseNormalization"; }
   OpCode opcode() const final { return OpCode::LocalResponseNormalization; }
 
 public:
index c88364b..933446f 100644 (file)
@@ -40,7 +40,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "LogicalAnd"; }
   OpCode opcode() const final { return OpCode::LogicalAnd; }
 };
 
index 8caf75b..5434f6a 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "LogicalNot"; }
   OpCode opcode() const final { return OpCode::LogicalNot; }
 };
 
index 21082eb..36e7fb4 100644 (file)
@@ -40,7 +40,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "LogicalOr"; }
   OpCode opcode() const final { return OpCode::LogicalOr; }
 };
 
index 756a963..cde1db6 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Logistic"; }
   OpCode opcode() const final { return OpCode::Logistic; }
 };
 
index c793a7b..6533235 100644 (file)
@@ -52,7 +52,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "MaxPool2D"; }
   OpCode opcode() const final { return OpCode::MaxPool2D; }
 
 public:
index ed8a3d5..68ce20d 100644 (file)
@@ -45,7 +45,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Mean"; }
   OpCode opcode() const final { return OpCode::Mean; }
 
 public:
index c41f175..fa5bf14 100644 (file)
@@ -46,7 +46,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Mul"; }
   OpCode opcode() const final { return OpCode::Mul; }
 
 public:
index 6bc7111..591926b 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Neg"; }
   OpCode opcode() const final { return OpCode::Neg; }
 };
 
index 26bb8f3..660a079 100644 (file)
@@ -40,7 +40,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "PReLU"; }
   OpCode opcode() const final { return OpCode::PReLU; }
 };
 
index 94683fb..0af7561 100644 (file)
@@ -38,7 +38,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Pack"; }
   OpCode opcode() const final { return OpCode::Pack; }
 
 public:
index 07eec7b..78e02d5 100644 (file)
@@ -41,7 +41,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Pad"; }
   OpCode opcode() const final { return OpCode::Pad; }
 };
 
index 33a58ca..51d6cb2 100644 (file)
@@ -52,7 +52,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Permute"; }
   OpCode opcode() const final { return OpCode::Permute; }
 
 public:
index 8ec76e4..bb1c7d0 100644 (file)
@@ -54,7 +54,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "RNN"; }
   OpCode opcode() const final { return OpCode::RNN; }
 
 public:
index 02616ba..616d76c 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "RSQRT"; }
   OpCode opcode() const final { return OpCode::RSQRT; }
 };
 
index 287c8ee..6ed7c0b 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "ReLU"; }
   OpCode opcode() const final { return OpCode::ReLU; }
 };
 
index bab3847..d29e5ed 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "ReLU1"; }
   OpCode opcode() const final { return OpCode::ReLU1; }
 };
 
index f3cdf93..270c484 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "ReLU6"; }
   OpCode opcode() const final { return OpCode::ReLU6; }
 };
 
index 6361902..054a9d9 100644 (file)
@@ -47,7 +47,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "ReduceMax"; }
   OpCode opcode() const final { return OpCode::ReduceMax; }
 
 public:
index 7c25c2d..f8ef615 100644 (file)
@@ -47,7 +47,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "ReduceMin"; }
   OpCode opcode() const final { return OpCode::ReduceMin; }
 
 public:
index 26ce58f..94b1bc1 100644 (file)
@@ -45,7 +45,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "ReduceSum"; }
   OpCode opcode() const final { return OpCode::ReduceSum; }
 
 public:
index 3a9c01f..ebd0718 100644 (file)
@@ -41,7 +41,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Reshape"; }
   OpCode opcode() const final { return OpCode::Reshape; }
 };
 
index 1ac9aaf..8a01edd 100644 (file)
@@ -48,7 +48,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "ResizeBilinear"; }
   OpCode opcode() const final { return OpCode::ResizeBilinear; }
 
 public:
index 4a2ece8..254bd99 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "SQRT"; }
   OpCode opcode() const final { return OpCode::SQRT; }
 };
 
index a6bc228..19b083c 100644 (file)
@@ -47,7 +47,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "SoftMax"; }
   OpCode opcode() const final { return OpCode::Softmax; }
 
 public:
index 79218c1..99fac64 100644 (file)
@@ -43,7 +43,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "SpaceToBatchND"; }
   OpCode opcode() const final { return OpCode::SpaceToBatchND; }
 };
 
index 0b63260..9760f3a 100644 (file)
@@ -47,7 +47,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "SpaceToDepth"; }
   OpCode opcode() const final { return OpCode::SpaceToDepth; }
 
 public:
index ca96546..5787456 100644 (file)
@@ -44,7 +44,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Split"; }
   OpCode opcode() const final { return OpCode::Split; }
 
 public:
index 352e924..4879d74 100644 (file)
@@ -40,7 +40,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "SquaredDifference"; }
   OpCode opcode() const final { return OpCode::SquaredDifference; }
 };
 
index e719ce9..a99767a 100644 (file)
@@ -48,7 +48,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Squeeze"; }
   OpCode opcode() const final { return OpCode::Squeeze; }
   const Param &param() const { return _param; }
 
index 13f1398..803564c 100644 (file)
@@ -52,7 +52,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "StridedSlice"; }
   OpCode opcode() const final { return OpCode::StridedSlice; }
 
 public:
index 931f5e0..5156814 100644 (file)
@@ -46,7 +46,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Sub"; }
   OpCode opcode() const final { return OpCode::Sub; }
 
 public:
index 4458d19..69dd71a 100644 (file)
@@ -39,7 +39,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Tanh"; }
   OpCode opcode() const final { return OpCode::Tanh; }
 };
 
index 2145df7..6f36acd 100644 (file)
@@ -53,7 +53,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "TopKV2"; }
   OpCode opcode() const final { return OpCode::TopKV2; }
 
 public:
index ef661c9..250f67c 100644 (file)
@@ -50,7 +50,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Transpose"; }
   OpCode opcode() const final { return OpCode::Transpose; }
 
 public:
index 9c9ea84..1c5dcdd 100644 (file)
@@ -51,7 +51,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "TransposeConv"; }
   OpCode opcode() const final { return OpCode::TransposeConv; }
 
 public:
index 55e76b6..1fcc92d 100644 (file)
@@ -44,7 +44,6 @@ public:
 
 public:
   void accept(OperationVisitor &v) const override;
-  std::string name() const override { return "Unpack"; }
   OpCode opcode() const final { return OpCode::Unpack; }
 
 public:
diff --git a/runtime/neurun/core/src/model/OpCode.cc b/runtime/neurun/core/src/model/OpCode.cc
new file mode 100644 (file)
index 0000000..3763511
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "model/OpCode.h"
+
+#include <unordered_map>
+
+namespace neurun
+{
+namespace model
+{
+
+const char *toString(OpCode opcode)
+{
+  static const std::unordered_map<OpCode, const char *> map{{OpCode::Invalid, "Invalid"},
+#define OP(Name) {OpCode::Name, #Name},
+#include "model/Operations.lst"
+#undef OP
+                                                            {OpCode::COUNT, "COUNT"}};
+  return map.at(opcode);
+}
+
+} // namespace model
+} // namespace neurun
index fbb01d3..088140d 100644 (file)
@@ -38,7 +38,6 @@ public:
 
 public:
   void accept(neurun::model::OperationVisitor &) const override {}
-  std::string name() const override { return "SimpleMock"; }
   neurun::model::OpCode opcode() const final { return neurun::model::OpCode::Invalid; }
 };