GrPPI  0.2
Generic and Reusable Parallel Pattern Interface
Namespaces | Classes | Typedefs | Enumerations | Functions
grppi Namespace Reference

Namespaces

 internal
 

Classes

class  farm_info
 
class  filter_info
 
struct  is_iterator
 
struct  is_iterator< T, typename std::enable_if<!std::is_same< typename std::iterator_traits< T >::value_type, void >::value >::type >
 
class  mpmc_queue
 
class  native_thread_manager
 RAII class to manage registration/deregistration pairs. This class allows to manage automatic deregistration of threads through the common RAII pattern. The current thread is registered into the registry at construction and deregistered a destruction. More...
 
class  parallel_execution_native
 Native parallel execution policy. This policy uses ISO C++ threads as implementation building block allowing usage in any ISO C++ compliant platform. More...
 
class  parallel_execution_omp
 OpenMP parallel execution policy. More...
 
class  parallel_execution_tbb
 TBB parallel execution policy. More...
 
class  pipeline_info
 
class  polymorphic_execution
 
class  reduction_info
 
class  sequential_execution
 Sequential execution policy. More...
 
class  thread_pool
 
class  thread_registry
 Thread index table to provide portable natural thread indices. More...
 

Typedefs

template<typename F >
using requires_no_arguments = typename std::enable_if_t<!internal::has_arguments< F >(), int >
 
template<typename F >
using requires_arguments = typename std::enable_if_t< internal::has_arguments< F >(), int >
 
template<typename E >
using requires_execution_policy = std::enable_if_t< is_execution_policy< E >(), int >
 Simulate concept requirement for being an execution policy. More...
 
template<typename E >
using requires_not_execution_policy = std::enable_if_t<!is_execution_policy< E >(), int >
 Simulate concept requirement for not being an execution policy. More...
 

Enumerations

enum  queue_mode { queue_mode::lockfree = true, queue_mode::blocking = false }
 

Functions

template<typename... InputIt>
void advance_iterators (size_t delta, InputIt &...in)
 
template<typename... InputIt>
void advance_iterators (InputIt &...in)
 
template<typename Execution , typename Transformer >
auto farm (Execution &ex, Transformer &&transform_op)
 Invoke Farm pattern on a data stream that can be composed in other streaming patterns. More...
 
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of< Solver(Input)>::type internal_divide_conquer (parallel_execution_native &p, Input &input, Divider &&divide_op, Solver &&solve_op, Combiner &&combine_op, std::atomic< int > &num_threads)
 
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of< Solver(Input)>::type divide_conquer (parallel_execution_native &ex, Input &problem, Divider &&divide_op, Solver &&solve_op, Combiner &&combine_op)
 Invoke Divide/conquer pattern with native parallel execution. More...
 
template<typename Generator , typename Consumer >
void farm (parallel_execution_native &ex, Generator generate_op, Consumer consume_op)
 Invoke Farm pattern on a data stream with native parallel execution with a generator and a consumer. More...
 
template<typename Generator , typename Transformer , typename Consumer >
void farm (parallel_execution_native &ex, Generator generate_op, Transformer transform_op, Consumer consume_op)
 Invoke Farm pattern on a data stream with native parallel execution with a generator and a consumer. More...
 
template<typename InputIt , typename OutputIt , typename Transformer >
void map (parallel_execution_native &ex, InputIt first, InputIt last, OutputIt first_out, Transformer &&transf_op)
 Invoke Map pattern on a data sequence with native paralell execution. More...
 
template<typename InputIt , typename OutputIt , typename Transformer , typename... OtherInputIts>
void map (parallel_execution_native &ex, InputIt first, InputIt last, OutputIt first_out, Transformer &&transf_op, OtherInputIts...more_inputs)
 Invoke Map pattern on a data sequence with native parallel execution. More...
 
template<typename InputIt , typename Result , typename Transformer , typename Combiner >
Result map_reduce (parallel_execution_native &ex, InputIt first, InputIt last, Result identity, Transformer &&transform_op, Combiner &&combine_op)
 Invoke Map/reduce pattern on a data sequence with native parallel execution. More...
 
template<typename E >
constexpr bool is_parallel_execution_native ()
 Metafunction that determines if type E is parallel_execution_native. More...
 
template<typename E >
constexpr bool is_supported ()
 Metafunction that determines if type E is supported in the current build. More...
 
template<>
constexpr bool is_supported< parallel_execution_native > ()
 Specialization stating that parallel_execution_native is supported. More...
 
template<typename InQueue , typename OutQueue , int Index, typename... MoreTransformers, internal::requires_index_last< Index, MoreTransformers... > = 0>
void composed_pipeline (InQueue &input_queue, const pipeline_info< parallel_execution_native, MoreTransformers... > &pipe, OutQueue &output_queue, std::vector< std::thread > &tasks)
 
template<typename InQueue , typename Transformer , typename OutQueue >
void composed_pipeline (parallel_execution_native &ex, InQueue &input_queue, Transformer &&transform_op, OutQueue &output_queue, std::vector< std::thread > &tasks)
 
template<typename InQueue , typename Consumer >
void pipeline_impl (parallel_execution_native &ex, InQueue &input_queue, Consumer &&consume)
 
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_native &ex, InQueue &input_queue, reduction_info< parallel_execution_native, Combiner, Identity > &reduction_obj, MoreTransformers...more_transform_ops)
 
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_native &ex, InQueue &input_queue, reduction_info< parallel_execution_native, Combiner, Identity > &&reduction_obj, MoreTransformers...more_transform_ops)
 
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void pipeline_impl_ordered (parallel_execution_native &ex, InQueue &input_queue, reduction_info< parallel_execution_native, Combiner, Identity > &&reduction_obj, MoreTransformers...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_native &ex, InQueue &input_queue, filter_info< parallel_execution_native, Transformer > &filter_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl_ordered (parallel_execution_native &ex, InQueue &input_queue, filter_info< parallel_execution_native, Transformer > &&filter_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl_unordered (parallel_execution_native &ex, InQueue &input_queue, filter_info< parallel_execution_native, Transformer > &&filter_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_native &ex, InQueue &input_queue, filter_info< parallel_execution_native, Transformer > &&filter_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_native &ex, InQueue &input_queue, farm_info< parallel_execution_native, Transformer > &farm_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_native &p, InQueue &input_queue, farm_info< parallel_execution_native, Transformer > &&farm_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_native &ex, InQueue &input_queue, Transformer &&transform_op, MoreTransformers &&...more_transform_ops)
 
template<typename Generator , typename... Transformers, requires_no_arguments< Generator > = 0>
void pipeline (parallel_execution_native &ex, Generator &&generate_op, Transformers &&...transform_ops)
 Invoke Pipeline pattern on a data stream with native parallel execution. More...
 
template<typename InputIt , typename Identity , typename Combiner >
auto reduce (parallel_execution_native &ex, InputIt first, InputIt last, Identity identity, Combiner &&combine_op)
 Invoke Reduce pattern with identity value on a data sequence with parallel native execution. More...
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood >
void stencil (parallel_execution_native &ex, InputIt first, InputIt last, OutputIt first_out, StencilTransformer transform_op, Neighbourhood neighbour_op)
 Invoke Stencil pattern on a data sequence with native parallel execution. More...
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts>
void stencil (parallel_execution_native &ex, InputIt first, InputIt last, OutputIt first_out, StencilTransformer transform_op, Neighbourhood neighbour_op, OtherInputIts...other_firsts)
 Invoke Stencil pattern on multiple data sequences with native parallel execution. More...
 
template<typename Generator , typename Predicate , typename Consumer >
void keep (parallel_execution_native &ex, Generator generate_op, Predicate predicate_op, Consumer consume_op)
 Invoke Filter pattern pattern on a data sequence with sequential execution policy. This function keeps in the stream only those items that satisfy the predicate. More...
 
template<typename Generator , typename Predicate , typename Consumer >
void discard (parallel_execution_native &ex, Generator generate_op, Predicate predicate_op, Consumer consume_op)
 Invoke Filter pattern on a data sequence with sequential execution policy. This function discards from the stream those items that satisfy the predicate. More...
 
template<typename Generator , typename Predicate , typename Consumer , typename... MoreTransformers>
void repeat_until (parallel_execution_native &ex, Generator &&generate_op, pipeline_info< parallel_execution_native, MoreTransformers... > &&pipe, Predicate predicate_op, Consumer consume_op)
 Invoke Stream iteration pattern on a data stream with native parallel execution with a generator, a predicate, a consumer and a pipeline as a transformer. More...
 
template<typename Generator , typename Transformer , typename Predicate , typename Consumer >
void repeat_until (parallel_execution_native &ex, Generator generate_op, farm_info< parallel_execution_native, Transformer > &&farm, Predicate predicate_op, Consumer consume_op)
 Invoke Stream iteration pattern on a data stream with native parallel execution with a generator, a predicate, a consumer and a farm as a transformer. More...
 
template<typename Generator , typename Transformer , typename Predicate , typename Consumer >
void repeat_until (parallel_execution_native &ex, Generator generate_op, Transformer transform_op, Predicate predicate_op, Consumer consume_op)
 Invoke Stream iteration pattern on a data stream with native parallel execution with a generator, a predicate, a transformer and a consumer. More...
 
template<typename Identity , typename Combiner , typename Consumer , typename Generator >
void stream_reduce (parallel_execution_native &ex, int window_size, int offset, Identity identity, Generator &&generate_op, Combiner &&combine_op, Consumer &&consume_op)
 Invoke Stream reduction pattern on a stream with native parallel execution. More...
 
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of< Solver(Input)>::type internal_divide_conquer (parallel_execution_omp &ex, Input &input, Divider &&divide_op, Solver &&solve_op, Combiner &&combine_op, std::atomic< int > &num_threads)
 
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of< Solver(Input)>::type divide_conquer (parallel_execution_omp &ex, Input &input, Divider &&divide_op, Solver &&solve_op, Combiner &&combine_op)
 Invoke Divide/conquer pattern with OpenMP parallel execution. More...
 
template<typename Generator , typename Consumer >
void farm (parallel_execution_omp &ex, Generator generate_op, Consumer consume_op)
 Invoke the Farm pattern on a data stream with OpenMP parallel execution with a generator and a consumer. More...
 
template<typename Generator , typename Transformer , typename Consumer >
void farm (parallel_execution_omp &ex, Generator generate_op, Transformer transform_op, Consumer consume_op)
 Invoke the Farm pattern on a data stream with OpenMP parallel execution with a generator, a transformer, and a consumer. More...
 
template<typename InputIt , typename OutputIt , typename Transformer , typename... OtherInputIts>
void internal_map (parallel_execution_omp &ex, InputIt first, InputIt last, OutputIt first_out, Transformer &&transf_op, int i, int elemperthr, OtherInputIts...more_firsts)
 
template<typename InputIt , typename OutputIt , typename Transformer >
void map (parallel_execution_omp &ex, InputIt first, InputIt last, OutputIt first_out, Transformer &&transf_op)
 Invoke Map pattern on a data sequence with OpenMP parallel execution. More...
 
template<typename InputIt , typename OutputIt , typename Transformer , typename... OtherInputIts>
void map (parallel_execution_omp &ex, InputIt first, InputIt last, OutputIt first_out, Transformer &&transf_op, OtherInputIts...more_firsts)
 Invoke Map pattern on a data sequence with OpenMP execution. More...
 
template<typename InputIt , typename Transformer , typename Result , typename Combiner >
Result map_reduce (parallel_execution_omp &ex, InputIt first, InputIt last, Result identity, Transformer &&transform_op, Combiner &&combine_op)
 Invoke Map/reduce pattern on a data sequence with native parallel execution. More...
 
template<typename E >
constexpr bool is_parallel_execution_omp ()
 Metafunction that determines if type E is parallel_execution_omp. More...
 
template<>
constexpr bool is_supported< parallel_execution_omp > ()
 Specialization stating that parallel_execution_omp is supported. This metafunction evaluates to false if GRPPI_OMP is enabled. More...
 
template<typename InQueue , typename Consumer >
void pipeline_impl (parallel_execution_omp &ex, InQueue &input_queue, Consumer &&consume_op)
 
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_omp &ex, InQueue &input_queue, reduction_info< parallel_execution_omp, Combiner, Identity > &reduction_obj, MoreTransformers...more_transform_ops)
 
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_omp &ex, InQueue &input_queue, reduction_info< parallel_execution_omp, Combiner, Identity > &&reduction_obj, MoreTransformers...more_transform_ops)
 
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void pipeline_impl_ordered (parallel_execution_omp &ex, InQueue &input_queue, reduction_info< parallel_execution_omp, Combiner, Identity > &&reduction_obj, MoreTransformers...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_omp &ex, InQueue &input_queue, filter_info< parallel_execution_omp, Transformer > &filter_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl_ordered (parallel_execution_omp &ex, InQueue &input_queue, filter_info< parallel_execution_omp, Transformer > &&filter_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl_unordered (parallel_execution_omp &ex, InQueue &input_queue, filter_info< parallel_execution_omp, Transformer > &&farm_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_omp &ex, InQueue &input_queue, filter_info< parallel_execution_omp, Transformer > &&filter_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_omp &ex, InQueue &input_queue, farm_info< parallel_execution_omp, Transformer > &farm_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_omp &ex, InQueue &input_queue, farm_info< parallel_execution_omp, Transformer > &&farm_obj, MoreTransformers &&...sgs)
 
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void pipeline_impl (parallel_execution_omp &ex, InQueue &input_queue, Transformer &&transform_op, MoreTransformers &&...more_transform_ops)
 
template<typename Generator , typename... Transformers, requires_no_arguments< Generator > = 0>
void pipeline (parallel_execution_omp &ex, Generator &&generate_op, Transformers &&...transform_ops)
 Invoke Pipeline pattern on a data stream with OpenMP parallel execution. More...
 
template<typename InputIt , typename Identity , typename Combiner >
auto reduce (parallel_execution_omp &ex, InputIt first, InputIt last, Identity identity, Combiner &&combine_op)
 Invoke Reduce pattern with identity value on a data sequence with parallel OpenMP execution. More...
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts>
void internal_stencil (parallel_execution_omp &ex, InputIt first, InputIt last, OutputIt first_out, StencilTransformer transform_op, Neighbourhood neighbour_op, int i, int elements_per_thread, OtherInputIts...other_firsts)
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood >
void stencil (parallel_execution_omp &ex, InputIt first, InputIt last, OutputIt first_out, StencilTransformer transform_op, Neighbourhood neighbour_op)
 Invoke Stencil pattern on a data sequence with OpenMP parallel execution. More...
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts>
void stencil (parallel_execution_omp &ex, InputIt first, InputIt last, OutputIt first_out, StencilTransformer &&transform_op, Neighbourhood &&neighbour_op, OtherInputIts...other_firsts)
 Invoke Stencil pattern on multiple data sequences with TBB parallel execution. More...
 
template<typename Generator , typename Predicate , typename Consumer >
void keep (parallel_execution_omp &ex, Generator generate_op, Predicate predicate_op, Consumer consume_op)
 Invoke Filter pattern on a data sequence with sequential execution policy. This function keeps in the stream only those items that satisfy the predicate. More...
 
template<typename Generator , typename Predicate , typename Consumer >
void discard (parallel_execution_omp &ex, Generator generate_op, Predicate predicate_op, Consumer consume_op)
 Invoke Filter pattern on a data sequence with sequential execution policy. This function discards from the stream those items that satisfy the predicate. More...
 
template<typename Identity , typename Combiner , typename Consumer , typename Generator >
void stream_reduce (parallel_execution_omp &ex, int window_size, int offset, Identity identity, Generator &&generate_op, Combiner &&combine_op, Consumer &&consume_op)
 Invoke Stream reduction pattern on a stream with OpenMP parallel execution. More...
 
template<typename Execution , typename Transformer , typename... MoreTransformers, requires_arguments< Transformer > = 0>
pipeline_info< Execution, Transformer, MoreTransformers... > pipeline (Execution &ex, Transformer &&transform_op, MoreTransformers &&...more_transform_ops)
 Build a composable Pipeline pattern representation that can be composed in other streaming patterns. More...
 
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of< Solver(Input)>::type divide_conquer_multi_impl (polymorphic_execution &ex, Input &input, Divider &&divide_op, Solver &&solve_op, Combiner &&combine_op)
 
template<typename E , typename... O, typename Input , typename Divider , typename Solver , typename Combiner , internal::requires_execution_not_supported< E > = 0>
std::result_of< Solver(Input)>::type divide_conquer_multi_impl (polymorphic_execution &ex, Input &input, Divider &&divide_op, Solver &&solve_op, Combiner &&combine_op)
 
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of< Solver(Input)>::type divide_conquer (polymorphic_execution &ex, Input &input, Divider &&divide_op, Solver &&solve_op, Combiner &&combine_op)
 Invoke Divide/conquer pattern with polymorphic execution. More...
 
template<typename Generator , typename Consumer >
void farm_multi_impl (polymorphic_execution &ex, Generator generate_op, Consumer consume_op)
 
template<typename Generator , typename Transformer , typename Consumer >
void farm_multi_impl (polymorphic_execution &ex, Generator generate_op, Transformer transform_op, Consumer consume_op)
 
template<typename E , typename... O, typename Generator , typename Transformer , internal::requires_execution_not_supported< E > = 0>
void farm_multi_impl (polymorphic_execution &ex, Generator &&generate_op, Transformer &&transform_op)
 
template<typename E , typename... O, typename Generator , typename Transformer , typename Consumer , internal::requires_execution_not_supported< E > = 0>
void farm_multi_impl (polymorphic_execution &ex, Generator &&generate_op, Transformer &&transform_op, Consumer &&consume_op)
 
template<typename E , typename... O, typename Generator , typename Consumer , internal::requires_execution_supported< E > = 0>
void farm_multi_impl (polymorphic_execution &ex, Generator &&generate_op, Consumer &&consume_op)
 
template<typename Generator , typename Consumer >
void farm (polymorphic_execution &ex, Generator &&generate_op, Consumer &&consume_op)
 Invoke Farm pattern on a data stream with polymorphic execution with a generator and a consumer. More...
 
template<typename Generator , typename Transformer , typename Consumer >
void farm (polymorphic_execution &ex, Generator &&generate_op, Transformer &&transform_op, Consumer &&consume_op)
 Invoke Farm pattern on a data stream with polymorphic execution with a generator and a consumer. More...
 
template<typename InputIt , typename OutputIt , typename Transformer >
void map_multi_impl (polymorphic_execution &e, InputIt first, InputIt last, OutputIt first_out, Transformer &&op)
 
template<typename InputIt , typename OutputIt , typename Transformer , typename InputIt2 , typename... OtherInputIts>
void map_multi_impl (polymorphic_execution &e, InputIt first, InputIt last, OutputIt first_out, Transformer &&op, InputIt2 first2, OtherInputIts...more_firsts)
 
template<typename E , typename... O, typename InputIt , typename OutputIt , typename Transformer , internal::requires_execution_not_supported< E > = 0>
void map_multi_impl (polymorphic_execution &e, InputIt first, InputIt last, OutputIt first_out, Transformer &&op)
 
template<typename E , typename... O, typename InputIt , typename OutputIt , typename Transformer , typename InputIt2 , typename... OtherInputIts, internal::requires_execution_not_supported< E > = 0>
void map_multi_impl (polymorphic_execution &e, InputIt first, InputIt last, OutputIt first_out, Transformer &&op, InputIt2 first2, OtherInputIts...more_firsts)
 
template<typename InputIt , typename OutputIt , typename Transformer >
void map (polymorphic_execution &ex, InputIt first, InputIt last, OutputIt first_out, Transformer &&transf_op)
 Invoke map-pattern on a data sequence with polymorphic execution. More...
 
template<typename InputIt , typename OutputIt , typename InputIt2 , typename Transformer , typename... OtherInputIts>
void map (polymorphic_execution &ex, InputIt first, InputIt last, OutputIt first_out, Transformer &&op, InputIt2 first2, OtherInputIts...more_firsts)
 Invoke map-pattern on a data sequence with polymorphic parallel execution. More...
 
template<typename InputIt , typename Transformer , typename Identity , typename Combiner >
Identity map_reduce_multi_impl (polymorphic_execution &e, InputIt first, InputIt last, Identity identity, Transformer &&transform_op, Combiner &&combine_op)
 
template<typename E , typename... O, typename InputIt , typename Transformer , typename Identity , typename Combiner , internal::requires_execution_not_supported< E > = 0>
Identity map_reduce_multi_impl (polymorphic_execution &e, InputIt first, InputIt last, Identity identity, Transformer &&transform_op, Combiner &&combine_op)
 
template<typename InputIt , typename Transformer , typename Result , typename Combiner >
Result map_reduce (polymorphic_execution &ex, InputIt first, InputIt last, Result identity, Transformer &&transform_op, Combiner &&combine_op)
 Invoke Map/reduce pattern on a data sequence with polymorphic execution. More...
 
template<typename Execution , typename Transformer , typename... MoreTransformers, requires_arguments< Transformer > = 0>
pipeline_info< Execution, Transformer, MoreTransformers... > transform_pipeline (Execution &ex, std::tuple< Transformer, MoreTransformers... > &&transform_ops)
 
template<typename Generator , typename... Transformers>
void pipeline_multi_impl (polymorphic_execution &, Generator &&, Transformers &&...)
 
template<typename E , typename... O, typename Generator , typename... Transformers, internal::requires_execution_not_supported< E > = 0>
void pipeline_multi_impl (polymorphic_execution &ex, Generator &&generate_op, Transformers &&...transform_ops)
 
template<typename Generator , typename... Transformers, requires_no_arguments< Generator > = 0>
void pipeline (polymorphic_execution &ex, Generator &&generate_op, Transformers &&...transform_ops)
 Invoke Pipeline pattern on a data stream with polymorphic execution. More...
 
template<typename E >
constexpr bool is_execution_policy ()
 Meta-function to determine if a type is an execution policy. More...
 
template<typename E >
polymorphic_execution make_polymorphic_execution ()
 
template<typename InputIt , typename Identity , typename Combiner >
auto reduce_multi_impl (polymorphic_execution &ex, InputIt first, InputIt last, Identity identity, Combiner &&combine_op) -> decltype(combine_op(*first,*first))
 
template<typename E , typename... O, typename InputIt , typename Identity , typename Combiner , internal::requires_execution_not_supported< E > = 0>
auto reduce_multi_impl (polymorphic_execution &ex, InputIt first, InputIt last, Identity identity, Combiner &&combine_op)
 
template<typename InputIt , typename Identity , typename Combiner >
auto reduce (polymorphic_execution &e, InputIt first, InputIt last, Identity identity, Combiner &&combine_op)
 Invoke Reduce pattern with no identity value on a data sequence with sequential execution. More...
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood >
void stencil_multi_impl (polymorphic_execution &e, InputIt first, InputIt last, OutputIt first_out, StencilTransformer &&op, Neighbourhood &&neighbor)
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts>
void stencil_multi_impl (polymorphic_execution &e, InputIt first, InputIt last, OutputIt first_out, StencilTransformer &&op, Neighbourhood &&neighbor, OtherInputIts...other_its)
 
template<typename E , typename... O, typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , internal::requires_execution_not_supported< E > = 0>
void stencil_multi_impl (polymorphic_execution &e, InputIt first, InputIt last, OutputIt first_out, StencilTransformer &&op, Neighbourhood &&neighbor)
 
template<typename E , typename... O, typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts, internal::requires_execution_not_supported< E > = 0>
void stencil_multi_impl (polymorphic_execution &e, InputIt first, InputIt last, OutputIt first_out, StencilTransformer &&op, Neighbourhood &&neighbor, OtherInputIts...other_its)
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood >
void stencil (polymorphic_execution &ex, InputIt first, InputIt last, OutputIt first_out, StencilTransformer &&transform_op, Neighbourhood &&neighbour_op)
 Invoke Stencil pattern on a data sequence with polymorphic execution. More...
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts>
void stencil (polymorphic_execution &ex, InputIt first, InputIt last, OutputIt first_out, StencilTransformer &&transform_op, Neighbourhood &&neighbour_op, OtherInputIts...other_its)
 Invoke Stencil pattern on multiple data sequences with sequential execution. More...
 
template<typename Generator , typename Predicate , typename Consumer >
void keep_multi_impl (polymorphic_execution, Generator &&generate_op, Predicate predicate_op, Consumer consume_op)
 
template<typename E , typename... O, typename Generator , typename Predicate , typename Consumer , internal::requires_execution_not_supported< E > = 0>
void keep_multi_impl (polymorphic_execution &ex, Generator &&generate_op, Predicate &&predicate_op, Consumer &&consume_op)
 
template<typename Generator , typename Predicate , typename Consumer >
void discard_multi_impl (polymorphic_execution, Generator &&generate_op, Predicate predicate_op, Consumer consume_op)
 
template<typename E , typename... O, typename Generator , typename Predicate , typename Consumer , internal::requires_execution_not_supported< E > = 0>
void discard_multi_impl (polymorphic_execution &ex, Generator &&generate_op, Predicate &&predicate_op, Consumer &&consume_op)
 
template<typename Generator , typename Predicate , typename Consumer >
void keep (polymorphic_execution &ex, Generator &&generate_op, Predicate &&predicate_op, Consumer &&consume_op)
 Invoke Filter pattern on a data sequence with polymorphic execution policy. This function keeps in the stream only those items that satisfy the predicate. More...
 
template<typename Generator , typename Predicate , typename Consumer >
void discard (polymorphic_execution &ex, Generator &&generate_op, Predicate &&predicate_op, Consumer &&consume_op)
 Invoke Filter pattern on a data sequence with polymorphic execution policy. This function discards from the stream those items that satisfy the predicate. More...
 
template<typename Generator , typename Predicate , typename Consumer , typename Transformer >
void repeat_until_multi_impl (polymorphic_execution &e, Generator &&in, farm_info< polymorphic_execution, Transformer > &&op, Predicate &&predicate_op, Consumer &&out)
 
template<typename E , typename... O, typename Generator , typename Predicate , typename Consumer , typename Transformer , internal::requires_execution_not_supported< E > = 0>
void repeat_until_multi_impl (polymorphic_execution &e, Generator &&in, pipeline_info< polymorphic_execution, Transformer > &&op, Predicate &&predicate_op, Consumer &&out)
 
template<class E , typename... O, typename Generator , typename Predicate , typename Consumer , typename Transformer , internal::requires_execution_supported< E > = 0>
void repeat_until_multi_impl (polymorphic_execution &e, Generator &&in, farm_info< polymorphic_execution, Transformer > &&op, Predicate &&predicate_op, Consumer &&out)
 
template<typename Generator , typename Predicate , typename Consumer , typename... MoreTransformers>
void repeat_until_multi_impl (polymorphic_execution &e, Generator &&in, pipeline_info< polymorphic_execution, MoreTransformers... > &&op, Predicate &&predicate_op, Consumer &&out)
 
template<typename E , typename... O, typename Generator , typename Predicate , typename Consumer , typename... MoreTransformers, internal::requires_execution_not_supported< E > = 0>
void repeat_until_multi_impl (polymorphic_execution &e, Generator &&in, pipeline_info< polymorphic_execution, MoreTransformers... > &&op, Predicate &&predicate_op, Consumer &&out)
 
template<typename Generator , typename Predicate , typename Consumer , typename Operation >
void repeat_until_multi_impl (polymorphic_execution &e, Generator &&in, Operation &&op, Predicate &&predicate_op, Consumer &&out)
 
template<typename E , typename... O, typename Generator , typename Predicate , typename Consumer , typename Operation , internal::requires_execution_not_supported< E > = 0>
void repeat_until_multi_impl (polymorphic_execution &e, Generator &&in, Operation &&op, Predicate &&predicate_op, Consumer &&out)
 
template<typename Generator , typename Predicate , typename Consumer , typename Transformer >
void repeat_until (polymorphic_execution &ex, Generator &&generate_op, farm_info< polymorphic_execution, Transformer > &&farm_obj, Predicate &&predicate_op, Consumer &&consume_op)
 Invoke Stream iteration pattern on a data stream with polymorphic execution with a generator, a predicate, a consumer and a farm as a transformer. More...
 
template<typename Generator , typename Predicate , typename Consumer , typename... Transformers>
void repeat_until (polymorphic_execution &ex, Generator &&generate_op, pipeline_info< polymorphic_execution, Transformers... > &&pipe_info, Predicate &&predicate_op, Consumer &&consume_op)
 Invoke Stream iteration pattern on a data stream with polymorphic execution with a generator, a predicate, a consumer and a pipeline as a transformer. More...
 
template<typename Generator , typename Transformer , typename Predicate , typename Consumer >
void repeat_until (polymorphic_execution &ex, Generator &&generate_op, Transformer &&transform_op, Predicate &&predicate_op, Consumer &&consume_op)
 Invoke Stream iteration pattern on a data stream with polymorphic execution with a generator, a predicate, a transformer and a consumer. More...
 
template<typename Identity , typename Combiner , typename Consumer , typename Generator >
void stream_reduce_multi_impl (polymorphic_execution &ex, int window_size, int offset, Identity identity, Generator &&generate_op, Combiner &&combine_op, Consumer &&consume_op)
 
template<typename E , typename... O, typename Identity , typename Generator , typename Combiner , typename Consumer , internal::requires_execution_not_supported< E > = 0>
void stream_reduce_multi_impl (polymorphic_execution &ex, int windowsize, int offset, Identity identity, Generator &&gen, Combiner &&comb, Consumer &&cons)
 
template<typename Identity , typename Generator , typename Combiner , typename Consumer >
void stream_reduce (polymorphic_execution &ex, int windowsize, int offset, Identity identity, Generator &&gen, Combiner &&comb, Consumer &&cons)
 Invoke Stream reduction pattern on a stream with polymorphic parallel execution. More...
 
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of< Solver(Input)>::type divide_conquer (sequential_execution &ex, Input &input, Divider &&divider_op, Solver &&solver_op, Combiner &&combiner_op)
 Invoke Divide/conquer pattern with sequential execution. More...
 
template<typename Generator , typename Consumer >
void farm (sequential_execution ex, Generator generate_op, Consumer consume_op)
 Invoke Farm pattern on a data stream with sequential execution with a generator and a consumer. More...
 
template<typename Generator , typename Transformer , typename Consumer >
void farm (sequential_execution ex, Generator generate_op, Transformer transform_op, Consumer consume_op)
 Invoke Farm pattern on a data stream with sequential execution with a generator, a transformer, and a comsumer. More...
 
template<typename InputIt , typename OutputIt , typename Transformer >
void map (sequential_execution &ex, InputIt first, InputIt last, OutputIt first_out, Transformer &&transf_op)
 Invoke Map pattern on a data sequence with sequential execution. More...
 
template<typename InputIt , typename OutputIt , typename Transformer , typename... OtherInputIts>
void map (sequential_execution &ex, InputIt first, InputIt last, OutputIt first_out, Transformer &&transf_op, OtherInputIts...other_firsts)
 Invoke Map pattern on a data sequence with sequential execution. More...
 
template<typename InputIt , typename Result , typename Transformer , typename Combiner >
Result map_reduce (sequential_execution &, InputIt first, InputIt last, Result identity, Transformer &&transform_op, Combiner &&combine_op)
 Invoke Map/reduce pattern on a data sequence with sequential execution. More...
 
template<typename Input , int Index, typename... MoreTransformers, internal::requires_index_last< Index, MoreTransformers... > = 0>
auto composed_pipeline (Input in, const pipeline_info< sequential_execution, MoreTransformers... > &pipeline_obj)
 
template<typename Item , typename Transformer >
void pipeline_impl (sequential_execution &s, Item &&item, Transformer &&transform_op)
 
template<typename Item , typename Filter , typename... MoreTransformers>
void pipeline_impl (sequential_execution &ex, Item &&item, const filter_info< sequential_execution, Filter > &filter_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Item , typename Transformer , typename... MoreTransformers>
void pipeline_impl (sequential_execution &ex, Item &&item, filter_info< sequential_execution, Transformer > &&transf_filter, MoreTransformers &&...more_transform_ops)
 
template<typename Item , typename Transformer , typename... MoreTransformers>
void pipeline_impl (sequential_execution &ex, Item &&item, farm_info< sequential_execution, Transformer > &transf_farm, MoreTransformers &&...more_transform_ops)
 
template<typename Item , typename Transformer , typename... MoreTransformers>
void pipeline_impl (sequential_execution &ex, Item &&item, farm_info< sequential_execution, Transformer > &&transform_farm, MoreTransformers &&...more_transform_ops)
 
template<typename Item , typename Transformer , typename... MoreTransformers>
void pipeline_impl (sequential_execution &ex, Item &&item, Transformer &&transform_op, MoreTransformers &&...more_transform_ops)
 
template<typename Generator , typename... Transformers, typename = typename std::result_of<Generator()>::type>
void pipeline (sequential_execution &ex, Generator &&generator_op, Transformers &&...transform_ops)
 Invoke Pipeline pattern on a data stream with sequential execution. More...
 
template<typename InputIt , typename Identity , typename Combiner >
auto reduce (sequential_execution &ex, InputIt first, InputIt last, Identity identity, Combiner &&combine_op)
 Invoke Reduce pattern with identity value on a data sequence with sequential execution. More...
 
template<typename E >
constexpr bool is_sequential_execution ()
 Determine if a type is a sequential execution policy. More...
 
template<>
constexpr bool is_supported< sequential_execution > ()
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood >
void stencil (sequential_execution &ex, InputIt first, InputIt last, OutputIt out, StencilTransformer transform_op, Neighbourhood neighbour_op)
 Invoke Stencil pattern on a data sequence with sequential execution. More...
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts>
void stencil (sequential_execution &ex, InputIt first, InputIt last, OutputIt out, StencilTransformer transform_op, Neighbourhood neighbour_op, OtherInputIts...other_firsts)
 Invoke Stencil pattern on multiple data sequences with sequential execution. More...
 
template<typename Generator , typename Predicate , typename Consumer >
void keep (sequential_execution, Generator generate_op, Predicate predicate_op, Consumer consume_op)
 Invoke Filter pattern on a data sequence with sequential execution policy. This function keeps in the stream only those items that satisfy the predicate. More...
 
template<typename Generator , typename Predicate , typename Consumer >
void discard (sequential_execution &ex, Generator generate_op, Predicate predicate_op, Consumer consume_op)
 Invoke Filter pattern on a data sequence with sequential execution policy. This function discards from the stream those items that satisfy the predicate. More...
 
template<typename Generator , typename Transformer , typename Predicate , typename Consumer >
void repeat_until (sequential_execution, Generator generate_op, Transformer &&transform_op, Predicate predicate_op, Consumer consume_op)
 Invoke Stream iteration pattern on a data stream with sequential execution with a generator, a transformer, a predicate, and a consumer. More...
 
template<typename Generator , typename Transformer , typename Predicate , typename Consumer >
void repeat_until (sequential_execution &ex, Generator &&generate_op, farm_info< sequential_execution, Transformer > &farm_obj, Predicate &&predicate_op, Consumer &&consume_op)
 Invoke Stream iteration pattern on a data stream with sequential execution with a generator, a farm as transformer, a predicate, and a consumer. More...
 
template<typename Generator , typename Transformer , typename Predicate , typename Consumer >
void repeat_until (sequential_execution &ex, Generator generate_op, farm_info< sequential_execution, Transformer > &&farm_obj, Predicate predicate_op, Consumer consume_op)
 Invoke Stream iteration pattern on a data stream with sequential execution with a generator, a farm as transformer, a predicate, and a consumer. More...
 
template<typename Generator , typename Predicate , typename Consumer , typename... Transformers>
void repeat_until (sequential_execution &ex, Generator &&generate_op, pipeline_info< sequential_execution, Transformers... > &pipe_obj, Predicate &&predicate_op, Consumer &&consume_op)
 Invoke Stream iteration pattern on a data stream with sequential execution with a generator, a pipeline as transformer, a predicate, and a consumer. More...
 
template<typename Generator , typename Predicate , typename Consumer , typename... Transformers>
void repeat_until (sequential_execution &ex, Generator generate_op, pipeline_info< sequential_execution, Transformers... > &&pipe, Predicate predicate_op, Consumer consume_op)
 Invoke Stream iteration pattern on a data stream with sequential execution with a generator, a pipeline as transformer, a predicate, and a consumer. More...
 
template<typename Identity , typename Combiner , typename Consumer , typename Generator >
void stream_reduce (sequential_execution &ex, int window_size, int offset, Identity identity, Generator &&generate_op, Combiner &&combine_op, Consumer &&consume_op)
 Invoke Stream reduction pattern on a stream with sequential execution. More...
 
template<typename Execution , typename Predicate >
auto keep (Execution &ex, Predicate &&predicate_op)
 Invoke Filter pattern on a data stream that can be composed in other streaming patterns. This function keeps in the stream only those items that satisfy the predicate. More...
 
template<typename Execution , typename Predicate >
auto discard (Execution &ex, Predicate &&predicate_op)
 Invoke Filter pattern on a data stream that can be composed in other streaming patterns. This function discards from the stream those items that satisfy the predicate. More...
 
template<typename Execution , typename Identity , typename Combiner >
auto stream_reduce (Execution &ex, int window_size, int offset, Identity identity, Combiner &&combine_op)
 Invoke Stream reduction pattern on a stream that can be composed in other streaming patterns. More...
 
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of< Solver(Input)>::type internal_divide_conquer (parallel_execution_tbb &ex, Input &input, Divider &&divide_op, Solver &&solve_op, Combiner &&combine_op, std::atomic< int > &num_threads)
 
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of< Solver(Input)>::type divide_conquer (parallel_execution_tbb &ex, Input &input, Divider &&divide_op, Solver &&solve_op, Combiner &&combine_op)
 Invoke Divide/conquer pattern with TBB parallel execution. More...
 
template<typename Generator , typename Consumer >
void farm (parallel_execution_tbb &ex, Generator generate_op, Consumer consume_op)
 Invoke Farm pattern on a data stream with TBB parallel execution with a generator and a consumer. More...
 
template<typename Generator , typename Transformer , typename Consumer >
void farm (parallel_execution_tbb &ex, Generator generate_op, Transformer transform_op, Consumer consume_op)
 Invoke Farm pattern on a data stream with TBB parallel execution with a generator and a consumer. More...
 
template<typename InputIt , typename OutputIt , typename Transformer >
void map (parallel_execution_tbb &ex, InputIt first, InputIt last, OutputIt first_out, Transformer &&transf_op)
 Invoke Map pattern on a data sequence with TBB parallel execution. More...
 
template<typename InputIt , typename OutputIt , typename Transformer , typename... OtherInputIts>
void map (parallel_execution_tbb &ex, InputIt first, InputIt last, OutputIt first_out, Transformer &&transf_op, OtherInputIts...more_firsts)
 Invoke Map pattern on a data sequence with TBB parallel execution. More...
 
template<typename InputIt , typename Transformer , typename Identity , typename Combiner >
Identity map_reduce (parallel_execution_tbb &p, InputIt first, InputIt last, Identity identity, Transformer &&transform_op, Combiner &&combine_op)
 Invoke Map/reduce pattern on a data sequence with TBB parallel execution. More...
 
template<typename E >
constexpr bool is_parallel_execution_tbb ()
 Metafunction that determines if type E is parallel_execution_tbb. More...
 
template<>
constexpr bool is_supported< parallel_execution_tbb > ()
 Specialization stating that parallel_execution_tbb is supported. This metafunction evaluates to false if GRPPI_TBB is enabled. More...
 
template<typename Transformer , typename Input >
auto pipeline_impl (parallel_execution_tbb &ex, Input, Transformer &&transform_op)
 
template<typename Transformer , typename... MoreTransformers, typename Input >
auto pipeline_impl (parallel_execution_tbb &ex, Input in, farm_info< parallel_execution_tbb, Transformer > &farm_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Predicate , typename... MoreTransformers, typename Input >
auto pipeline_impl (parallel_execution_tbb &ex, Input in, filter_info< parallel_execution_tbb, Predicate > &filter_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Predicate , typename... MoreTransformers, typename Input >
auto pipeline_impl (parallel_execution_tbb &ex, Input in, filter_info< parallel_execution_tbb, Predicate > &&filter_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Transformer , typename... MoreTransformers, typename Input >
auto pipeline_impl (parallel_execution_tbb &ex, Input, farm_info< parallel_execution_tbb, Transformer > &&farm_obj, MoreTransformers &&...more_transform_ops)
 
template<typename Predicate , typename... MoreTransformers, typename Input >
auto pipeline_impl (parallel_execution_tbb &ex, Input, Predicate &&predicate_op, MoreTransformers &&...more_transform_ops)
 
template<typename Generator , typename... Transformers, requires_no_arguments< Generator > = 0>
void pipeline (parallel_execution_tbb &ex, Generator generate_op, Transformers &&...transform_ops)
 Invoke Pipeline pattern on a data stream with TBB parallel execution. More...
 
template<typename InputIt , typename Identity , typename Combiner >
auto reduce (parallel_execution_tbb &ex, InputIt first, InputIt last, Identity identity, Combiner &&combine_op)
 Invoke Reduce pattern with identity value on a data sequence with parallel TBB execution. More...
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts>
void stencil_impl (parallel_execution_tbb &ex, int elements_per_thread, int index, InputIt first, InputIt last, OutputIt first_out, StencilTransformer transform_op, Neighbourhood neighbour_op, OtherInputIts...other_firsts)
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood >
void stencil (parallel_execution_tbb &ex, InputIt first, InputIt last, OutputIt first_out, StencilTransformer transform_op, Neighbourhood neighbour_op)
 Invoke Stencil pattern on a data sequence with TBB parallel execution. More...
 
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts>
void stencil (parallel_execution_tbb &ex, InputIt first, InputIt last, OutputIt first_out, StencilTransformer transform_op, Neighbourhood neighbour_op, OtherInputIts...other_firsts)
 Invoke Stencil pattern on multiple data sequences with TBB parallel execution. More...
 
template<typename Generator , typename Predicate , typename Consumer >
void keep (parallel_execution_tbb &ex, Generator generate_op, Predicate predicate_op, Consumer consume_op)
 Invoke Filter pattern on a data sequence with sequential execution policy. This function keeps in the stream only those items that satisfy the predicate. More...
 
template<typename Generator , typename Predicate , typename Consumer >
void discard (parallel_execution_tbb &ex, Generator generate_op, Predicate predicate_op, Consumer consume_op)
 Invoke Filter pattern pattern on a data sequence with sequential execution policy. This function discards from the stream those items that satisfy the predicate. More...
 
template<typename Identity , typename Generator , typename Combiner , typename Consumer >
void stream_reduce (parallel_execution_tbb &ex, int window_size, int offset, Identity identity, Generator &&generate_op, Combiner &&combine_op, Consumer consume_op)
 Invoke Stream reduction pattern on a stream with TBB parallel execution. More...
 

Detailed Description

Version
GrPPI v0.2

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You have received a copy of the GNU General Public License in LICENSE.txt also available in http://www.gnu.org/licenses/gpl.html.

See COPYRIGHT.txt for copyright notices and details.

Version
GrPPI v0.2

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You have received a copy of the GNU General Public License in LICENSE.txt also available in http://www.gnu.org/licenses/gpl.html.

See COPYRIGHT.txt for copyright notices and details.

Typedef Documentation

template<typename F >
using grppi::requires_arguments = typedef typename std::enable_if_t<internal::has_arguments<F>(), int>
template<typename E >
using grppi::requires_execution_policy = typedef std::enable_if_t<is_execution_policy<E>(), int>

Simulate concept requirement for being an execution policy.

template<typename F >
using grppi::requires_no_arguments = typedef typename std::enable_if_t<!internal::has_arguments<F>(), int>
template<typename E >
using grppi::requires_not_execution_policy = typedef std::enable_if_t<!is_execution_policy<E>(), int>

Simulate concept requirement for not being an execution policy.

Enumeration Type Documentation

enum grppi::queue_mode
strong
Enumerator
lockfree 
blocking 

Function Documentation

template<typename... InputIt>
void grppi::advance_iterators ( size_t  delta,
InputIt &...  in 
)

Advance a pack of iterators by a delta. Every iterator in the parameter pack in is increased n steps.

template<typename... InputIt>
void grppi::advance_iterators ( InputIt &...  in)

Advance a pack of iterators by one unit. Every iterator in the parameter pack in is increased 1 step.

template<typename Input , int Index, typename... MoreTransformers, internal::requires_index_last< Index, MoreTransformers... > = 0>
auto grppi::composed_pipeline ( Input  in,
const pipeline_info< sequential_execution, MoreTransformers... > &  pipeline_obj 
)
template<typename InQueue , typename OutQueue , int Index, typename... MoreTransformers, internal::requires_index_last< Index, MoreTransformers... > = 0>
void grppi::composed_pipeline ( InQueue &  input_queue,
const pipeline_info< parallel_execution_native, MoreTransformers... > &  pipe,
OutQueue &  output_queue,
std::vector< std::thread > &  tasks 
)
template<typename InQueue , typename Transformer , typename OutQueue >
void grppi::composed_pipeline ( parallel_execution_native ex,
InQueue &  input_queue,
Transformer &&  transform_op,
OutQueue &  output_queue,
std::vector< std::thread > &  tasks 
)
template<typename Generator , typename Predicate , typename Consumer >
void grppi::discard_multi_impl ( polymorphic_execution  ,
Generator &&  generate_op,
Predicate  predicate_op,
Consumer  consume_op 
)
template<typename E , typename... O, typename Generator , typename Predicate , typename Consumer , internal::requires_execution_not_supported< E > = 0>
void grppi::discard_multi_impl ( polymorphic_execution ex,
Generator &&  generate_op,
Predicate &&  predicate_op,
Consumer &&  consume_op 
)
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of<Solver(Input)>::type grppi::divide_conquer_multi_impl ( polymorphic_execution ex,
Input &  input,
Divider &&  divide_op,
Solver &&  solve_op,
Combiner &&  combine_op 
)
template<typename E , typename... O, typename Input , typename Divider , typename Solver , typename Combiner , internal::requires_execution_not_supported< E > = 0>
std::result_of< Solver(Input)>::type grppi::divide_conquer_multi_impl ( polymorphic_execution ex,
Input &  input,
Divider &&  divide_op,
Solver &&  solve_op,
Combiner &&  combine_op 
)
template<typename Generator , typename Consumer >
void grppi::farm_multi_impl ( polymorphic_execution ex,
Generator  generate_op,
Consumer  consume_op 
)
template<typename Generator , typename Transformer , typename Consumer >
void grppi::farm_multi_impl ( polymorphic_execution ex,
Generator  generate_op,
Transformer  transform_op,
Consumer  consume_op 
)
template<typename E , typename... O, typename Generator , typename Transformer , internal::requires_execution_not_supported< E > = 0>
void grppi::farm_multi_impl ( polymorphic_execution ex,
Generator &&  generate_op,
Transformer &&  transform_op 
)
template<typename E , typename... O, typename Generator , typename Transformer , typename Consumer , internal::requires_execution_not_supported< E > = 0>
void grppi::farm_multi_impl ( polymorphic_execution ex,
Generator &&  generate_op,
Transformer &&  transform_op,
Consumer &&  consume_op 
)
template<typename E , typename... O, typename Generator , typename Consumer , internal::requires_execution_supported< E > = 0>
void grppi::farm_multi_impl ( polymorphic_execution ex,
Generator &&  generate_op,
Consumer &&  consume_op 
)
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of<Solver(Input)>::type grppi::internal_divide_conquer ( parallel_execution_omp ex,
Input &  input,
Divider &&  divide_op,
Solver &&  solve_op,
Combiner &&  combine_op,
std::atomic< int > &  num_threads 
)
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of<Solver(Input)>::type grppi::internal_divide_conquer ( parallel_execution_native p,
Input &  input,
Divider &&  divide_op,
Solver &&  solve_op,
Combiner &&  combine_op,
std::atomic< int > &  num_threads 
)
template<typename Input , typename Divider , typename Solver , typename Combiner >
std::result_of<Solver(Input)>::type grppi::internal_divide_conquer ( parallel_execution_tbb ex,
Input &  input,
Divider &&  divide_op,
Solver &&  solve_op,
Combiner &&  combine_op,
std::atomic< int > &  num_threads 
)
template<typename InputIt , typename OutputIt , typename Transformer , typename... OtherInputIts>
void grppi::internal_map ( parallel_execution_omp ex,
InputIt  first,
InputIt  last,
OutputIt  first_out,
Transformer &&  transf_op,
int  i,
int  elemperthr,
OtherInputIts...  more_firsts 
)
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts>
void grppi::internal_stencil ( parallel_execution_omp ex,
InputIt  first,
InputIt  last,
OutputIt  first_out,
StencilTransformer  transform_op,
Neighbourhood  neighbour_op,
int  i,
int  elements_per_thread,
OtherInputIts...  other_firsts 
)
template<typename E >
constexpr bool grppi::is_execution_policy ( )

Meta-function to determine if a type is an execution policy.

template<typename E >
constexpr bool grppi::is_parallel_execution_native ( )

Metafunction that determines if type E is parallel_execution_native.

Template Parameters
Executionpolicy type.
template<typename E >
constexpr bool grppi::is_parallel_execution_omp ( )

Metafunction that determines if type E is parallel_execution_omp.

Template Parameters
Executionpolicy type.
template<typename E >
constexpr bool grppi::is_parallel_execution_tbb ( )

Metafunction that determines if type E is parallel_execution_tbb.

Template Parameters
Executionpolicy type.
template<typename E >
constexpr bool grppi::is_sequential_execution ( )

Determine if a type is a sequential execution policy.

template<typename E >
constexpr bool grppi::is_supported ( )

Metafunction that determines if type E is supported in the current build.

Template Parameters
Executionpolicy type.
template<>
constexpr bool grppi::is_supported< parallel_execution_native > ( )

Specialization stating that parallel_execution_native is supported.

template<>
constexpr bool grppi::is_supported< parallel_execution_omp > ( )

Specialization stating that parallel_execution_omp is supported. This metafunction evaluates to false if GRPPI_OMP is enabled.

template<>
constexpr bool grppi::is_supported< parallel_execution_tbb > ( )

Specialization stating that parallel_execution_tbb is supported. This metafunction evaluates to false if GRPPI_TBB is enabled.

template<>
constexpr bool grppi::is_supported< sequential_execution > ( )
template<typename Generator , typename Predicate , typename Consumer >
void grppi::keep_multi_impl ( polymorphic_execution  ,
Generator &&  generate_op,
Predicate  predicate_op,
Consumer  consume_op 
)
template<typename E , typename... O, typename Generator , typename Predicate , typename Consumer , internal::requires_execution_not_supported< E > = 0>
void grppi::keep_multi_impl ( polymorphic_execution ex,
Generator &&  generate_op,
Predicate &&  predicate_op,
Consumer &&  consume_op 
)
template<typename E >
polymorphic_execution grppi::make_polymorphic_execution ( )

Create from other static policy with no arguments.

Returns
A polymorphic execution containing an E object if E is supported
An empty polymorphic execution otherwise.
template<typename InputIt , typename OutputIt , typename Transformer >
void grppi::map_multi_impl ( polymorphic_execution e,
InputIt  first,
InputIt  last,
OutputIt  first_out,
Transformer &&  op 
)
template<typename InputIt , typename OutputIt , typename Transformer , typename InputIt2 , typename... OtherInputIts>
void grppi::map_multi_impl ( polymorphic_execution e,
InputIt  first,
InputIt  last,
OutputIt  first_out,
Transformer &&  op,
InputIt2  first2,
OtherInputIts...  more_firsts 
)
template<typename E , typename... O, typename InputIt , typename OutputIt , typename Transformer , internal::requires_execution_not_supported< E > = 0>
void grppi::map_multi_impl ( polymorphic_execution e,
InputIt  first,
InputIt  last,
OutputIt  first_out,
Transformer &&  op 
)
template<typename E , typename... O, typename InputIt , typename OutputIt , typename Transformer , typename InputIt2 , typename... OtherInputIts, internal::requires_execution_not_supported< E > = 0>
void grppi::map_multi_impl ( polymorphic_execution e,
InputIt  first,
InputIt  last,
OutputIt  first_out,
Transformer &&  op,
InputIt2  first2,
OtherInputIts...  more_firsts 
)
template<typename InputIt , typename Transformer , typename Identity , typename Combiner >
Identity grppi::map_reduce_multi_impl ( polymorphic_execution e,
InputIt  first,
InputIt  last,
Identity  identity,
Transformer &&  transform_op,
Combiner &&  combine_op 
)
template<typename E , typename... O, typename InputIt , typename Transformer , typename Identity , typename Combiner , internal::requires_execution_not_supported< E > = 0>
Identity grppi::map_reduce_multi_impl ( polymorphic_execution e,
InputIt  first,
InputIt  last,
Identity  identity,
Transformer &&  transform_op,
Combiner &&  combine_op 
)
template<typename InQueue , typename Consumer >
void grppi::pipeline_impl ( parallel_execution_omp ex,
InQueue &  input_queue,
Consumer &&  consume_op 
)
template<typename Transformer , typename Input >
auto grppi::pipeline_impl ( parallel_execution_tbb ex,
Input  ,
Transformer &&  transform_op 
)
template<typename Transformer , typename... MoreTransformers, typename Input >
auto grppi::pipeline_impl ( parallel_execution_tbb ex,
Input  in,
farm_info< parallel_execution_tbb, Transformer > &  farm_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Item , typename Transformer >
void grppi::pipeline_impl ( sequential_execution s,
Item &&  item,
Transformer &&  transform_op 
)
template<typename Item , typename Filter , typename... MoreTransformers>
void grppi::pipeline_impl ( sequential_execution ex,
Item &&  item,
const filter_info< sequential_execution, Filter > &  filter_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Predicate , typename... MoreTransformers, typename Input >
auto grppi::pipeline_impl ( parallel_execution_tbb ex,
Input  in,
filter_info< parallel_execution_tbb, Predicate > &  filter_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Item , typename Transformer , typename... MoreTransformers>
void grppi::pipeline_impl ( sequential_execution ex,
Item &&  item,
filter_info< sequential_execution, Transformer > &&  transf_filter,
MoreTransformers &&...  more_transform_ops 
)
template<typename Predicate , typename... MoreTransformers, typename Input >
auto grppi::pipeline_impl ( parallel_execution_tbb ex,
Input  in,
filter_info< parallel_execution_tbb, Predicate > &&  filter_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Item , typename Transformer , typename... MoreTransformers>
void grppi::pipeline_impl ( sequential_execution ex,
Item &&  item,
farm_info< sequential_execution, Transformer > &  transf_farm,
MoreTransformers &&...  more_transform_ops 
)
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_omp ex,
InQueue &  input_queue,
reduction_info< parallel_execution_omp, Combiner, Identity > &  reduction_obj,
MoreTransformers...  more_transform_ops 
)
template<typename Item , typename Transformer , typename... MoreTransformers>
void grppi::pipeline_impl ( sequential_execution ex,
Item &&  item,
farm_info< sequential_execution, Transformer > &&  transform_farm,
MoreTransformers &&...  more_transform_ops 
)
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_omp ex,
InQueue &  input_queue,
reduction_info< parallel_execution_omp, Combiner, Identity > &&  reduction_obj,
MoreTransformers...  more_transform_ops 
)
template<typename InQueue , typename Consumer >
void grppi::pipeline_impl ( parallel_execution_native ex,
InQueue &  input_queue,
Consumer &&  consume 
)
template<typename Transformer , typename... MoreTransformers, typename Input >
auto grppi::pipeline_impl ( parallel_execution_tbb ex,
Input  ,
farm_info< parallel_execution_tbb, Transformer > &&  farm_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Item , typename Transformer , typename... MoreTransformers>
void grppi::pipeline_impl ( sequential_execution ex,
Item &&  item,
Transformer &&  transform_op,
MoreTransformers &&...  more_transform_ops 
)
template<typename Predicate , typename... MoreTransformers, typename Input >
auto grppi::pipeline_impl ( parallel_execution_tbb ex,
Input  ,
Predicate &&  predicate_op,
MoreTransformers &&...  more_transform_ops 
)
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_native ex,
InQueue &  input_queue,
reduction_info< parallel_execution_native, Combiner, Identity > &  reduction_obj,
MoreTransformers...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_omp ex,
InQueue &  input_queue,
filter_info< parallel_execution_omp, Transformer > &  filter_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_native ex,
InQueue &  input_queue,
reduction_info< parallel_execution_native, Combiner, Identity > &&  reduction_obj,
MoreTransformers...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_native ex,
InQueue &  input_queue,
filter_info< parallel_execution_native, Transformer > &  filter_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_omp ex,
InQueue &  input_queue,
filter_info< parallel_execution_omp, Transformer > &&  filter_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_omp ex,
InQueue &  input_queue,
farm_info< parallel_execution_omp, Transformer > &  farm_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_omp ex,
InQueue &  input_queue,
farm_info< parallel_execution_omp, Transformer > &&  farm_obj,
MoreTransformers &&...  sgs 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_omp ex,
InQueue &  input_queue,
Transformer &&  transform_op,
MoreTransformers &&...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_native ex,
InQueue &  input_queue,
filter_info< parallel_execution_native, Transformer > &&  filter_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_native ex,
InQueue &  input_queue,
farm_info< parallel_execution_native, Transformer > &  farm_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_native p,
InQueue &  input_queue,
farm_info< parallel_execution_native, Transformer > &&  farm_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl ( parallel_execution_native ex,
InQueue &  input_queue,
Transformer &&  transform_op,
MoreTransformers &&...  more_transform_ops 
)
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl_ordered ( parallel_execution_omp ex,
InQueue &  input_queue,
reduction_info< parallel_execution_omp, Combiner, Identity > &&  reduction_obj,
MoreTransformers...  more_transform_ops 
)
template<typename Combiner , typename Identity , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl_ordered ( parallel_execution_native ex,
InQueue &  input_queue,
reduction_info< parallel_execution_native, Combiner, Identity > &&  reduction_obj,
MoreTransformers...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl_ordered ( parallel_execution_omp ex,
InQueue &  input_queue,
filter_info< parallel_execution_omp, Transformer > &&  filter_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl_ordered ( parallel_execution_native ex,
InQueue &  input_queue,
filter_info< parallel_execution_native, Transformer > &&  filter_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl_unordered ( parallel_execution_omp ex,
InQueue &  input_queue,
filter_info< parallel_execution_omp, Transformer > &&  farm_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Transformer , typename InQueue , typename... MoreTransformers>
void grppi::pipeline_impl_unordered ( parallel_execution_native ex,
InQueue &  input_queue,
filter_info< parallel_execution_native, Transformer > &&  filter_obj,
MoreTransformers &&...  more_transform_ops 
)
template<typename Generator , typename... Transformers>
void grppi::pipeline_multi_impl ( polymorphic_execution ,
Generator &&  ,
Transformers &&  ... 
)
template<typename E , typename... O, typename Generator , typename... Transformers, internal::requires_execution_not_supported< E > = 0>
void grppi::pipeline_multi_impl ( polymorphic_execution ex,
Generator &&  generate_op,
Transformers &&...  transform_ops 
)
template<typename InputIt , typename Identity , typename Combiner >
auto grppi::reduce_multi_impl ( polymorphic_execution ex,
InputIt  first,
InputIt  last,
Identity  identity,
Combiner &&  combine_op 
) -> decltype(combine_op(*first,*first))
template<typename E , typename... O, typename InputIt , typename Identity , typename Combiner , internal::requires_execution_not_supported< E > = 0>
auto grppi::reduce_multi_impl ( polymorphic_execution ex,
InputIt  first,
InputIt  last,
Identity  identity,
Combiner &&  combine_op 
)
template<typename Generator , typename Predicate , typename Consumer , typename Transformer >
void grppi::repeat_until_multi_impl ( polymorphic_execution e,
Generator &&  in,
farm_info< polymorphic_execution, Transformer > &&  op,
Predicate &&  predicate_op,
Consumer &&  out 
)
template<typename E , typename... O, typename Generator , typename Predicate , typename Consumer , typename Transformer , internal::requires_execution_not_supported< E > = 0>
void grppi::repeat_until_multi_impl ( polymorphic_execution e,
Generator &&  in,
pipeline_info< polymorphic_execution, Transformer > &&  op,
Predicate &&  predicate_op,
Consumer &&  out 
)
template<class E , typename... O, typename Generator , typename Predicate , typename Consumer , typename Transformer , internal::requires_execution_supported< E > = 0>
void grppi::repeat_until_multi_impl ( polymorphic_execution e,
Generator &&  in,
farm_info< polymorphic_execution, Transformer > &&  op,
Predicate &&  predicate_op,
Consumer &&  out 
)
template<typename Generator , typename Predicate , typename Consumer , typename... MoreTransformers>
void grppi::repeat_until_multi_impl ( polymorphic_execution e,
Generator &&  in,
pipeline_info< polymorphic_execution, MoreTransformers... > &&  op,
Predicate &&  predicate_op,
Consumer &&  out 
)
template<typename E , typename... O, typename Generator , typename Predicate , typename Consumer , typename... MoreTransformers, internal::requires_execution_not_supported< E > = 0>
void grppi::repeat_until_multi_impl ( polymorphic_execution e,
Generator &&  in,
pipeline_info< polymorphic_execution, MoreTransformers... > &&  op,
Predicate &&  predicate_op,
Consumer &&  out 
)
template<typename Generator , typename Predicate , typename Consumer , typename Operation >
void grppi::repeat_until_multi_impl ( polymorphic_execution e,
Generator &&  in,
Operation &&  op,
Predicate &&  predicate_op,
Consumer &&  out 
)
template<typename E , typename... O, typename Generator , typename Predicate , typename Consumer , typename Operation , internal::requires_execution_not_supported< E > = 0>
void grppi::repeat_until_multi_impl ( polymorphic_execution e,
Generator &&  in,
Operation &&  op,
Predicate &&  predicate_op,
Consumer &&  out 
)
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts>
void grppi::stencil_impl ( parallel_execution_tbb ex,
int  elements_per_thread,
int  index,
InputIt  first,
InputIt  last,
OutputIt  first_out,
StencilTransformer  transform_op,
Neighbourhood  neighbour_op,
OtherInputIts...  other_firsts 
)
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood >
void grppi::stencil_multi_impl ( polymorphic_execution e,
InputIt  first,
InputIt  last,
OutputIt  first_out,
StencilTransformer &&  op,
Neighbourhood &&  neighbor 
)
template<typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts>
void grppi::stencil_multi_impl ( polymorphic_execution e,
InputIt  first,
InputIt  last,
OutputIt  first_out,
StencilTransformer &&  op,
Neighbourhood &&  neighbor,
OtherInputIts...  other_its 
)
template<typename E , typename... O, typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , internal::requires_execution_not_supported< E > = 0>
void grppi::stencil_multi_impl ( polymorphic_execution e,
InputIt  first,
InputIt  last,
OutputIt  first_out,
StencilTransformer &&  op,
Neighbourhood &&  neighbor 
)
template<typename E , typename... O, typename InputIt , typename OutputIt , typename StencilTransformer , typename Neighbourhood , typename... OtherInputIts, internal::requires_execution_not_supported< E > = 0>
void grppi::stencil_multi_impl ( polymorphic_execution e,
InputIt  first,
InputIt  last,
OutputIt  first_out,
StencilTransformer &&  op,
Neighbourhood &&  neighbor,
OtherInputIts...  other_its 
)
template<typename Identity , typename Combiner , typename Consumer , typename Generator >
void grppi::stream_reduce_multi_impl ( polymorphic_execution ex,
int  window_size,
int  offset,
Identity  identity,
Generator &&  generate_op,
Combiner &&  combine_op,
Consumer &&  consume_op 
)
template<typename E , typename... O, typename Identity , typename Generator , typename Combiner , typename Consumer , internal::requires_execution_not_supported< E > = 0>
void grppi::stream_reduce_multi_impl ( polymorphic_execution ex,
int  windowsize,
int  offset,
Identity  identity,
Generator &&  gen,
Combiner &&  comb,
Consumer &&  cons 
)
template<typename Execution , typename Transformer , typename... MoreTransformers, requires_arguments< Transformer > = 0>
pipeline_info<Execution,Transformer,MoreTransformers...> grppi::transform_pipeline ( Execution &  ex,
std::tuple< Transformer, MoreTransformers... > &&  transform_ops 
)