class to derive a partitioner for scheduling parallel algorithms More...
#include <taskflow/algorithm/partitioner.hpp>
Public Types | |
| using | closure_wrapper_type = C |
| the closure type | |
Public Member Functions | |
| PartitionerBase ()=default | |
| default constructor | |
| PartitionerBase (size_t chunk_size) | |
| construct a partitioner with the given chunk size | |
| PartitionerBase (size_t chunk_size, C &&closure_wrapper) | |
| construct a partitioner with the given chunk size and closure wrapper | |
| size_t | chunk_size () const |
| query the chunk size of this partitioner | |
| void | chunk_size (size_t cz) |
| update the chunk size of this partitioner | |
| const C & | closure_wrapper () const |
| acquire an immutable access to the closure wrapper object | |
| C & | closure_wrapper () |
| acquire a mutable access to the closure wrapper object | |
| template<typename F> | |
| void | closure_wrapper (F &&fn) |
| modify the closure wrapper object | |
| template<typename F> | |
| TF_FORCE_INLINE decltype(auto) | operator() (F &&callable) |
| wraps the given callable with the associated closure wrapper | |
Static Public Attributes | |
| static constexpr bool | is_default_wrapper_v = std::is_same_v<C, DefaultClosureWrapper> |
| indicating if the given closure wrapper is a default wrapper (i.e., empty) | |
class to derive a partitioner for scheduling parallel algorithms
| C | closure wrapper type |
The class provides base methods to derive a partitioner that can be used to schedule parallel iterations (e.g., tf::Taskflow::for_each).
An partitioner defines the scheduling method for running parallel algorithms, such tf::Taskflow::for_each, tf::Taskflow::reduce, and so on. By default, we provide the following partitioners:
Depending on applications, partitioning algorithms can impact the performance a lot. For example, if a parallel-iteration workload contains a regular work unit per iteration, tf::StaticPartitioner can deliver the best performance. On the other hand, if the work unit per iteration is irregular and unbalanced, tf::GuidedPartitioner or tf::DynamicPartitioner can outperform tf::StaticPartitioner. In most situations, tf::GuidedPartitioner can deliver decent performance and is thus used as our default partitioner.
In addition to partition size, the application can specify a closure wrapper for a partitioner. A closure wrapper allows the application to wrap a partitioned task (i.e., closure) with a custom function object that performs additional tasks. For example: