Backend initialize() function return boolean to check initialization success/fail
Signed-off-by: Hyeongseok Oh <hseok82.oh@samsung.com>
namespace acl_cl
{
-void Config::initialize()
+bool Config::initialize()
{
+ if (!arm_compute::opencl_is_available())
+ {
+ return false;
+ }
arm_compute::CLScheduler::get().default_init();
// NOTE CLKernelLibraryEx must use the same context as CLScheduler
// It did not check whether another device is available.
arm_compute::CLKernelLibraryEx::get().init(
"./cl_kernels/", arm_compute::CLScheduler::get().context(), cl::Device::getDefault());
+
+ return true;
}
} // namespace acl_cl
{
public:
std::string id() override { return "acl_cl"; }
- void initialize() override;
+ bool initialize() override;
bool SupportPermutation() override { return true; }
bool SupportSubTensorAlloc() override { return true; }
std::unique_ptr<util::ITimer> timer() override { return nnfw::cpp14::make_unique<CLTimer>(); }
namespace acl_neon
{
-void Config::initialize()
-{
- // DO NOTHING
-}
+bool Config::initialize() { return true; }
} // namespace acl_neon
} // namespace backend
{
public:
std::string id() override { return "acl_neon"; }
- void initialize() override;
+ bool initialize() override;
bool SupportPermutation() override { return true; }
bool SupportSubTensorAlloc() override { return true; }
namespace cpu
{
-void Config::initialize()
-{
- // DO NOTHING
-}
+bool Config::initialize() { return true; }
} // namespace cpu
} // namespace backend
{
public:
std::string id() override { return "cpu"; }
- void initialize() override;
+ bool initialize() override;
bool SupportPermutation() override { return true; }
bool SupportSubTensorAlloc() override
{
namespace srcn
{
-void Config::initialize()
-{
- // DO NOTHING
-}
+bool Config::initialize() { return true; }
} // namespace srcn
} // namespace backend
{
public:
std::string id() override { return "srcn"; }
- void initialize() override;
+ bool initialize() override;
bool SupportPermutation() override { return false; }
bool SupportSubTensorAlloc() override
{
virtual ~IConfig() = default;
virtual std::string id() = 0;
- virtual void initialize() = 0;
+ virtual bool initialize() = 0;
// Support permute kernel
virtual bool SupportPermutation() = 0;
// Support subtensor allocation
auto backend_object =
std::unique_ptr<backend::Backend, backend_destroy_t>(backend_create(), backend_destroy);
auto backend_object_raw = backend_object.get();
- backend_object->config()->initialize(); // Call initialize here?
+ bool initialized = backend_object->config()->initialize(); // Call initialize here?
+ if (!initialized)
+ {
+ VERBOSE(BackendManager::loadBackend)
+ << backend.c_str() << " backend initialization failed. Don't use this backend"
+ << std::endl;
+ return;
+ }
_gen_map.emplace(backend_object->config()->id(), std::move(backend_object));
_available_backends.push_back(backend_object_raw);
}
struct MockConfig : public IConfig
{
std::string id() override { return "b1"; }
- void initialize() override{};
+ bool initialize() override { return true; };
bool SupportPermutation() override { return false; }
bool SupportSubTensorAlloc() override { return false; }
};
struct MockConfigCPU : public IConfig
{
std::string id() override { return "cpu"; }
- void initialize() override{};
+ bool initialize() override { return true; };
bool SupportPermutation() override { return false; }
bool SupportSubTensorAlloc() override { return false; }
};
struct MockConfigGPU : public IConfig
{
std::string id() override { return "gpu"; }
- void initialize() override{};
+ bool initialize() override { return true; };
bool SupportPermutation() override { return false; }
bool SupportSubTensorAlloc() override { return false; }
};
struct MockConfigNPU : public IConfig
{
std::string id() override { return "npu"; }
- void initialize() override{};
+ bool initialize() override { return true; };
bool SupportPermutation() override { return false; }
bool SupportSubTensorAlloc() override { return false; }
};