--- /dev/null
+#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__
--- /dev/null
+#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
--- /dev/null
+#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__
--- /dev/null
+#include "backend/cpu/BackendInitializer.h"
+
+namespace neurun
+{
+namespace backend
+{
+namespace cpu
+{
+
+void BackendInitializer::initialize()
+{
+ // DO NOTHING
+}
+
+} // namespace cpu
+} // namespace backend
+} // namespace neurun
--- /dev/null
+#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__
int ANeuralNetworksCompilation::finish()
{
- arm_compute::CLScheduler::get().default_init();
-
auto &plan = this->plan();
const auto &operands = plan.model().operands();
#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"
// 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};
}
}
#include <memory>
#include "codegen/Plan.h"
+#include "backend/IBackendInitializer.h"
#include "backend/IInitializerGenerator.h"
#include "backend/IStageGenerator.h"
#include "backend/ITensorBuilder.h"
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)