[neurun] Move CLSchedule default init to BackendManager (#2526)
author김수진/동작제어Lab(SR)/Engineer/삼성전자 <sjsujin.kim@samsung.com>
Mon, 3 Sep 2018 05:44:29 +0000 (14:44 +0900)
committer박세희/동작제어Lab(SR)/Principal Engineer/삼성전자 <saehie.park@samsung.com>
Mon, 3 Sep 2018 05:44:29 +0000 (14:44 +0900)
* [neurun] Move CLSchedule default init to BackendManager

This commit moves CLSchedule default init to BackendManager, since it is ACL_CL specific code.

Signed-off-by: sjsujinkim <sjsujin.kim@samsung.com>
* Extract backend initializer

* Add eol

* Remove unnecessary variable

* Remove unused include

runtimes/neurun/src/backend/IBackendInitializer.h [new file with mode: 0644]
runtimes/neurun/src/backend/acl_cl/BackendInitializer.cc [new file with mode: 0644]
runtimes/neurun/src/backend/acl_cl/BackendInitializer.h [new file with mode: 0644]
runtimes/neurun/src/backend/cpu/BackendInitializer.cc [new file with mode: 0644]
runtimes/neurun/src/backend/cpu/BackendInitializer.h [new file with mode: 0644]
runtimes/neurun/src/compilation.cc
runtimes/neurun/src/internal/BackendManager.cc
runtimes/neurun/src/internal/BackendManager.h

diff --git a/runtimes/neurun/src/backend/IBackendInitializer.h b/runtimes/neurun/src/backend/IBackendInitializer.h
new file mode 100644 (file)
index 0000000..6203427
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __INTERNAL_IBACKEND_INITIALIZER_H__
+#define __INTERNAL_IBACKEND_INITIALIZER_H__
+
+namespace neurun
+{
+namespace backend
+{
+
+struct IBackendInitializer
+{
+  virtual ~IBackendInitializer() = default;
+
+  virtual void initialize() = 0;
+};
+
+} // namespace backend
+} // namespace neurun
+
+#endif // __INTERNAL_IBACKEND_INITIALIZER_H__
diff --git a/runtimes/neurun/src/backend/acl_cl/BackendInitializer.cc b/runtimes/neurun/src/backend/acl_cl/BackendInitializer.cc
new file mode 100644 (file)
index 0000000..270263f
--- /dev/null
@@ -0,0 +1,16 @@
+#include <arm_compute/runtime/CL/CLScheduler.h>
+
+#include "backend/acl_cl/BackendInitializer.h"
+
+namespace neurun
+{
+namespace backend
+{
+namespace acl_cl
+{
+
+void BackendInitializer::initialize() { arm_compute::CLScheduler::get().default_init(); }
+
+} // namespace acl_cl
+} // namespace backend
+} // namespace neurun
diff --git a/runtimes/neurun/src/backend/acl_cl/BackendInitializer.h b/runtimes/neurun/src/backend/acl_cl/BackendInitializer.h
new file mode 100644 (file)
index 0000000..3e28442
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef __NEURUN_BACKEND_ACL_CL_BACKEND_INITIALIZER_H__
+#define __NEURUN_BACKEND_ACL_CL_BACKEND_INITIALIZER_H__
+
+#include "backend/IBackendInitializer.h"
+
+namespace neurun
+{
+namespace backend
+{
+namespace acl_cl
+{
+
+class BackendInitializer : public IBackendInitializer
+{
+public:
+  BackendInitializer()
+  {
+    // DO NOTHING
+  }
+
+  virtual void initialize() override;
+};
+
+} // namespace acl_cl
+} // namespace backend
+} // namespace neurun
+
+#endif // __NEURUN_BACKEND_ACL_CL_BACKEND_INITIALIZER_H__
diff --git a/runtimes/neurun/src/backend/cpu/BackendInitializer.cc b/runtimes/neurun/src/backend/cpu/BackendInitializer.cc
new file mode 100644 (file)
index 0000000..ac2b4e2
--- /dev/null
@@ -0,0 +1,17 @@
+#include "backend/cpu/BackendInitializer.h"
+
+namespace neurun
+{
+namespace backend
+{
+namespace cpu
+{
+
+void BackendInitializer::initialize()
+{
+  // DO NOTHING
+}
+
+} // namespace cpu
+} // namespace backend
+} // namespace neurun
diff --git a/runtimes/neurun/src/backend/cpu/BackendInitializer.h b/runtimes/neurun/src/backend/cpu/BackendInitializer.h
new file mode 100644 (file)
index 0000000..ede1c5f
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef __NEURUN_BACKEND_CPU_BACKEND_INITIALIZER_H__
+#define __NEURUN_BACKEND_CPU_BACKEND_INITIALIZER_H__
+
+#include "backend/IBackendInitializer.h"
+
+namespace neurun
+{
+namespace backend
+{
+namespace cpu
+{
+
+class BackendInitializer : public IBackendInitializer
+{
+public:
+  BackendInitializer()
+  {
+    // DO NOTHING
+  }
+
+  virtual void initialize() override;
+};
+
+} // namespace cpu
+} // namespace backend
+} // namespace neurun
+
+#endif // __NEURUN_BACKEND_CPU_BACKEND_INITIALIZER_H__
index 014a4b4..7e9bff6 100644 (file)
@@ -29,8 +29,6 @@
 
 int ANeuralNetworksCompilation::finish()
 {
-  arm_compute::CLScheduler::get().default_init();
-
   auto &plan = this->plan();
   const auto &operands = plan.model().operands();
 
index 603e3dd..bf5821c 100644 (file)
@@ -1,8 +1,10 @@
 #include "internal/BackendManager.h"
 
+#include "backend/acl_cl/BackendInitializer.h"
 #include "backend/acl_cl/TensorBuilder.h"
 #include "backend/acl_cl/InitializerGenerator.h"
 #include "backend/acl_cl/StageGenerator.h"
+#include "backend/cpu/BackendInitializer.h"
 #include "backend/cpu/TensorBuilder.h"
 #include "backend/cpu/InitializerGenerator.h"
 #include "backend/cpu/StageGenerator.h"
@@ -17,23 +19,25 @@ BackendManager::BackendManager(neurun::codegen::Plan &plan) : _plan(plan)
   // Add arm_compute backend
   {
     using namespace ::neurun::backend::acl_cl;
+    auto acl_backend_initializer = std::make_shared<BackendInitializer>();
     auto acl_tensor_builder = std::make_shared<TensorBuilder>(_plan);
     auto acl_initializer_gen = std::make_shared<InitializerGenerator>(operands);
     auto acl_stage_gen = std::make_shared<StageGenerator>(operands, acl_tensor_builder);
 
     // TODO Do not use magic string for backend id
-    _gen_map["acl_cl"] = {acl_initializer_gen, acl_stage_gen};
+    _gen_map["acl_cl"] = {acl_backend_initializer, acl_initializer_gen, acl_stage_gen};
   }
 
   // Add CPU backend
   {
     using namespace ::neurun::backend::cpu;
+    auto cpu_backend_initializer = std::make_shared<BackendInitializer>();
     auto cpu_tensor_builder = std::make_shared<TensorBuilder>(_plan);
     auto cpu_initializer_gen = std::make_shared<InitializerGenerator>(operands);
     auto cpu_stage_gen = std::make_shared<StageGenerator>(operands, cpu_tensor_builder);
 
     // TODO Do not use magic string for backend id
-    _gen_map["cpu"] = {cpu_initializer_gen, cpu_stage_gen};
+    _gen_map["cpu"] = {cpu_backend_initializer, cpu_initializer_gen, cpu_stage_gen};
   }
 }
 
index afe57b1..99137eb 100644 (file)
@@ -4,6 +4,7 @@
 #include <memory>
 
 #include "codegen/Plan.h"
+#include "backend/IBackendInitializer.h"
 #include "backend/IInitializerGenerator.h"
 #include "backend/IStageGenerator.h"
 #include "backend/ITensorBuilder.h"
@@ -16,11 +17,12 @@ struct Backend
   std::shared_ptr<neurun::backend::IInitializerGenerator> initializer_gen;
   std::shared_ptr<neurun::backend::IStageGenerator> stage_gen;
 
-  Backend(const std::shared_ptr<neurun::backend::IInitializerGenerator> &initializer_gen,
+  Backend(const std::shared_ptr<neurun::backend::IBackendInitializer> &backend_initializer,
+          const std::shared_ptr<neurun::backend::IInitializerGenerator> &initializer_gen,
           const std::shared_ptr<neurun::backend::IStageGenerator> &stage_gen)
       : initializer_gen(initializer_gen), stage_gen(stage_gen)
   {
-    // DO NOTHING
+    backend_initializer->initialize();
   }
 
   Backend(void) : initializer_gen(nullptr), stage_gen(nullptr)