![]() |
Taskflow
3.2.0-Master-Branch
|
class to create a pipeline scheduling framework More...
#include <pipeline.hpp>
Public Member Functions | |
Pipeline (size_t num_lines, Ps &&... ps) | |
constructs a pipeline object | |
Pipeline (size_t num_lines, std::tuple< Ps... > &&ps) | |
constructs a pipeline object | |
size_t | num_lines () const noexcept |
queries the number of parallel lines | |
constexpr size_t | num_pipes () const noexcept |
queries the number of pipes | |
void | reset () |
resets the pipeline | |
size_t | num_tokens () const noexcept |
queries the number of generated tokens in the pipeline | |
Graph & | graph () |
obtains the graph object associated with the pipeline construct | |
class to create a pipeline scheduling framework
Ps | pipe types |
A pipeline is a composable graph object for users to create a pipeline scheduling framework using a module task in a taskflow. Unlike the conventional pipeline programming frameworks (e.g., Intel TBB), Taskflow's pipeline algorithm does not provide any data abstraction, which often restricts users from optimizing data layouts in their applications, but a flexible framework for users to customize their application data atop our pipeline scheduling. The following code creates a pipeline of four parallel lines to schedule tokens through three serial pipes:
The above example creates a pipeline graph that schedules five tokens over four parallel lines in a circular fashion, as depicted below:
At each pipe stage, the program propagates the result to the next pipe by adding one to the result stored in a custom data storage, buffer
. The pipeline scheduler will generate five scheduling tokens and then stop.
Internally, tf::Pipeline uses std::tuple to store the given sequence of pipes. The definition of each pipe can be different, completely decided by the compiler to optimize the object layout. After a pipeline is constructed, it is not possible to change its pipes. If applications need to change these pipes, please use tf::ScalablePipeline.
tf::Pipeline< Ps >::Pipeline | ( | size_t | num_lines, |
Ps &&... | ps | ||
) |
constructs a pipeline object
num_lines | the number of parallel lines |
ps | a list of pipes |
Constructs a pipeline of up to num_lines
parallel lines to schedule tokens through the given linear chain of pipes. The first pipe must define a serial direction (tf::PipeType::SERIAL) or an exception will be thrown.
tf::Pipeline< Ps >::Pipeline | ( | size_t | num_lines, |
std::tuple< Ps... > && | ps | ||
) |
constructs a pipeline object
num_lines | the number of parallel lines |
ps | a tuple of pipes |
Constructs a pipeline of up to num_lines
parallel lines to schedule tokens through the given linear chain of pipes. The first pipe must define a serial direction (tf::PipeType::SERIAL) or an exception will be thrown.
Graph & tf::Pipeline< Ps >::graph | ( | ) |
obtains the graph object associated with the pipeline construct
This method is primarily used as an opaque data structure for creating a module task of the this pipeline.
|
noexcept |
queries the number of parallel lines
The function returns the number of parallel lines given by the user upon the construction of the pipeline. The number of lines represents the maximum parallelism this pipeline can achieve.
|
constexprnoexcept |
queries the number of pipes
The Function returns the number of pipes given by the user upon the construction of the pipeline.
|
noexcept |
queries the number of generated tokens in the pipeline
The number represents the total scheduling tokens that has been generated by the pipeline so far.
void tf::Pipeline< Ps >::reset | ( | ) |
resets the pipeline
Resetting the pipeline to the initial state. After resetting a pipeline, its token identifier will start from zero as if the pipeline was just constructed.