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);
}
}
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,