-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathController.h
39 lines (31 loc) · 1.28 KB
/
Controller.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#pragma once
#include <chrono>
#include <iostream>
#include <boost/circular_buffer.hpp>
#include <numeric>
#include <algorithm>
struct Controller {
virtual ~Controller() { }
virtual void register_completion(unsigned int current_coroutines) = 0;
virtual size_t recommended_coroutines() const noexcept = 0;
};
struct FixedController : Controller {
explicit FixedController(size_t coroutines, size_t sampling_interval);
void register_completion(unsigned int current_coroutines) override;
size_t recommended_coroutines() const noexcept override;
private:
std::chrono::time_point<std::chrono::system_clock> start;
const size_t coroutines, sampling_interval;
size_t completed;
};
struct AdaptiveController : Controller {
explicit AdaptiveController(size_t initial_coroutines, size_t sample_size,
size_t sample_interval, size_t minimum_coroutines, size_t maximum_coroutines);
void register_completion(unsigned int current_coroutines) override;
size_t recommended_coroutines() const noexcept override;
private:
boost::circular_buffer<unsigned int> coroutines;
boost::circular_buffer<double> velocities;
std::chrono::time_point<std::chrono::system_clock> start;
size_t completed, sample_interval, recommended, max_coro, min_coro;
};