15 mutable std::mutex mutex_;
16 std::unordered_map<std::string, std::unique_ptr<LoopScheduler>> scheduler_map_;
24 template<
typename T,
typename... Args>
26 std::lock_guard<std::mutex> lock(mutex_);
27 if (scheduler_map_.find(target) != scheduler_map_.end()) {
30 scheduler_map_[target] = std::make_unique<T>(std::forward<Args>(args)...);
33 auto it = scheduler_map_.
find(target);
34 if (it != scheduler_map_.end()) {
35 return it->second.get();
41 return scheduler_map_.size();
Definition loop_scheduler.h:27
virtual SchedulerAction find(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager, structured_control_flow::StructuredLoop &loop, bool offload_unknown_sizes=false)=0
Phase 1: Determine the action for a loop during loop discovery.
Definition scheduler_registry.h:13
LoopScheduler * get_loop_scheduler(std::string target) const
Definition scheduler_registry.h:32
void register_loop_scheduler(std::string target, Args... args)
Definition scheduler_registry.h:25
size_t size_loop_schedulers() const
Definition scheduler_registry.h:40
static SchedulerRegistry & instance()
Definition scheduler_registry.h:19
Definition loop_scheduler.h:13
std::unique_ptr< LoopScheduler > create_loop_scheduler(const std::string target)
Definition approximate_math.h:12