STAPL API Reference          
Overview   Containers   Algorithms   Views   Skeletons   Run-Time System
Modules     Classes    
Modules | Functions
The STAPL Skeletons Framework

The STAPL Skeletons Framework is a high-level skeletal approach for parallel programming. More...

+ Collaboration diagram for The STAPL Skeletons Framework:

Modules

 Spawning Environments
 Environments define the representation of nodes and edges in the dataflow graphs generated from skeletons.
 
 Skeleton Execution
 Entities to facilitate the execution of skeletons in STAPL.
 
 Explicit Factories
 The existing hand-written factories used prior to the existence of the Skeleton Framework.
 
 Flows
 Flows are used to customize skeleton compositional operators by modifying input and output dependencies between their underlying skeletons.
 
 Functional Definition of Skeletons
 The functional definition of skeletons which can be composed and transformed in the Skeletons Framework.
 
 Compositional Operators
 Compositional operators allow new skeletons to be defined from existing skeletons.
 
 Parametric Dependencies
 Parametric dependencies define the finest-grain component of the Skeletons Framework. These entities are represented as nodes in the generated dataflow graphs in a given environment.
 
 Elementary Operator Spans
 Spans define the dimensions of the parametric dependencies in an elementary skeleton based on the given input sizes.
 
 Transformation Operators
 Transform the skeletons to other skeletons for various reasons (e.g., faster execution, nested execution, etc.)
 
 Utility Methods
 
 Executable Skeletons
 Executable skeletons change functional skeletons from higher-order functions to regular functions by providing access to the input data.
 
 Skeleton Tags
 Tags are used to identify skeletons throughout the Skeletons Framework. Identifying skeletons using their tags allows transformations and optimizations to be simply defined over skeletons.
 

Functions

template<typename Scheduler = default_scheduler, typename WF , typename... V>
void stapl::serial_impl::serial (skeletons::tags::with_coarsened_wf, std::size_t num_sets, WF &&wf, V &&... v)
 Construct and execute a serial skeleton that performs a serial computation on the views provided. More...
 
template<typename Scheduler = default_scheduler, typename WF , typename... V>
void stapl::serial_impl::serial (skeletons::tags::no_coarsening, std::size_t num_sets, WF &&wf, V &&... v)
 
template<typename Scheduler = default_scheduler, typename WF , typename... V>
void stapl::serial_impl::serial (stapl::use_default, std::size_t num_sets, WF &&wf, V &&... v)
 
template<typename Tag = stapl::use_default, typename WF , typename... V>
void stapl::serial_sets (WF &&wf, int nsets, V &&... v)
 Construct and execute a skeleton that performs a set of serial computations on the views provided. The tasks of the serial computation are divided into the nsets specified. Tasks within a set are processed serially, while each set is processed concurrently. More...
 
template<typename Tag = stapl::use_default, typename WF , typename... V>
void stapl::serial (WF &&wf, V &&... v)
 Specialized form of serial_sets that schedules all tasks created by the skeleton on location chosen by the task placement policy in effect. More...
 
template<typename Tag = stapl::use_default, typename WF , typename... V>
void stapl::serial_io (WF &&wf, V &&... v)
 Specialized form of serial_sets that schedules all tasks created by the skeleton on location 0 for execution using location_0_placement_policy task placement policy. More...
 

Detailed Description

The STAPL Skeletons Framework is a high-level skeletal approach for parallel programming.

This framework abstracts the underlying details of data distribution and parallelism from programmers and allows them to express parallel programs as a composition of either existing elementary skeletons such as map, map_reduce, scan, zip, butterfly, allreduce, alltoall or user-defined custom skeletons.

Skeletons in this framework are defined as parametric data flow graphs, and their compositions are defined in terms of data flow graph compositions. Defining the composition in this manner allows dependencies between skeletons to be defined in terms of point-to-point dependencies, avoiding unnecessary global synchronizations. In addition, this framework supports various transformations which enable applications written in terms of skeletons to run on more than 100,000 cores.

Function Documentation

◆ serial() [1/4]

template<typename Scheduler = default_scheduler, typename WF , typename... V>
void stapl::serial_impl::serial ( skeletons::tags::with_coarsened_wf  ,
std::size_t  num_sets,
WF &&  wf,
V &&...  v 
)

Construct and execute a serial skeleton that performs a serial computation on the views provided.

This specialization is used when only the input views need to be coarsened.

Parameters
wfoperation to apply to each set of view elements.
num_setsthe number of sets to form. View elements are balance distributed across the sets.
vviews to be processed.

◆ serial() [2/4]

template<typename Scheduler = default_scheduler, typename WF , typename... V>
void stapl::serial_impl::serial ( skeletons::tags::no_coarsening  ,
std::size_t  num_sets,
WF &&  wf,
V &&...  v 
)

This specialization is used when neither the skeleton nor the view need to be coarsened.

Parameters
wfoperation to apply to each set of view elements.
num_setsthe number of sets to form. View elements are balance distributed across the sets.
vviews to be processed.

◆ serial() [3/4]

template<typename Scheduler = default_scheduler, typename WF , typename... V>
void stapl::serial_impl::serial ( stapl::use_default  ,
std::size_t  num_sets,
WF &&  wf,
V &&...  v 
)

This specialization is used when both the skeleton and the view have to be coarsened.

Parameters
wfoperation to apply to each set of view elements.
num_setsthe number of sets to form. View elements are balance distributed across the sets.
vviews to be processed.

◆ serial_sets()

template<typename Tag = stapl::use_default, typename WF , typename... V>
void stapl::serial_sets ( WF &&  wf,
int  nsets,
V &&...  v 
)

Construct and execute a skeleton that performs a set of serial computations on the views provided. The tasks of the serial computation are divided into the nsets specified. Tasks within a set are processed serially, while each set is processed concurrently.

An example use case is writing n view elements to m files. Each set of elements [0, m-1], [m, 2m-1], ... will be executed concurrently, and elements within a set will be processed serially to ensure that the write of one element to the file completes before the next element to be written to the file begins writing.

Parameters
wfThe work function to be applied on each elements of sets
nsetsThe number of sets to form. View elements are balance distributed across the sets.
vViews to be processed.

◆ serial() [4/4]

template<typename Tag = stapl::use_default, typename WF , typename... V>
void stapl::serial ( WF &&  wf,
V &&...  v 
)

Specialized form of serial_sets that schedules all tasks created by the skeleton on location chosen by the task placement policy in effect.

Parameters
wfThe work function to be applied on each element of the views provided.
vViews to be processed.

◆ serial_io()

template<typename Tag = stapl::use_default, typename WF , typename... V>
void stapl::serial_io ( WF &&  wf,
V &&...  v 
)

Specialized form of serial_sets that schedules all tasks created by the skeleton on location 0 for execution using location_0_placement_policy task placement policy.

Parameters
wfThe work function to be applied on each element of the views provided.
vViews to be processed.