Environment variable to set all configurable operators' backend (#2141)
author오형석/동작제어Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Thu, 2 Aug 2018 04:08:24 +0000 (13:08 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Thu, 2 Aug 2018 04:08:24 +0000 (13:08 +0900)
Introduce new environment variable to set all configurable operators' backend: OP_BACKEND_ALLOPS

none: use each operator's backend configuration (default)
acl_cl: use acl for all configurable operators' backend
cpu: use cpu for all configurable operators' backend

Signed-off-by: Hyeongseok Oh <hseok82.oh@samsung.com>
runtimes/neurun/src/compilation.cc

index a584af5..b401d38 100644 (file)
@@ -79,16 +79,33 @@ class BackendResolver
 public:
   BackendResolver(::internal::BackendManager &backend_manager) : _backend_manager(backend_manager)
   {
-#define OP(InternalName, NnApiName)                                                       \
-  {                                                                                       \
-    const auto &backend_str =                                                             \
-        ::nnfw::util::EnvVar{std::string("OP_BACKEND_") + #NnApiName}.asString("acl_cl"); \
-    auto backend = _backend_manager.get(backend_str);                                     \
-    _gen_map[typeid(::internal::tflite::op::InternalName::Node)] = backend;               \
+    const auto &backend_all_str =
+        ::nnfw::util::EnvVar{std::string("OP_BACKEND_ALLOPS")}.asString("none");
+    if (backend_all_str.compare("none") != 0)
+    {
+      VERBOSE(BackendResolver) << "Use backend for all ops: " << backend_all_str << std::endl;
+#define OP(InternalName, NnApiName)                                         \
+  {                                                                         \
+    auto backend = _backend_manager.get(backend_all_str);                   \
+    _gen_map[typeid(::internal::tflite::op::InternalName::Node)] = backend; \
+  }
+#include "internal/op/Op.lst"
+#undef OP
+    }
+    else
+    {
+#define OP(InternalName, NnApiName)                                                               \
+  {                                                                                               \
+    const auto &backend_str =                                                                     \
+        ::nnfw::util::EnvVar{std::string("OP_BACKEND_") + #NnApiName}.asString("acl_cl");         \
+    auto backend = _backend_manager.get(backend_str);                                             \
+    VERBOSE(BackendResolver) << "backend for " << #NnApiName << ": " << backend_str << std::endl; \
+    _gen_map[typeid(::internal::tflite::op::InternalName::Node)] = backend;                       \
   }
 
 #include "internal/op/Op.lst"
 #undef OP
+    }
 
     // TODO : It's just workaround. It's logic should be changed.
     _gen_map[typeid(::internal::tflite::op::TensorConvert::CpuFromCommon::Node)] =