diff options
Diffstat (limited to 'src/runtime')
-rw-r--r-- | src/runtime/Scheduler.cpp | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/runtime/Scheduler.cpp b/src/runtime/Scheduler.cpp index e52fb59940..6d961f29a5 100644 --- a/src/runtime/Scheduler.cpp +++ b/src/runtime/Scheduler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020 Arm Limited. +* Copyright (c) 2017-2020, 2023 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -40,14 +40,18 @@ using namespace arm_compute; #if !ARM_COMPUTE_CPP_SCHEDULER && ARM_COMPUTE_OPENMP_SCHEDULER Scheduler::Type Scheduler::_scheduler_type = Scheduler::Type::OMP; #elif ARM_COMPUTE_CPP_SCHEDULER && !ARM_COMPUTE_OPENMP_SCHEDULER -Scheduler::Type Scheduler::_scheduler_type = Scheduler::Type::CPP; +Scheduler::Type Scheduler::_scheduler_type = Scheduler::Type::CPP; #elif ARM_COMPUTE_CPP_SCHEDULER && ARM_COMPUTE_OPENMP_SCHEDULER Scheduler::Type Scheduler::_scheduler_type = Scheduler::Type::CPP; #else /* ARM_COMPUTE_*_SCHEDULER */ Scheduler::Type Scheduler::_scheduler_type = Scheduler::Type::ST; #endif /* ARM_COMPUTE_*_SCHEDULER */ +#ifndef ARM_COMPUTE_THREAD_LOCAL_SCHEDULER std::shared_ptr<IScheduler> Scheduler::_custom_scheduler = nullptr; +#else // ARM_COMPUTE_THREAD_LOCAL_SCHEDULER +std::shared_ptr<IScheduler> thread_local Scheduler::_custom_scheduler = nullptr; +#endif // ARM_COMPUTE_THREAD_LOCAL_SCHEDULER namespace { @@ -74,6 +78,30 @@ void Scheduler::set(Type t) _scheduler_type = t; } +bool Scheduler::is_set() +{ + if (_scheduler_type == Type::CUSTOM) + { + return _custom_scheduler != nullptr; + } + else + { + return !_schedulers.empty(); + } +} + +unsigned int Scheduler::num_threads() +{ + if (Scheduler::is_set()) + { + return Scheduler::get().num_threads(); + } + else + { + return CPUInfo::get().get_cpu_num(); + } +} + bool Scheduler::is_available(Type t) { if (t == Type::CUSTOM) |