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/log/log.h"
31#include "absl/synchronization/blocking_counter.h"
33#include "ortools/pdlp/solvers.pb.h"
34#include "unsupported/Eigen/CXX11/ThreadPool"
47 absl::AnyInvocable<
void(
int)> do_func) = 0;
56 threadpool_->StartWorkers();
59 std::string
info_string()
const override {
return "google_threadpool"; };
62 absl::AnyInvocable<
void(
int)> do_func)
override {
63 absl::BlockingCounter counter(
end - start);
64 for (
int i = start; i <
end; ++i) {
65 threadpool_->Schedule([&, i]() {
67 counter.DecrementCount();
74 const int num_threads_;
75 std::unique_ptr<ThreadPool> threadpool_ =
nullptr;
85 std::string
info_string()
const override {
return "eigen_threadpool"; };
88 absl::AnyInvocable<
void(
int)> do_func)
override {
89 Eigen::Barrier eigen_barrier(
end - start);
90 for (
int i = start; i <
end; ++i) {
91 eigen_threadpool_->Schedule([&, i]() {
93 eigen_barrier.Notify();
100 const int num_threads_;
101 std::unique_ptr<Eigen::ThreadPool> eigen_threadpool_ =
nullptr;
105std::unique_ptr<Scheduler>
MakeScheduler(SchedulerType type,
int num_threads);
std::string info_string() const override
int num_threads() const override
void ParallelFor(int start, int end, absl::AnyInvocable< void(int)> do_func) override
Calls do_func(i) in parallel for i from start to end-1.
EigenThreadPoolScheduler(int num_threads)
GoogleThreadPoolScheduler(int num_threads)
void ParallelFor(int start, int end, absl::AnyInvocable< void(int)> do_func) override
Calls do_func(i) in parallel for i from start to end-1.
std::string info_string() const override
int num_threads() const override
Thread scheduling interface.
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
Calls do_func(i) in parallel for i from start to end-1.
Validation utilities for solvers.proto.
std::unique_ptr< Scheduler > MakeScheduler(SchedulerType type, int num_threads)
Convenience factory function.
ClosedInterval::Iterator end(ClosedInterval interval)