44 *
55 */
66
7- #if _WIN32
8- #include < Windows.h>
9- #endif
7+ #include < deque>
108#include " Common/Cpp/PanicDump.h"
119#include " Common/Cpp/Containers/Pimpl.tpp"
1210#include " Common/Cpp/CpuUtilization/CpuUtilization.h"
1311#include " Common/Cpp/Stopwatch.h"
14- #include " ParallelTaskRunner.h"
12+ #include " AsyncTask.h"
13+ #include " ComputationThreadPool.h"
1514
1615// #include <iostream>
1716// using std::cout;
@@ -25,14 +24,14 @@ namespace PokemonAutomation{
2524
2625
2726
28- class ParallelTaskRunnerCore final {
27+ class ComputationThreadPoolCore final {
2928public:
30- ParallelTaskRunnerCore (
29+ ComputationThreadPoolCore (
3130 std::function<void ()>&& new_thread_callback,
3231 size_t starting_threads,
3332 size_t max_threads
3433 );
35- ~ParallelTaskRunnerCore ();
34+ ~ComputationThreadPoolCore ();
3635
3736 size_t current_threads () const {
3837 std::lock_guard<std::mutex> lg (m_lock);
@@ -94,7 +93,7 @@ class ParallelTaskRunnerCore final{
9493
9594
9695
97- ParallelTaskRunner::ParallelTaskRunner (
96+ ComputationThreadPool::ComputationThreadPool (
9897 std::function<void ()>&& new_thread_callback,
9998 size_t starting_threads,
10099 size_t max_threads
@@ -106,29 +105,29 @@ ParallelTaskRunner::ParallelTaskRunner(
106105 max_threads
107106 )
108107{}
109- ParallelTaskRunner ::~ParallelTaskRunner () = default ;
110- size_t ParallelTaskRunner ::current_threads () const {
108+ ComputationThreadPool ::~ComputationThreadPool () = default ;
109+ size_t ComputationThreadPool ::current_threads () const {
111110 return m_core->current_threads ();
112111}
113- size_t ParallelTaskRunner ::max_threads () const {
112+ size_t ComputationThreadPool ::max_threads () const {
114113 return m_core->max_threads ();
115114}
116- WallDuration ParallelTaskRunner ::cpu_time () const {
115+ WallDuration ComputationThreadPool ::cpu_time () const {
117116 return m_core->cpu_time ();
118117}
119- void ParallelTaskRunner ::ensure_threads (size_t threads){
118+ void ComputationThreadPool ::ensure_threads (size_t threads){
120119 m_core->ensure_threads (threads);
121120}
122121// void ParallelTaskRunner::wait_for_everything(){
123122// m_core->wait_for_everything();
124123// }
125- std::unique_ptr<AsyncTask> ParallelTaskRunner ::blocking_dispatch (std::function<void ()>&& func){
124+ std::unique_ptr<AsyncTask> ComputationThreadPool ::blocking_dispatch (std::function<void ()>&& func){
126125 return m_core->blocking_dispatch (std::move (func));
127126}
128- std::unique_ptr<AsyncTask> ParallelTaskRunner ::try_dispatch (std::function<void ()>& func){
127+ std::unique_ptr<AsyncTask> ComputationThreadPool ::try_dispatch (std::function<void ()>& func){
129128 return m_core->try_dispatch (func);
130129}
131- void ParallelTaskRunner ::run_in_parallel (
130+ void ComputationThreadPool ::run_in_parallel (
132131 const std::function<void (size_t index)>& func,
133132 size_t start, size_t end,
134133 size_t block_size
@@ -143,7 +142,7 @@ void ParallelTaskRunner::run_in_parallel(
143142
144143
145144
146- ParallelTaskRunnerCore::ParallelTaskRunnerCore (
145+ ComputationThreadPoolCore::ComputationThreadPoolCore (
147146 std::function<void ()>&& new_thread_callback,
148147 size_t starting_threads,
149148 size_t max_threads
@@ -157,7 +156,7 @@ ParallelTaskRunnerCore::ParallelTaskRunnerCore(
157156 spawn_thread ();
158157 }
159158}
160- ParallelTaskRunnerCore ::~ParallelTaskRunnerCore (){
159+ ComputationThreadPoolCore ::~ComputationThreadPoolCore (){
161160 {
162161 std::lock_guard<std::mutex> lg (m_lock);
163162 m_stopping = true ;
@@ -172,7 +171,7 @@ ParallelTaskRunnerCore::~ParallelTaskRunnerCore(){
172171 }
173172}
174173
175- WallDuration ParallelTaskRunnerCore ::cpu_time () const {
174+ WallDuration ComputationThreadPoolCore ::cpu_time () const {
176175 // TODO: Don't lock the entire queue.
177176 WallDuration ret = WallDuration::zero ();
178177 std::lock_guard<std::mutex> lg (m_lock);
@@ -184,22 +183,22 @@ WallDuration ParallelTaskRunnerCore::cpu_time() const{
184183}
185184
186185
187- void ParallelTaskRunnerCore ::ensure_threads (size_t threads){
186+ void ComputationThreadPoolCore ::ensure_threads (size_t threads){
188187 std::lock_guard<std::mutex> lg (m_lock);
189188 while (m_threads.size () < threads){
190189 spawn_thread ();
191190 }
192191}
193192#if 0
194- void ParallelTaskRunnerCore ::wait_for_everything(){
193+ void ComputationThreadPoolCore ::wait_for_everything(){
195194 std::unique_lock<std::mutex> lg(m_lock);
196195 m_dispatch_cv.wait(lg, [this]{
197196 return m_queue.size() + m_busy_count == 0;
198197 });
199198}
200199#endif
201200
202- std::unique_ptr<AsyncTask> ParallelTaskRunnerCore ::blocking_dispatch (std::function<void ()>&& func){
201+ std::unique_ptr<AsyncTask> ComputationThreadPoolCore ::blocking_dispatch (std::function<void ()>&& func){
203202 std::unique_ptr<AsyncTask> task (new AsyncTask (std::move (func)));
204203
205204 std::unique_lock<std::mutex> lg (m_lock);
@@ -219,7 +218,7 @@ std::unique_ptr<AsyncTask> ParallelTaskRunnerCore::blocking_dispatch(std::functi
219218
220219 return task;
221220}
222- std::unique_ptr<AsyncTask> ParallelTaskRunnerCore ::try_dispatch (std::function<void ()>& func){
221+ std::unique_ptr<AsyncTask> ComputationThreadPoolCore ::try_dispatch (std::function<void ()>& func){
223222 std::lock_guard<std::mutex> lg (m_lock);
224223
225224 if (m_queue.size () + m_busy_count >= m_max_threads){
@@ -241,7 +240,7 @@ std::unique_ptr<AsyncTask> ParallelTaskRunnerCore::try_dispatch(std::function<vo
241240}
242241
243242
244- void ParallelTaskRunnerCore ::run_in_parallel (
243+ void ComputationThreadPoolCore ::run_in_parallel (
245244 const std::function<void (size_t index)>& func,
246245 size_t start, size_t end,
247246 size_t block_size
@@ -261,6 +260,7 @@ void ParallelTaskRunnerCore::run_in_parallel(
261260 size_t blocks = (total + block_size - 1 ) / block_size;
262261
263262 std::vector<std::unique_ptr<AsyncTask>> tasks;
263+ tasks.reserve (blocks);
264264 for (size_t c = 0 ; c < blocks; c++){
265265 tasks.emplace_back (blocking_dispatch ([=, &func]{
266266 size_t s = start + c * block_size;
@@ -279,15 +279,15 @@ void ParallelTaskRunnerCore::run_in_parallel(
279279
280280
281281
282- void ParallelTaskRunnerCore ::spawn_thread (){
282+ void ComputationThreadPoolCore ::spawn_thread (){
283283 ThreadData& handle = m_threads.emplace_back ();
284284 handle.thread = std::thread (
285285 run_with_catch,
286286 " ParallelTaskRunner::thread_loop()" ,
287287 [&, this ]{ thread_loop (handle); }
288288 );
289289}
290- void ParallelTaskRunnerCore ::thread_loop (ThreadData& data){
290+ void ComputationThreadPoolCore ::thread_loop (ThreadData& data){
291291 data.handle = current_thread_handle ();
292292
293293 if (m_new_thread_callback){
@@ -336,7 +336,7 @@ void ParallelTaskRunnerCore::thread_loop(ThreadData& data){
336336
337337
338338
339- // template class Pimpl<ParallelTaskRunnerCore >;
339+ // template class Pimpl<ComputationThreadPoolCore >;
340340
341341
342342
0 commit comments