Parallelism In The SeqAn Library: Patterns for Parallelization

A brief summary of patterns for parallelization, based on [Massingill et al. 2000].

Finding Concurrency

Decomposition

Task decomposition

Identify functional units that can be computed independently/in parallel.

Tasks may map to function calls or independent loop iterations.

Data decomposition

Identify physically continuous blocks of data to operate on, partition the data appropriately and assign a task for each partition.

For example, decompose loops into independent tasks for each iteration, or partition loop/data into chunks and assign one task to each chunk.

Dependency analysis

Task grouping

Aggregate tasks to form task groups, thus reducing granularity.

“Tasks that correspond to a high-level operation naturally group together.”

Merge tasks that share the same constraints (shared data …).

Task ordering

Identify ordering constraints between task groups:

Data sharing

Identify which data is

Identify border regions where data sets of different tasks overlap.

Evaluation

Suitability for the target platform

Design quality

Preparation for the next phase

Algorithm Structure

Organized by …

… tasks

… data decomposition

… flow of data

Supporting Structures

Program structures

Literature