[neurun] Extract IExecutionBuilder to a file (#4602)
author이한종/On-Device Lab(SR)/Engineer/삼성전자 <hanjoung.lee@samsung.com>
Wed, 6 Mar 2019 08:26:02 +0000 (17:26 +0900)
committer오형석/On-Device Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Wed, 6 Mar 2019 08:26:02 +0000 (17:26 +0900)
Extract IExecutionBuilder to a file in namespace `compiler`.

Signed-off-by: Hanjoung Lee <hanjoung.lee@samsung.com>
runtimes/neurun/src/backend/AtomicStage.h
runtimes/neurun/src/backend/StageSequence.h
runtimes/neurun/src/backend/acl_cl/StageGenerator.cc
runtimes/neurun/src/backend/cpu/StageGenerator.cc
runtimes/neurun/src/backend/interface/IStage.h
runtimes/neurun/src/backend/interface/IStageGenerator.h
runtimes/neurun/src/compiler/IExecutionBuilder.h [new file with mode: 0644]
runtimes/neurun/src/compiler/PlanBuilder.h

index f46e3d8..79041ad 100644 (file)
@@ -33,7 +33,7 @@ public:
   AtomicStage() = default;
   template <typename F> AtomicStage(F f) : fn(f) {}
 
-  virtual void operator()(IExecutionBuilder &execution_builder) const override
+  virtual void operator()(compiler::IExecutionBuilder &execution_builder) const override
   {
     fn(execution_builder);
   }
index db3f3b2..28c073d 100644 (file)
@@ -38,7 +38,7 @@ public:
     stages.emplace_back(nnfw::cpp14::make_unique<AtomicStage>(f));
   }
 
-  virtual void operator()(IExecutionBuilder &execution_builder) const override
+  virtual void operator()(compiler::IExecutionBuilder &execution_builder) const override
   {
     for (const auto &stage : stages)
       (*stage)(execution_builder);
index dad175f..49ea634 100644 (file)
@@ -39,6 +39,7 @@
 
 #include "model/operand/Index.h"
 #include "model/operand/DataType.h"
+#include "compiler/IExecutionBuilder.h"
 
 #include "util/logging.h"
 
@@ -84,7 +85,7 @@ namespace acl_cl
 class ActivationBuilder
 {
 public:
-  ActivationBuilder(IExecutionBuilder &builder) : _builder(builder)
+  ActivationBuilder(compiler::IExecutionBuilder &builder) : _builder(builder)
   {
     // DO NOTHING
   }
@@ -98,7 +99,7 @@ public:
   void append(FuseCode code, ::arm_compute::ICLTensor *tensor);
 
 private:
-  IExecutionBuilder &_builder;
+  compiler::IExecutionBuilder &_builder;
 };
 
 void ActivationBuilder::appendReLU(::arm_compute::ICLTensor *ifm_alloc)
@@ -203,7 +204,7 @@ void StageGenerator::visit(const model::operation::CastNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index).get();
     auto ifm_alloc = tensors->at(param.ifm_index).get();
 
@@ -301,7 +302,7 @@ void StageGenerator::visit(const model::operation::Conv2DNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index).get();
     auto ifm_alloc = tensors->at(param.ifm_index).get();
     auto ker_alloc = tensors->at(param.ker_index).get();
@@ -405,7 +406,7 @@ void StageGenerator::visit(const model::operation::DepthwiseConv2DNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index).get();
     auto ifm_alloc = tensors->at(param.ifm_index).get();
     auto ker_alloc = tensors->at(param.ker_index).get();
@@ -522,7 +523,7 @@ void StageGenerator::visit(const model::operation::MaxPool2DNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index).get();
     auto ifm_alloc = tensors->at(param.ifm_index).get();
 
@@ -637,7 +638,7 @@ void StageGenerator::visit(const model::operation::AvgPool2DNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index).get();
     auto ifm_alloc = tensors->at(param.ifm_index).get();
 
@@ -683,7 +684,7 @@ void StageGenerator::visit(const model::operation::ConcatNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     // If tensor allocator allocate as subtensor
     bool canEliminate = true;
     for (auto ifm_ind : param.input_indexes)
@@ -792,7 +793,7 @@ void StageGenerator::visit(const model::operation::FullyConnectedNode &node)
   param.needs_reshape = needs_reshape;
   param.reshape = reshape;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto output_alloc = tensors->at(param.output_index).get();
     auto input_alloc = tensors->at(param.input_index).get();
     auto weight_alloc = tensors->at(param.weight_index).get();
@@ -850,7 +851,7 @@ void StageGenerator::visit(const model::operation::MulNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index).get();
     auto lhs_alloc = tensors->at(param.lhs_index).get();
     auto rhs_alloc = tensors->at(param.rhs_index).get();
@@ -894,7 +895,7 @@ void StageGenerator::visit(const model::operation::ReshapeNode &node)
   tensors->dimCorrection(input_index, false);
   tensors->dimCorrection(output_index, false);
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto output_alloc = tensors->at(param.output_index).get();
     auto input_alloc = tensors->at(param.input_index).get();
 
@@ -926,7 +927,7 @@ void StageGenerator::visit(const model::operation::TanhNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto output_alloc = tensors->at(param.output_index).get();
     auto input_alloc = tensors->at(param.input_index).get();
 
@@ -964,7 +965,7 @@ void StageGenerator::visit(const model::operation::SoftmaxNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto output_alloc = tensors->at(param.output_index).get();
     auto input_alloc = tensors->at(param.input_index).get();
 
@@ -1065,7 +1066,7 @@ void StageGenerator::visit(const model::operation::StridedSliceNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto outputData_alloc = tensors->at(param.outputData_index).get();
     auto inputData_alloc = tensors->at(param.inputData_index).get();
 
@@ -1174,7 +1175,7 @@ void StageGenerator::visit(const model::operation::AddNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index).get();
     auto lhs_alloc = tensors->at(param.lhs_index).get();
     auto rhs_alloc = tensors->at(param.rhs_index).get();
@@ -1235,7 +1236,7 @@ void StageGenerator::visit(const model::operation::SubNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index).get();
     auto lhs_alloc = tensors->at(param.lhs_index).get();
     auto rhs_alloc = tensors->at(param.rhs_index).get();
@@ -1297,7 +1298,7 @@ void StageGenerator::visit(const model::operation::DivNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index).get();
     auto lhs_alloc = tensors->at(param.lhs_index).get();
     auto rhs_alloc = tensors->at(param.rhs_index).get();
index 035384c..db9d74f 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "backend/BackendManager.h"
 #include "backend/interface/IConfig.h"
+#include "compiler/IExecutionBuilder.h"
 
 #include "util/logging.h"
 
@@ -139,7 +140,7 @@ void StageGenerator::visit(const model::operation::Conv2DNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index);
     auto ifm_alloc = tensors->at(param.ifm_index);
     auto ker_alloc = tensors->at(param.ker_index);
@@ -231,7 +232,7 @@ void StageGenerator::visit(const model::operation::DepthwiseConv2DNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index);
     auto ifm_alloc = tensors->at(param.ifm_index);
     auto ker_alloc = tensors->at(param.ker_index);
@@ -335,7 +336,7 @@ void StageGenerator::visit(const model::operation::MaxPool2DNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index).get();
     auto ifm_alloc = tensors->at(param.ifm_index).get();
 
@@ -436,7 +437,7 @@ void StageGenerator::visit(const model::operation::AvgPool2DNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto ofm_alloc = tensors->at(param.ofm_index).get();
     auto ifm_alloc = tensors->at(param.ifm_index).get();
 
@@ -486,7 +487,7 @@ void StageGenerator::visit(const model::operation::ConcatNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto output_alloc = tensors->at(param.output_index).get();
 
     std::vector<const uint8_t *> input_buffers;
@@ -547,7 +548,7 @@ void StageGenerator::visit(const model::operation::FullyConnectedNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto output_alloc = tensors->at(param.output_index).get();
     auto input_alloc = tensors->at(param.input_index).get();
     auto weight_alloc = tensors->at(param.weight_index).get();
@@ -590,7 +591,7 @@ void StageGenerator::visit(const model::operation::ReshapeNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto output_alloc = tensors->at(param.output_index).get();
     auto input_alloc = tensors->at(param.input_index).get();
 
@@ -632,7 +633,7 @@ void StageGenerator::visit(const model::operation::SoftmaxNode &node)
 
   auto tensors = _tensor_builder;
 
-  returnStage([tensors, param](IExecutionBuilder &builder) {
+  returnStage([tensors, param](compiler::IExecutionBuilder &builder) {
     auto output_alloc = tensors->at(param.output_index).get();
     auto input_alloc = tensors->at(param.input_index).get();
 
@@ -677,7 +678,7 @@ void StageGenerator::visit(const model::operation::PermuteNode &node)
 
   //  assert(param.shape == _ctx.at(input_index));
 
-  returnStage([param](IExecutionBuilder &builder) {
+  returnStage([param](compiler::IExecutionBuilder &builder) {
     auto output_object = param.output_backend->tensor_builder()->wrapTensor(param.output_index);
     auto input_object = param.input_backend->tensor_builder()->wrapTensor(param.input_index);
 
index 49612cf..44e79fb 100644 (file)
 
 #include <functional>
 
+namespace neurun
+{
+namespace compiler
+{
 struct IExecutionBuilder;
+} // namespace compiler
+} // namespace neurun
 
 namespace neurun
 {
 namespace backend
 {
 
-using StageFn = std::function<void(IExecutionBuilder &)>;
+using StageFn = std::function<void(compiler::IExecutionBuilder &)>;
 
 struct IStage
 {
   IStage() = default;
   virtual ~IStage() = default;
 
-  virtual void operator()(IExecutionBuilder &execution_builder) const = 0;
+  virtual void operator()(compiler::IExecutionBuilder &execution_builder) const = 0;
   virtual void operator<<(StageFn f) = 0;
 };
 
index 71a39b8..86e8ded 100644 (file)
@@ -20,8 +20,6 @@
 #include <memory>
 #include <functional>
 
-#include "exec/interface/IFunction.h"
-
 #include "backend/interface/ITensorBuilder.h"
 #include "backend/interface/IStage.h"
 #include "model/operation/NodeVisitor.h"
 // TODO Remove dependencies for below header. Should include only interface.
 #include "backend/StageSequence.h"
 
-struct IExecutionBuilder
-{
-  virtual ~IExecutionBuilder() = default;
-
-  virtual void append(std::unique_ptr<::neurun::exec::IFunction> &&f) = 0;
-};
-
 namespace neurun
 {
 namespace backend
diff --git a/runtimes/neurun/src/compiler/IExecutionBuilder.h b/runtimes/neurun/src/compiler/IExecutionBuilder.h
new file mode 100644 (file)
index 0000000..871ad72
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * 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_COMPILER_I_EXECUTION_BUILDER_H__
+#define __NEURUN_COMPILER_I_EXECUTION_BUILDER_H__
+
+#include <memory>
+
+#include "exec/interface/IFunction.h"
+
+namespace neurun
+{
+namespace compiler
+{
+
+struct IExecutionBuilder
+{
+  virtual ~IExecutionBuilder() = default;
+
+  virtual void append(std::unique_ptr<::neurun::exec::IFunction> &&f) = 0;
+};
+
+} // namespace compiler
+} // namespace neurun
+
+#endif // __NEURUN_COMPILER_I_EXECUTION_BUILDER_H__
index d9bdf5f..c12f4a3 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "compiler/operand/Context.h"
 #include "compiler/operation/Sequence.h"
+#include "compiler/IExecutionBuilder.h"
 #include "backend/interface/IStageGenerator.h"
 #include "backend/interface/ITensorBuilder.h"
 #include "backend/interface/IStage.h"