From 4fe555b7c47023e2cb8b7f0ff0397fa83c1978fe Mon Sep 17 00:00:00 2001 From: FritzFlorian Date: Wed, 17 Apr 2019 09:56:18 +0200 Subject: [PATCH] Add 'bare structure' of parallel_for task. These currently do nothing but being boilerplate required to implement a new top level task. --- lib/pls/CMakeLists.txt | 4 +++- lib/pls/include/pls/internal/scheduling/fork_join_task.h | 1 + lib/pls/include/pls/internal/scheduling/parallel_iterator_task.h | 28 ++++++++++++++++++++++++++++ lib/pls/include/pls/internal/scheduling/parallel_iterator_task_impl.h | 35 +++++++++++++++++++++++++++++++++++ lib/pls/src/internal/scheduling/parallel_iterator_task.cpp | 1 + 5 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 lib/pls/include/pls/internal/scheduling/parallel_iterator_task.h create mode 100644 lib/pls/include/pls/internal/scheduling/parallel_iterator_task_impl.h create mode 100644 lib/pls/src/internal/scheduling/parallel_iterator_task.cpp diff --git a/lib/pls/CMakeLists.txt b/lib/pls/CMakeLists.txt index 66ed5b1..170cb67 100644 --- a/lib/pls/CMakeLists.txt +++ b/lib/pls/CMakeLists.txt @@ -32,7 +32,9 @@ add_library(pls STATIC include/pls/internal/scheduling/run_on_n_threads_task.h src/internal/scheduling/run_on_n_threads_task.cpp include/pls/internal/scheduling/fork_join_task.h src/internal/scheduling/fork_join_task.cpp include/pls/internal/scheduling/scheduler_memory.h src/internal/scheduling/scheduler_memory.cpp -) + include/pls/internal/scheduling/parallel_iterator_task.h + include/pls/internal/scheduling/parallel_iterator_task_impl.h + src/internal/scheduling/parallel_iterator_task.cpp) # Add everything in `./include` to be in the include path of this project target_include_directories(pls diff --git a/lib/pls/include/pls/internal/scheduling/fork_join_task.h b/lib/pls/include/pls/internal/scheduling/fork_join_task.h index b7b0da3..6a54f09 100644 --- a/lib/pls/include/pls/internal/scheduling/fork_join_task.h +++ b/lib/pls/include/pls/internal/scheduling/fork_join_task.h @@ -73,6 +73,7 @@ namespace pls { fork_join_sub_task* get_local_sub_task(); fork_join_sub_task* get_stolen_sub_task(); + protected: bool internal_stealing(abstract_task* other_task) override; bool split_task(base::spin_lock* /*lock*/) override; diff --git a/lib/pls/include/pls/internal/scheduling/parallel_iterator_task.h b/lib/pls/include/pls/internal/scheduling/parallel_iterator_task.h new file mode 100644 index 0000000..c57b1ab --- /dev/null +++ b/lib/pls/include/pls/internal/scheduling/parallel_iterator_task.h @@ -0,0 +1,28 @@ + +#ifndef PLS_PARALLEL_ITERATOR_TASK_H +#define PLS_PARALLEL_ITERATOR_TASK_H + +#include "abstract_task.h" + +namespace pls { + namespace internal { + namespace scheduling { + template + class parallel_iterator_task: public abstract_task { + RandomIt first_, last_; + Function function_; + + protected: + bool internal_stealing(abstract_task* other_task) override; + bool split_task(base::spin_lock* /*lock*/) override; + + public: + explicit parallel_iterator_task(RandomIt first, RandomIt last, Function function, const abstract_task::id& id); + void execute() override; + }; + } + } +} +#include "parallel_iterator_task_impl.h" + +#endif //PLS_PARALLEL_ITERATOR_TASK_H diff --git a/lib/pls/include/pls/internal/scheduling/parallel_iterator_task_impl.h b/lib/pls/include/pls/internal/scheduling/parallel_iterator_task_impl.h new file mode 100644 index 0000000..a0ab2dd --- /dev/null +++ b/lib/pls/include/pls/internal/scheduling/parallel_iterator_task_impl.h @@ -0,0 +1,35 @@ + +#ifndef PLS_PARALLEL_ITERATOR_TASK_IMPL_H +#define PLS_PARALLEL_ITERATOR_TASK_IMPL_H + + +namespace pls { + namespace internal { + namespace scheduling { + template + parallel_iterator_task::parallel_iterator_task + (RandomIt first, RandomIt last, Function function, const abstract_task::id& id): + abstract_task(0, id), + first_{first}, + last_{last}, + function_{function} {} + + template + void parallel_iterator_task::execute() { + + } + + template + bool parallel_iterator_task::split_task(base::spin_lock* /*lock*/) { + return false; + } + + template + bool parallel_iterator_task::internal_stealing(abstract_task* other_task) { + return false; + } + } + } +} + +#endif //PLS_PARALLEL_ITERATOR_TASK_IMPL_H diff --git a/lib/pls/src/internal/scheduling/parallel_iterator_task.cpp b/lib/pls/src/internal/scheduling/parallel_iterator_task.cpp new file mode 100644 index 0000000..4b22133 --- /dev/null +++ b/lib/pls/src/internal/scheduling/parallel_iterator_task.cpp @@ -0,0 +1 @@ +#include "pls/internal/scheduling/parallel_iterator_task.h" -- libgit2 0.26.0