From c8c0f80286763d167da6c97e5f3123377b0181af Mon Sep 17 00:00:00 2001 From: Patrick Schneider Date: Fri, 26 Sep 2025 14:33:16 +0200 Subject: [PATCH] Add special task handler to improve single threaded case. --- CMakeLists.txt | 11 ++++++- result.txt | 60 +++++++++++++++++------------------ result.withouttaskhandler.txt | 30 ++++++++++++++++++ src/single_task_handler.cpp | 11 +++++++ src/single_task_handler.hpp | 8 +++++ src/sorter.cpp | 39 ++++++++++++----------- src/sorter.hpp | 4 +-- src/task_handler.hpp | 11 +++++++ src/thread_pool.hpp | 3 +- 9 files changed, 125 insertions(+), 52 deletions(-) create mode 100644 result.withouttaskhandler.txt create mode 100644 src/single_task_handler.cpp create mode 100644 src/single_task_handler.hpp create mode 100644 src/task_handler.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 22286f0..0b36249 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,10 @@ find_package(Threads REQUIRED) add_executable(Sorter framework/runner.cpp src/container.cpp src/container.hpp src/sorter.cpp src/sorter.hpp - src/thread_pool.cpp src/thread_pool.hpp) + src/thread_pool.cpp src/thread_pool.hpp + src/single_task_handler.cpp src/single_task_handler.hpp + src/task_handler.hpp + ) target_link_libraries(Sorter PUBLIC Threads::Threads) target_compile_features(Sorter PRIVATE cxx_std_20) @@ -53,6 +56,9 @@ add_custom_command( ${CMAKE_CURRENT_LIST_DIR}/src/sorter.hpp ${CMAKE_CURRENT_LIST_DIR}/src/thread_pool.cpp ${CMAKE_CURRENT_LIST_DIR}/src/thread_pool.hpp + ${CMAKE_CURRENT_LIST_DIR}/src/src/single_task_handler.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/src/single_task_handler.hpp + ${CMAKE_CURRENT_LIST_DIR}/src/src/task_handler.hpp ${plot_file} ${CMAKE_CURRENT_LIST_DIR}/description.md COMMENT "Creating submission" @@ -76,6 +82,9 @@ set(dist_file_list src/sorter.hpp src/thread_pool.cpp src/thread_pool.hpp + src/single_task_handler.cpp + src/single_task_handler.hpp + src/task_handler.hpp ) set(framework_dist_file "ae-sorting.zip") diff --git a/result.txt b/result.txt index e7256c5..02e6f78 100644 --- a/result.txt +++ b/result.txt @@ -1,30 +1,30 @@ -RESULT name=sort n=100 t=1 iterations=18 durationNanoseconds=57856 totalDurationNanoseconds=1041410 constructorNanoseconds=513 totalConstructorNanoseconds=9250 -RESULT name=sort n=1000 t=1 iterations=8 durationNanoseconds=126883 totalDurationNanoseconds=1015070 constructorNanoseconds=1475 totalConstructorNanoseconds=11800 -RESULT name=sort n=10001 t=1 iterations=2 durationNanoseconds=615565 totalDurationNanoseconds=1231131 constructorNanoseconds=30890 totalConstructorNanoseconds=61780 -RESULT name=sort n=100000 t=1 iterations=1 durationNanoseconds=9488107 totalDurationNanoseconds=9488107 constructorNanoseconds=524961 totalConstructorNanoseconds=524961 -RESULT name=sort n=10000000 t=1 iterations=1 durationNanoseconds=1416091993 totalDurationNanoseconds=1416091993 constructorNanoseconds=50440746 totalConstructorNanoseconds=50440746 -RESULT name=sort n=100 t=2 iterations=16 durationNanoseconds=63258 totalDurationNanoseconds=1012141 constructorNanoseconds=375 totalConstructorNanoseconds=6000 -RESULT name=sort n=1000 t=2 iterations=7 durationNanoseconds=154110 totalDurationNanoseconds=1078770 constructorNanoseconds=2008 totalConstructorNanoseconds=14060 -RESULT name=sort n=10001 t=2 iterations=3 durationNanoseconds=451387 totalDurationNanoseconds=1354161 constructorNanoseconds=19620 totalConstructorNanoseconds=58860 -RESULT name=sort n=100000 t=2 iterations=1 durationNanoseconds=6236655 totalDurationNanoseconds=6236655 constructorNanoseconds=514650 totalConstructorNanoseconds=514650 -RESULT name=sort n=10000000 t=2 iterations=1 durationNanoseconds=1380325518 totalDurationNanoseconds=1380325518 constructorNanoseconds=50373886 totalConstructorNanoseconds=50373886 -RESULT name=sort n=100 t=4 iterations=9 durationNanoseconds=118743 totalDurationNanoseconds=1068691 constructorNanoseconds=436 totalConstructorNanoseconds=3930 -RESULT name=sort n=1000 t=4 iterations=4 durationNanoseconds=272115 totalDurationNanoseconds=1088461 constructorNanoseconds=2415 totalConstructorNanoseconds=9660 -RESULT name=sort n=10001 t=4 iterations=2 durationNanoseconds=569255 totalDurationNanoseconds=1138510 constructorNanoseconds=29920 totalConstructorNanoseconds=59840 -RESULT name=sort n=100000 t=4 iterations=1 durationNanoseconds=6598125 totalDurationNanoseconds=6598125 constructorNanoseconds=507180 totalConstructorNanoseconds=507180 -RESULT name=sort n=10000000 t=4 iterations=1 durationNanoseconds=1300242690 totalDurationNanoseconds=1300242690 constructorNanoseconds=50475097 totalConstructorNanoseconds=50475097 -RESULT name=sort n=100 t=8 iterations=3 durationNanoseconds=347863 totalDurationNanoseconds=1043591 constructorNanoseconds=2706 totalConstructorNanoseconds=8120 -RESULT name=sort n=1000 t=8 iterations=2 durationNanoseconds=610620 totalDurationNanoseconds=1221241 constructorNanoseconds=10400 totalConstructorNanoseconds=20800 -RESULT name=sort n=10001 t=8 iterations=2 durationNanoseconds=706495 totalDurationNanoseconds=1412991 constructorNanoseconds=29600 totalConstructorNanoseconds=59200 -RESULT name=sort n=100000 t=8 iterations=1 durationNanoseconds=7387085 totalDurationNanoseconds=7387085 constructorNanoseconds=557391 totalConstructorNanoseconds=557391 -RESULT name=sort n=10000000 t=8 iterations=1 durationNanoseconds=1261560682 totalDurationNanoseconds=1261560682 constructorNanoseconds=49470756 totalConstructorNanoseconds=49470756 -RESULT name=sort n=100 t=12 iterations=3 durationNanoseconds=432037 totalDurationNanoseconds=1296111 constructorNanoseconds=1170 totalConstructorNanoseconds=3510 -RESULT name=sort n=1000 t=12 iterations=1 durationNanoseconds=1092461 totalDurationNanoseconds=1092461 constructorNanoseconds=12880 totalConstructorNanoseconds=12880 -RESULT name=sort n=10001 t=12 iterations=1 durationNanoseconds=1019941 totalDurationNanoseconds=1019941 constructorNanoseconds=54540 totalConstructorNanoseconds=54540 -RESULT name=sort n=100000 t=12 iterations=1 durationNanoseconds=7159465 totalDurationNanoseconds=7159465 constructorNanoseconds=536730 totalConstructorNanoseconds=536730 -RESULT name=sort n=10000000 t=12 iterations=1 durationNanoseconds=1503813105 totalDurationNanoseconds=1503813105 constructorNanoseconds=50150056 totalConstructorNanoseconds=50150056 -RESULT name=sort n=100 t=16 iterations=3 durationNanoseconds=432706 totalDurationNanoseconds=1298120 constructorNanoseconds=3833 totalConstructorNanoseconds=11500 -RESULT name=sort n=1000 t=16 iterations=2 durationNanoseconds=784875 totalDurationNanoseconds=1569751 constructorNanoseconds=5285 totalConstructorNanoseconds=10570 -RESULT name=sort n=10001 t=16 iterations=1 durationNanoseconds=1953311 totalDurationNanoseconds=1953311 constructorNanoseconds=59420 totalConstructorNanoseconds=59420 -RESULT name=sort n=100000 t=16 iterations=1 durationNanoseconds=6820104 totalDurationNanoseconds=6820104 constructorNanoseconds=524961 totalConstructorNanoseconds=524961 -RESULT name=sort n=10000000 t=16 iterations=1 durationNanoseconds=1352546567 totalDurationNanoseconds=1352546567 constructorNanoseconds=52707158 totalConstructorNanoseconds=52707158 +RESULT name=sort n=100 t=1 iterations=95 durationNanoseconds=10561 totalDurationNanoseconds=1003361 constructorNanoseconds=460 totalConstructorNanoseconds=43740 +RESULT name=sort n=1000 t=1 iterations=22 durationNanoseconds=46203 totalDurationNanoseconds=1016480 constructorNanoseconds=764 totalConstructorNanoseconds=16820 +RESULT name=sort n=10001 t=1 iterations=3 durationNanoseconds=459633 totalDurationNanoseconds=1378901 constructorNanoseconds=18656 totalConstructorNanoseconds=55970 +RESULT name=sort n=100000 t=1 iterations=1 durationNanoseconds=8231415 totalDurationNanoseconds=8231415 constructorNanoseconds=514381 totalConstructorNanoseconds=514381 +RESULT name=sort n=10000000 t=1 iterations=1 durationNanoseconds=744634713 totalDurationNanoseconds=744634713 constructorNanoseconds=51303216 totalConstructorNanoseconds=51303216 +RESULT name=sort n=100 t=2 iterations=18 durationNanoseconds=58551 totalDurationNanoseconds=1053931 constructorNanoseconds=361 totalConstructorNanoseconds=6510 +RESULT name=sort n=1000 t=2 iterations=9 durationNanoseconds=120015 totalDurationNanoseconds=1080141 constructorNanoseconds=1345 totalConstructorNanoseconds=12110 +RESULT name=sort n=10001 t=2 iterations=3 durationNanoseconds=495777 totalDurationNanoseconds=1487331 constructorNanoseconds=19473 totalConstructorNanoseconds=58420 +RESULT name=sort n=100000 t=2 iterations=1 durationNanoseconds=7827986 totalDurationNanoseconds=7827986 constructorNanoseconds=508510 totalConstructorNanoseconds=508510 +RESULT name=sort n=10000000 t=2 iterations=1 durationNanoseconds=1296871738 totalDurationNanoseconds=1296871738 constructorNanoseconds=49085315 totalConstructorNanoseconds=49085315 +RESULT name=sort n=100 t=4 iterations=9 durationNanoseconds=118596 totalDurationNanoseconds=1067371 constructorNanoseconds=455 totalConstructorNanoseconds=4100 +RESULT name=sort n=1000 t=4 iterations=5 durationNanoseconds=220166 totalDurationNanoseconds=1100831 constructorNanoseconds=2204 totalConstructorNanoseconds=11020 +RESULT name=sort n=10001 t=4 iterations=2 durationNanoseconds=502925 totalDurationNanoseconds=1005851 constructorNanoseconds=29945 totalConstructorNanoseconds=59890 +RESULT name=sort n=100000 t=4 iterations=1 durationNanoseconds=5620814 totalDurationNanoseconds=5620814 constructorNanoseconds=528570 totalConstructorNanoseconds=528570 +RESULT name=sort n=10000000 t=4 iterations=1 durationNanoseconds=1198704968 totalDurationNanoseconds=1198704968 constructorNanoseconds=50132516 totalConstructorNanoseconds=50132516 +RESULT name=sort n=100 t=8 iterations=5 durationNanoseconds=222358 totalDurationNanoseconds=1111791 constructorNanoseconds=1116 totalConstructorNanoseconds=5580 +RESULT name=sort n=1000 t=8 iterations=3 durationNanoseconds=457883 totalDurationNanoseconds=1373650 constructorNanoseconds=3950 totalConstructorNanoseconds=11851 +RESULT name=sort n=10001 t=8 iterations=2 durationNanoseconds=705680 totalDurationNanoseconds=1411361 constructorNanoseconds=30140 totalConstructorNanoseconds=60280 +RESULT name=sort n=100000 t=8 iterations=1 durationNanoseconds=6234564 totalDurationNanoseconds=6234564 constructorNanoseconds=530141 totalConstructorNanoseconds=530141 +RESULT name=sort n=10000000 t=8 iterations=1 durationNanoseconds=1219668902 totalDurationNanoseconds=1219668902 constructorNanoseconds=50095186 totalConstructorNanoseconds=50095186 +RESULT name=sort n=100 t=12 iterations=3 durationNanoseconds=336683 totalDurationNanoseconds=1010050 constructorNanoseconds=1553 totalConstructorNanoseconds=4660 +RESULT name=sort n=1000 t=12 iterations=2 durationNanoseconds=709845 totalDurationNanoseconds=1419691 constructorNanoseconds=3685 totalConstructorNanoseconds=7370 +RESULT name=sort n=10001 t=12 iterations=1 durationNanoseconds=1008971 totalDurationNanoseconds=1008971 constructorNanoseconds=45810 totalConstructorNanoseconds=45810 +RESULT name=sort n=100000 t=12 iterations=1 durationNanoseconds=4991544 totalDurationNanoseconds=4991544 constructorNanoseconds=494530 totalConstructorNanoseconds=494530 +RESULT name=sort n=10000000 t=12 iterations=1 durationNanoseconds=1295272477 totalDurationNanoseconds=1295272477 constructorNanoseconds=50175095 totalConstructorNanoseconds=50175095 +RESULT name=sort n=100 t=16 iterations=2 durationNanoseconds=668925 totalDurationNanoseconds=1337851 constructorNanoseconds=3290 totalConstructorNanoseconds=6580 +RESULT name=sort n=1000 t=16 iterations=2 durationNanoseconds=828375 totalDurationNanoseconds=1656751 constructorNanoseconds=5660 totalConstructorNanoseconds=11320 +RESULT name=sort n=10001 t=16 iterations=1 durationNanoseconds=1319491 totalDurationNanoseconds=1319491 constructorNanoseconds=65160 totalConstructorNanoseconds=65160 +RESULT name=sort n=100000 t=16 iterations=1 durationNanoseconds=7145805 totalDurationNanoseconds=7145805 constructorNanoseconds=529550 totalConstructorNanoseconds=529550 +RESULT name=sort n=10000000 t=16 iterations=1 durationNanoseconds=1483766932 totalDurationNanoseconds=1483766932 constructorNanoseconds=52444497 totalConstructorNanoseconds=52444497 diff --git a/result.withouttaskhandler.txt b/result.withouttaskhandler.txt new file mode 100644 index 0000000..e7256c5 --- /dev/null +++ b/result.withouttaskhandler.txt @@ -0,0 +1,30 @@ +RESULT name=sort n=100 t=1 iterations=18 durationNanoseconds=57856 totalDurationNanoseconds=1041410 constructorNanoseconds=513 totalConstructorNanoseconds=9250 +RESULT name=sort n=1000 t=1 iterations=8 durationNanoseconds=126883 totalDurationNanoseconds=1015070 constructorNanoseconds=1475 totalConstructorNanoseconds=11800 +RESULT name=sort n=10001 t=1 iterations=2 durationNanoseconds=615565 totalDurationNanoseconds=1231131 constructorNanoseconds=30890 totalConstructorNanoseconds=61780 +RESULT name=sort n=100000 t=1 iterations=1 durationNanoseconds=9488107 totalDurationNanoseconds=9488107 constructorNanoseconds=524961 totalConstructorNanoseconds=524961 +RESULT name=sort n=10000000 t=1 iterations=1 durationNanoseconds=1416091993 totalDurationNanoseconds=1416091993 constructorNanoseconds=50440746 totalConstructorNanoseconds=50440746 +RESULT name=sort n=100 t=2 iterations=16 durationNanoseconds=63258 totalDurationNanoseconds=1012141 constructorNanoseconds=375 totalConstructorNanoseconds=6000 +RESULT name=sort n=1000 t=2 iterations=7 durationNanoseconds=154110 totalDurationNanoseconds=1078770 constructorNanoseconds=2008 totalConstructorNanoseconds=14060 +RESULT name=sort n=10001 t=2 iterations=3 durationNanoseconds=451387 totalDurationNanoseconds=1354161 constructorNanoseconds=19620 totalConstructorNanoseconds=58860 +RESULT name=sort n=100000 t=2 iterations=1 durationNanoseconds=6236655 totalDurationNanoseconds=6236655 constructorNanoseconds=514650 totalConstructorNanoseconds=514650 +RESULT name=sort n=10000000 t=2 iterations=1 durationNanoseconds=1380325518 totalDurationNanoseconds=1380325518 constructorNanoseconds=50373886 totalConstructorNanoseconds=50373886 +RESULT name=sort n=100 t=4 iterations=9 durationNanoseconds=118743 totalDurationNanoseconds=1068691 constructorNanoseconds=436 totalConstructorNanoseconds=3930 +RESULT name=sort n=1000 t=4 iterations=4 durationNanoseconds=272115 totalDurationNanoseconds=1088461 constructorNanoseconds=2415 totalConstructorNanoseconds=9660 +RESULT name=sort n=10001 t=4 iterations=2 durationNanoseconds=569255 totalDurationNanoseconds=1138510 constructorNanoseconds=29920 totalConstructorNanoseconds=59840 +RESULT name=sort n=100000 t=4 iterations=1 durationNanoseconds=6598125 totalDurationNanoseconds=6598125 constructorNanoseconds=507180 totalConstructorNanoseconds=507180 +RESULT name=sort n=10000000 t=4 iterations=1 durationNanoseconds=1300242690 totalDurationNanoseconds=1300242690 constructorNanoseconds=50475097 totalConstructorNanoseconds=50475097 +RESULT name=sort n=100 t=8 iterations=3 durationNanoseconds=347863 totalDurationNanoseconds=1043591 constructorNanoseconds=2706 totalConstructorNanoseconds=8120 +RESULT name=sort n=1000 t=8 iterations=2 durationNanoseconds=610620 totalDurationNanoseconds=1221241 constructorNanoseconds=10400 totalConstructorNanoseconds=20800 +RESULT name=sort n=10001 t=8 iterations=2 durationNanoseconds=706495 totalDurationNanoseconds=1412991 constructorNanoseconds=29600 totalConstructorNanoseconds=59200 +RESULT name=sort n=100000 t=8 iterations=1 durationNanoseconds=7387085 totalDurationNanoseconds=7387085 constructorNanoseconds=557391 totalConstructorNanoseconds=557391 +RESULT name=sort n=10000000 t=8 iterations=1 durationNanoseconds=1261560682 totalDurationNanoseconds=1261560682 constructorNanoseconds=49470756 totalConstructorNanoseconds=49470756 +RESULT name=sort n=100 t=12 iterations=3 durationNanoseconds=432037 totalDurationNanoseconds=1296111 constructorNanoseconds=1170 totalConstructorNanoseconds=3510 +RESULT name=sort n=1000 t=12 iterations=1 durationNanoseconds=1092461 totalDurationNanoseconds=1092461 constructorNanoseconds=12880 totalConstructorNanoseconds=12880 +RESULT name=sort n=10001 t=12 iterations=1 durationNanoseconds=1019941 totalDurationNanoseconds=1019941 constructorNanoseconds=54540 totalConstructorNanoseconds=54540 +RESULT name=sort n=100000 t=12 iterations=1 durationNanoseconds=7159465 totalDurationNanoseconds=7159465 constructorNanoseconds=536730 totalConstructorNanoseconds=536730 +RESULT name=sort n=10000000 t=12 iterations=1 durationNanoseconds=1503813105 totalDurationNanoseconds=1503813105 constructorNanoseconds=50150056 totalConstructorNanoseconds=50150056 +RESULT name=sort n=100 t=16 iterations=3 durationNanoseconds=432706 totalDurationNanoseconds=1298120 constructorNanoseconds=3833 totalConstructorNanoseconds=11500 +RESULT name=sort n=1000 t=16 iterations=2 durationNanoseconds=784875 totalDurationNanoseconds=1569751 constructorNanoseconds=5285 totalConstructorNanoseconds=10570 +RESULT name=sort n=10001 t=16 iterations=1 durationNanoseconds=1953311 totalDurationNanoseconds=1953311 constructorNanoseconds=59420 totalConstructorNanoseconds=59420 +RESULT name=sort n=100000 t=16 iterations=1 durationNanoseconds=6820104 totalDurationNanoseconds=6820104 constructorNanoseconds=524961 totalConstructorNanoseconds=524961 +RESULT name=sort n=10000000 t=16 iterations=1 durationNanoseconds=1352546567 totalDurationNanoseconds=1352546567 constructorNanoseconds=52707158 totalConstructorNanoseconds=52707158 diff --git a/src/single_task_handler.cpp b/src/single_task_handler.cpp new file mode 100644 index 0000000..9de4ba3 --- /dev/null +++ b/src/single_task_handler.cpp @@ -0,0 +1,11 @@ +#include "single_task_handler.hpp" + +void SingleTaskHandler::add(std::function task) { + task(); +} +uint32_t SingleTaskHandler::size() { + return 0; +} +bool SingleTaskHandler::isWorking() { + return false; +} \ No newline at end of file diff --git a/src/single_task_handler.hpp b/src/single_task_handler.hpp new file mode 100644 index 0000000..fed30e0 --- /dev/null +++ b/src/single_task_handler.hpp @@ -0,0 +1,8 @@ +#pragma once +#include "task_handler.hpp" + +class SingleTaskHandler: TaskHandler { + void add(std::function task); + uint32_t size(); + bool isWorking(); +}; \ No newline at end of file diff --git a/src/sorter.cpp b/src/sorter.cpp index 27de298..5066f28 100755 --- a/src/sorter.cpp +++ b/src/sorter.cpp @@ -1,5 +1,8 @@ #include "sorter.hpp" +#include "single_task_handler.hpp" +#include "thread_pool.hpp" + #include #include #include @@ -13,7 +16,11 @@ namespace ae { sorter::sorter(uint32_t num = 1) { sorter::num_threads = num; - sorter::pool = new ThreadPool(num); + if (num > 1) { + sorter::handler = (TaskHandler*) new ThreadPool(num); + } else { + sorter::handler = (TaskHandler*) new SingleTaskHandler(); + } } void sorter::sort(container& data) { @@ -32,7 +39,7 @@ void sorter::sort(container& data) { std::sort(copy.begin(), copy.end()); #endif sorter::msd_inplace_radix_sort(data.placeholder_[0], 0, [&](auto span) {sorter::robin_hood_sort(span);}); - while (sorter::pool->size() > 0 || sorter::pool->isWorking()) {}; + while (sorter::handler->size() > 0 || sorter::handler->isWorking()) {}; #if DEBUG for (int i = 0; i < copy.size(); i++) { if (copy[i] != data.placeholder_[0][i]) @@ -175,24 +182,20 @@ void sorter::msd_inplace_radix_sort( // sort each bucket recursively for (auto i = 0; i < sorter::RADIX_BUCKETS; i++) { - if (sorter::pool != nullptr) { + #if DEBUG + std::cerr << "Putting in task with depth " << passes << " of bucket " << i << std::endl; + #endif + auto start = buckets_start[i]; + auto end = buckets_end[i]; + sorter::handler->add([start, end, &bucket_sort, passes, this, i](){ #if DEBUG - std::cerr << "Putting in task with depth " << passes << " of bucket " << i << std::endl; + std::cerr << "Starting task with depth " << passes << " of bucket " << i << std::endl; #endif - auto start = buckets_start[i]; - auto end = buckets_end[i]; - sorter::pool->add([start, end, &bucket_sort, passes, this, i](){ - #if DEBUG - std::cerr << "Starting task with depth " << passes << " of bucket " << i << std::endl; - #endif - sorter::msd_inplace_radix_sort(std::span (start, end), passes + 1, bucket_sort); - #if DEBUG - std::cerr << "Finishing task with depth " << passes << " of bucket " << i << std::endl; - #endif - }); - } else { - sorter::msd_inplace_radix_sort(std::span (buckets_start[i], buckets_end[i]), passes + 1, bucket_sort); - } + sorter::msd_inplace_radix_sort(std::span (start, end), passes + 1, bucket_sort); + #if DEBUG + std::cerr << "Finishing task with depth " << passes << " of bucket " << i << std::endl; + #endif + }); } } diff --git a/src/sorter.hpp b/src/sorter.hpp index 2747def..f395283 100755 --- a/src/sorter.hpp +++ b/src/sorter.hpp @@ -1,7 +1,7 @@ #pragma once #include "container.hpp" -#include "thread_pool.hpp" +#include "task_handler.hpp" #include "functional" #include "math.h" #include @@ -40,7 +40,7 @@ class sorter { const uint32_t RADIX_BUCKETS = std::pow(2, 4); const uint32_t RADIX_ITERATIONS = 8; uint32_t num_threads; - ThreadPool* pool = nullptr; + TaskHandler* handler = nullptr; void robin_hood_sort(std::span range); }; diff --git a/src/task_handler.hpp b/src/task_handler.hpp new file mode 100644 index 0000000..d9bea65 --- /dev/null +++ b/src/task_handler.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include +#include + +class TaskHandler { + public: + virtual void add(std::function task) = 0; + virtual uint32_t size() = 0; + virtual bool isWorking() = 0; +}; \ No newline at end of file diff --git a/src/thread_pool.hpp b/src/thread_pool.hpp index b8a823a..82eb9a4 100644 --- a/src/thread_pool.hpp +++ b/src/thread_pool.hpp @@ -1,5 +1,6 @@ #pragma once +#include "task_handler.hpp" #include #include #include @@ -11,7 +12,7 @@ // This class was inspired by https://www.geeksforgeeks.org/cpp/thread-pool-in-cpp/ (access: 26/09/2025) // to more efficiently handle threads -class ThreadPool { +class ThreadPool: TaskHandler { private: std::vector threads; std::queue> tasks;