docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
scheduler_registry.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
5
6namespace sdfg {
7namespace passes {
8namespace scheduler {
9
14private:
15 mutable std::mutex mutex_;
16 std::unordered_map<std::string, std::unique_ptr<LoopScheduler>> scheduler_map_;
17
18public:
20 static SchedulerRegistry registry;
21 return registry;
22 }
23
24 template<typename T, typename... Args>
25 void register_loop_scheduler(std::string target, Args... args) {
26 std::lock_guard<std::mutex> lock(mutex_);
27 if (scheduler_map_.find(target) != scheduler_map_.end()) {
28 return;
29 }
30 scheduler_map_[target] = std::make_unique<T>(std::forward<Args>(args)...);
31 }
32 LoopScheduler* get_loop_scheduler(std::string target) const {
33 auto it = scheduler_map_.find(target);
34 if (it != scheduler_map_.end()) {
35 return it->second.get();
36 }
37 return nullptr;
38 }
39
40 size_t size_loop_schedulers() const {
41 return scheduler_map_.size();
42 }
43};
44
45std::unique_ptr<LoopScheduler> create_loop_scheduler(const std::string target);
46
47} // namespace scheduler
48} // namespace passes
49} // namespace sdfg
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
Definition analysis.h:7