#pragma once #include #include #include #include #include #include #include #include namespace wfr { namespace scheduling { class SchedulingDecision; class AbstractScheduler; class PThreadBackend; } namespace execution { class PThreadBackend; class CudaBackend; } namespace execution { class ExecutionHandle; class ExecutionManager { private: ExecutionManager(); static ExecutionManager singleton; std::mutex managerMutex; PThreadBackend* pThreadBackend = nullptr; CudaBackend* cudaBackend = nullptr; std::map schedulerHandleMap; std::queue updateQueue; public: static void init(int argc, char** argv); static void finish(); ~ExecutionManager(); static ExecutionManager& getInstance() { return singleton; } bool executeSchedulingDecision(std::shared_ptr sd, scheduling::AbstractScheduler& scheduler); void notifyExecutionHandleUpdate(ExecutionHandle& handle); }; } /* namespace execution */ } /* namespace wfr */