28 #if ARM_COMPUTE_CPP_SCHEDULER 34 #if ARM_COMPUTE_OPENMP_SCHEDULER 40 #if !ARM_COMPUTE_CPP_SCHEDULER && ARM_COMPUTE_OPENMP_SCHEDULER 42 #elif ARM_COMPUTE_CPP_SCHEDULER && !ARM_COMPUTE_OPENMP_SCHEDULER 44 #elif ARM_COMPUTE_CPP_SCHEDULER && ARM_COMPUTE_OPENMP_SCHEDULER 50 std::shared_ptr<IScheduler> Scheduler::_custom_scheduler =
nullptr;
54 std::map<Scheduler::Type, std::unique_ptr<IScheduler>> init()
56 std::map<Scheduler::Type, std::unique_ptr<IScheduler>>
m;
58 #if defined(ARM_COMPUTE_CPP_SCHEDULER) 60 #endif // defined(ARM_COMPUTE_CPP_SCHEDULER) 61 #if defined(ARM_COMPUTE_OPENMP_SCHEDULER) 63 #endif // defined(ARM_COMPUTE_OPENMP_SCHEDULER) 69 std::map<Scheduler::Type, std::unique_ptr<IScheduler>> Scheduler::_schedulers{};
81 return _custom_scheduler !=
nullptr;
85 return _schedulers.find(t) != _schedulers.end();
91 return _scheduler_type;
98 if(_custom_scheduler ==
nullptr)
100 ARM_COMPUTE_ERROR(
"No custom scheduler has been setup. Call set(std::shared_ptr<IScheduler> &scheduler) before Scheduler::get()");
104 return *_custom_scheduler;
109 if(_schedulers.empty())
111 _schedulers = init();
114 auto it = _schedulers.find(_scheduler_type);
115 if(it != _schedulers.end())
128 _custom_scheduler = std::move(scheduler);
#define ARM_COMPUTE_ERROR(msg)
Print the given message then throw an std::runtime_error.
Scheduler interface to run kernels.
static void set(std::shared_ptr< IScheduler > scheduler)
Sets the user defined scheduler and makes it the active scheduler.
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
OpenMP scheduler (Alternative to the CPPScheduler).
Copyright (c) 2017-2023 Arm Limited.
static bool is_available(Type t)
Returns true if the given scheduler type is supported.
Basic pool of threads to execute CPP/Neon code on several cores in parallel.
static Type get_type()
Returns the type of the active scheduler.
static IScheduler & get()
Access the scheduler singleton.