--- /dev/null
+/*
+ * 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.
+ */
+
+#ifndef __NEURUN_MODEL_OP_CODE_H__
+#define __NEURUN_MODEL_OP_CODE_H__
+
+#include <unordered_map>
+
+namespace neurun
+{
+namespace model
+{
+
+enum class OpCode
+{
+ Invalid, //< Unused
+#define OP(Name) Name, //< All operations
+#include "Operations.lst"
+#undef OP
+ Subgraph, //< Subgraph is treated specially
+ COUNT
+};
+
+} // namespace model
+} // namespace neurun
+
+#endif // __NEURUN_MODEL_OP_CODE_H__
#include <memory>
+#include "model/OpCode.h"
#include "model/Operand.h"
#include "model/OperandIndexSequence.h"
#include "model/OperandConstraint.h"
public:
virtual void accept(OperationVisitor &v) const = 0;
virtual std::string name() const = 0;
+ virtual OpCode opcode() const = 0;
public:
void replaceInput(const OperandIndex &from, const OperandIndex &to);
void accept(OperationVisitor &v) const override;
virtual std::string name(void) const override { return "Subgraph"; }
+ OpCode opcode(void) const final { return OpCode::Subgraph; }
public:
void appendOperation(const OperationIndex &index, const Operation &node)
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Abs"; }
+ OpCode opcode() const final { return OpCode::Abs; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Add"; }
+ OpCode opcode() const final { return OpCode::Add; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "ArgMax"; }
+ OpCode opcode() const final { return OpCode::ArgMax; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "AvgPool2D"; }
+ OpCode opcode() const final { return OpCode::AvgPool2D; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "BatchToSpaceND"; }
+ OpCode opcode() const final { return OpCode::BatchToSpaceND; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Cast"; }
+ OpCode opcode() const final { return OpCode::Cast; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Comparison"; }
+ OpCode opcode() const final { return OpCode::Comparison; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Concat"; }
+ OpCode opcode() const final { return OpCode::Concat; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Conv2D"; }
+ OpCode opcode() const final { return OpCode::Conv2D; }
public:
const Param ¶m() const { return _param; }
const std::string &id() const;
std::string name() const override;
+ OpCode opcode() const final { return OpCode::Custom; }
/**
* @return user-provided data
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "DepthToSpace"; }
+ OpCode opcode() const final { return OpCode::DepthToSpace; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "DepthwiseConv2D"; }
+ OpCode opcode() const final { return OpCode::DepthwiseConv2D; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Dequantize"; }
+ OpCode opcode() const final { return OpCode::Dequantize; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Div"; }
+ OpCode opcode() const final { return OpCode::Div; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "EmbeddingLookup"; }
+ OpCode opcode() const final { return OpCode::EmbeddingLookup; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Exp"; }
+ OpCode opcode() const final { return OpCode::Exp; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Floor"; }
+ OpCode opcode() const final { return OpCode::Floor; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "FullyConnected"; }
+ OpCode opcode() const final { return OpCode::FullyConnected; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Gather"; }
+ OpCode opcode() const final { return OpCode::Gather; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "HashTableLookup"; }
+ OpCode opcode() const final { return OpCode::HashtableLookup; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "InstanceNorm"; }
+ OpCode opcode() const final { return OpCode::InstanceNorm; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "L2Normalization"; }
+ OpCode opcode() const final { return OpCode::L2Normalization; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "L2Pool2D"; }
+ OpCode opcode() const final { return OpCode::L2Pool2D; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "LSTM"; }
+ OpCode opcode() const final { return OpCode::LSTM; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "LocalResponseNormalization"; }
+ OpCode opcode() const final { return OpCode::LocalResponseNormalization; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "LogicalAnd"; }
+ OpCode opcode() const final { return OpCode::LogicalAnd; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "LogicalNot"; }
+ OpCode opcode() const final { return OpCode::LogicalNot; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "LogicalOr"; }
+ OpCode opcode() const final { return OpCode::LogicalOr; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Logistic"; }
+ OpCode opcode() const final { return OpCode::Logistic; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "MaxPool2D"; }
+ OpCode opcode() const final { return OpCode::MaxPool2D; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Mean"; }
+ OpCode opcode() const final { return OpCode::Mean; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Mul"; }
+ OpCode opcode() const final { return OpCode::Mul; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Neg"; }
+ OpCode opcode() const final { return OpCode::Neg; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "PReLU"; }
+ OpCode opcode() const final { return OpCode::PReLU; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Pack"; }
+ OpCode opcode() const final { return OpCode::Pack; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Pad"; }
+ OpCode opcode() const final { return OpCode::Pad; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Permute"; }
+ OpCode opcode() const final { return OpCode::Permute; }
public:
Permute(const OperandIndex &input, const OperandIndex &output,
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "RNN"; }
+ OpCode opcode() const final { return OpCode::RNN; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "RSQRT"; }
+ OpCode opcode() const final { return OpCode::RSQRT; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "ReLU"; }
+ OpCode opcode() const final { return OpCode::ReLU; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "ReLU1"; }
+ OpCode opcode() const final { return OpCode::ReLU1; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "ReLU6"; }
+ OpCode opcode() const final { return OpCode::ReLU6; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "ReduceMax"; }
+ OpCode opcode() const final { return OpCode::ReduceMax; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "ReduceMin"; }
+ OpCode opcode() const final { return OpCode::ReduceMin; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "ReduceSum"; }
+ OpCode opcode() const final { return OpCode::ReduceSum; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Reshape"; }
+ OpCode opcode() const final { return OpCode::Reshape; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "ResizeBilinear"; }
+ OpCode opcode() const final { return OpCode::ResizeBilinear; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "SQRT"; }
+ OpCode opcode() const final { return OpCode::SQRT; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "SoftMax"; }
+ OpCode opcode() const final { return OpCode::Softmax; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "SpaceToBatchND"; }
+ OpCode opcode() const final { return OpCode::SpaceToBatchND; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "SpaceToDepth"; }
+ OpCode opcode() const final { return OpCode::SpaceToDepth; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Split"; }
+ OpCode opcode() const final { return OpCode::Split; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "SquaredDifference"; }
+ OpCode opcode() const final { return OpCode::SquaredDifference; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Squeeze"; }
+ OpCode opcode() const final { return OpCode::Squeeze; }
const Param ¶m() const { return _param; }
private:
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "StridedSlice"; }
+ OpCode opcode() const final { return OpCode::StridedSlice; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Sub"; }
+ OpCode opcode() const final { return OpCode::Sub; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Tanh"; }
+ OpCode opcode() const final { return OpCode::Tanh; }
};
} // namespace operation
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "TopKV2"; }
+ OpCode opcode() const final { return OpCode::TopKV2; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Transpose"; }
+ OpCode opcode() const final { return OpCode::Transpose; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "TransposeConv"; }
+ OpCode opcode() const final { return OpCode::TransposeConv; }
public:
const Param ¶m() const { return _param; }
public:
void accept(OperationVisitor &v) const override;
std::string name() const override { return "Unpack"; }
+ OpCode opcode() const final { return OpCode::Unpack; }
public:
const Param ¶m() const { return _param; }
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; }
};
} // namespace graph