From f3e8b3e82a89cc3fad2940f674f596317a992979 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EC=9E=A5=EC=A7=80=EC=84=AD/On-Device=20Lab=28SR=29/Enginee?= =?utf8?q?r/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Wed, 18 Sep 2019 20:37:34 +0900 Subject: [PATCH] Introduce PermutationOperationPass (#7254) This commit introduces PermutationOperationPass that can change layout of each op Signed-off-by: jiseob.jang --- .../neurun/core/src/graph/pass/OperationPass.cc | 4 +- .../neurun/core/src/graph/pass/OperationPass.h | 13 +----- .../src/graph/pass/PermutationOperationPass.cc | 43 ++++++++++++++++++++ .../core/src/graph/pass/PermutationOperationPass.h | 47 ++++++++++++++++++++++ 4 files changed, 95 insertions(+), 12 deletions(-) create mode 100644 runtimes/neurun/core/src/graph/pass/PermutationOperationPass.cc create mode 100644 runtimes/neurun/core/src/graph/pass/PermutationOperationPass.h diff --git a/runtimes/neurun/core/src/graph/pass/OperationPass.cc b/runtimes/neurun/core/src/graph/pass/OperationPass.cc index 8e67098..2f835a2 100644 --- a/runtimes/neurun/core/src/graph/pass/OperationPass.cc +++ b/runtimes/neurun/core/src/graph/pass/OperationPass.cc @@ -16,6 +16,8 @@ #include "OperationPass.h" +#include "model/Index.h" +#include "model/Operation.h" #include "graph/Graph.h" namespace neurun @@ -28,7 +30,7 @@ namespace pass void OperationPass::run() { _graph.operations().iterate( - [&](const model::OperationIndex &index, model::Operation &node) { callback(index, node); }); + [&](const model::OperationIndex &, model::Operation &node) { node.accept(*this); }); } } // namespace pass diff --git a/runtimes/neurun/core/src/graph/pass/OperationPass.h b/runtimes/neurun/core/src/graph/pass/OperationPass.h index ac6a853..6b7f6f8 100644 --- a/runtimes/neurun/core/src/graph/pass/OperationPass.h +++ b/runtimes/neurun/core/src/graph/pass/OperationPass.h @@ -24,8 +24,7 @@ #include "Pass.h" -#include "model/Index.h" -#include "model/Operation.h" +#include "model/OperationVisitor.h" namespace neurun { @@ -37,7 +36,7 @@ namespace pass /** * @brief Class to iterate over operations and calls callback() method */ -class OperationPass : public Pass +class OperationPass : public Pass, public model::OperationVisitor { public: using Pass::Pass; @@ -54,14 +53,6 @@ public: * @brief Run the pass */ void run() override final; - - /** - * @brief The function that will be executed for each operations - * - * @param i[in] Index of the operation node - * @param n[in] The operation node - */ - virtual void callback(const model::OperationIndex &i, model::Operation &n) = 0; }; } // namespace pass diff --git a/runtimes/neurun/core/src/graph/pass/PermutationOperationPass.cc b/runtimes/neurun/core/src/graph/pass/PermutationOperationPass.cc new file mode 100644 index 0000000..2050f57 --- /dev/null +++ b/runtimes/neurun/core/src/graph/pass/PermutationOperationPass.cc @@ -0,0 +1,43 @@ +/* + * 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 "PermutationOperationPass.h" + +namespace neurun +{ +namespace graph +{ +namespace pass +{ + +void PermutationOperationPass::visit(const model::operation::FullyConnectedNode &) +{ + // TODO Implement +} + +void PermutationOperationPass::visit(const model::operation::GatherNode &) +{ + // TODO Implement +} + +void PermutationOperationPass::visit(const model::operation::ReshapeNode &) +{ + // TODO Implement +} + +} // namespace pass +} // namespace graph +} // namespace neurun diff --git a/runtimes/neurun/core/src/graph/pass/PermutationOperationPass.h b/runtimes/neurun/core/src/graph/pass/PermutationOperationPass.h new file mode 100644 index 0000000..6fc0133 --- /dev/null +++ b/runtimes/neurun/core/src/graph/pass/PermutationOperationPass.h @@ -0,0 +1,47 @@ +/* + * 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_GRAPH_PASS_PERMUTATION_OPERATION_PASS_H__ +#define __NEURUN_GRAPH_PASS_PERMUTATION_OPERATION_PASS_H__ + +#include "OperationPass.h" + +namespace neurun +{ +namespace graph +{ +namespace pass +{ + +class PermutationOperationPass : public OperationPass +{ +public: + using OperationPass::OperationPass; + +public: + std::string id() final { return "PermutationOperationPass"; } + +public: + void visit(const model::operation::FullyConnectedNode &) final; + void visit(const model::operation::GatherNode &) final; + void visit(const model::operation::ReshapeNode &) final; +}; + +} // namespace pass +} // namespace graph +} // namespace neurun + +#endif // __NEURUN_GRAPH_PASS_PERMUTATION_OPERATION_PASS_H__ -- 2.7.4