14#ifndef PDLP_SCHEDULER_H_
15#define PDLP_SCHEDULER_H_
18#ifndef EIGEN_USE_CUSTOM_THREAD_POOL
19#define EIGEN_USE_CUSTOM_THREAD_POOL
29#include "absl/functional/any_invocable.h"
30#include "absl/synchronization/blocking_counter.h"
33#include "unsupported/Eigen/CXX11/ThreadPool"
46 absl::AnyInvocable<
void(
int)> do_func) = 0;
56 std::string
info_string()
const override {
return "google_threadpool"; };
59 absl::AnyInvocable<
void(
int)> do_func)
override {
60 absl::BlockingCounter counter(
end - start);
61 for (
int i = start; i <
end; ++i) {
62 threadpool_->Schedule([&, i]() {
64 counter.DecrementCount();
71 const int num_threads_;
72 std::unique_ptr<ThreadPool> threadpool_ =
nullptr;
82 std::string
info_string()
const override {
return "eigen_threadpool"; };
85 absl::AnyInvocable<
void(
int)> do_func)
override {
86 Eigen::Barrier eigen_barrier(
end - start);
87 for (
int i = start; i <
end; ++i) {
88 g3_threadpool_->Schedule([&, i]() {
90 eigen_barrier.Notify();
97 const int num_threads_;
98 std::unique_ptr<Eigen::ThreadPool> g3_threadpool_ =
nullptr;
std::string info_string() const override
int num_threads() const override
void ParallelFor(int start, int end, absl::AnyInvocable< void(int)> do_func) override
EigenThreadPoolScheduler(int num_threads)
GoogleThreadPoolScheduler(int num_threads)
void ParallelFor(int start, int end, absl::AnyInvocable< void(int)> do_func) override
std::string info_string() const override
int num_threads() const override
virtual ~Scheduler()=default
virtual int num_threads() const =0
virtual std::string info_string() const =0
virtual void ParallelFor(int start, int end, absl::AnyInvocable< void(int)> do_func)=0
std::unique_ptr< Scheduler > MakeScheduler(SchedulerType type, int num_threads)
ClosedInterval::Iterator end(ClosedInterval interval)