This chapter introduced the concept of architectural patterns for parallel programming as common coordination organizations found in many parallel software systems. Selection amongst these patterns constitutes the coordination design step, the initial step of the pattern-based parallel software design method.
Architectural patterns for parallel programming have the common objective of solving the parallelization problem, the description of an algorithmic solution to a software problem as the simultaneous execution of communicating sequential processes. Once a solution is found and described as an algorithm and its associated data, the objective becomes that of ensuring more efficient execution of the solution as a parallel program.
Architectural patterns for parallel programming have been presented here together with guidelines on their classification and selection to help software designers decide which coordination organization is potentially useful for solving a given problem. The patterns described here are [OR98]: Parallel Pipes and Filters [Ort05], Parallel Layers [Ort07a], Communicating Sequential Elements [Ort00], Manager–Workers [Ort04] and Shared Resource [Ort03].