[neurun]Fix HE scheduler shuffle cond and schedule ret val (#6899)
authorДилшоджон Пошшоев/AI Tools Lab /SRR/Engineer/삼성전자 <d.poshshoev@samsung.com>
Mon, 26 Aug 2019 09:42:39 +0000 (12:42 +0300)
committer이한종/On-Device Lab(SR)/Engineer/삼성전자 <hanjoung.lee@samsung.com>
Mon, 26 Aug 2019 09:42:39 +0000 (18:42 +0900)
* [neurun]Fix HE scheduler shuffle cond,schedule ret

Also fixed returning way of Scheduler::schedule: so for it created a
copy of _backend_resolver instead of moving existing one

Signed-off-by: Poshshoev Dilshodzhon <d.poshshoev@samsung.com>
* Address reviews

Signed-off-by: Poshshoev Dilshodzhon <d.poshshoev@samsung.com>
runtimes/neurun/core/src/compiler/Scheduler.cc

index dd72cfa..3016fb6 100644 (file)
@@ -195,17 +195,37 @@ std::unique_ptr<compiler::BackendResolver> Scheduler::schedule(const graph::Grap
     for (const auto *backend : _all_backends)
     {
       const auto exec_time = _exec_time->getOperationExecTime(backend, node.getName(), quant, size);
+      // if there is a record for a backend
       if (exec_time == _exec_time->NOT_FOUND)
       {
         profile_data_transfer = false;
         break;
       }
     }
+    // Check if profiling of data transfer is already done
+    for (uint32_t i = 0; i < _all_backends.size() && profile_data_transfer; ++i)
+    {
+      for (const auto *another_backend : _all_backends)
+      {
+        if (_all_backends[i] == another_backend)
+        {
+          continue;
+        }
+        const auto permute_time =
+            _exec_time->getPermuteTime(_all_backends[i], another_backend, quant, size);
+        // if permutation already was done
+        if (permute_time != _exec_time->NOT_FOUND)
+        {
+          profile_data_transfer = false;
+          break;
+        }
+      }
+    }
     if (profile_data_transfer)
     {
       scheduleShufflingBackends();
       VERBOSE(Scheduler::schedule) << "task scheduling finished" << std::endl;
-      return nnfw::cpp14::make_unique<BackendResolver>(*_backend_resolver);
+      return std::move(_backend_resolver);
     }
   }
 
@@ -215,7 +235,7 @@ std::unique_ptr<compiler::BackendResolver> Scheduler::schedule(const graph::Grap
     scheduleNode(rank.second);
   }
   VERBOSE(Scheduler::schedule) << "task scheduling finished" << std::endl;
-  return nnfw::cpp14::make_unique<BackendResolver>(*_backend_resolver);
+  return std::move(_backend_resolver);
 }
 
 int64_t Scheduler::getTime(const backend::Backend *backend, const std::string &operation,