Parallel processing is the division of a problem, presented as a data structure or a set of actions, among multiple processing components that operate simultaneously. The expected result is a more efficient completion of the solution to the problem. Its main advantage is the ability to handle tasks of a scale that would be unrealistic or not cost-effective for other systems [CG88, Fos94, ST96, Pan96].
The power of parallelism relies on issues concerned with partitioning a big problem in order to deal with complexity. The partitioning is necessary to divide such big problem into smaller sub-problems that are more easily understood, and may be worked on separately, on a more comfortable scale. This is especially important in the case of parallel systems, where partitioning enables software components to be not only created separately but also executed simultaneously in parallel.
However, in practice parallel programming is hard, involving a steep learning curve. Due to the characteristics of parallel systems, finding a starting point to initiate the design can sometimes be more difficult than compared with sequential programming. Results may also be more discouraging: the programmerís efforts must focus on the design and implementation in new parallel ways, which may end up with a parallel program version that executes slower than a simpler previous sequential one. Furthermore, whether "parallel computer" refers to a high performance platform or a cluster of workstations, its runtime environment is inherently unstable and unpredictable, making it more difficult to decide which organisational structure can be used with less effort and risk of failure. The Architectural Patterns for Parallel Programming presented here represent an attempt to help with the initial selection of the overall structure of a parallel software program.
Architectural patterns definition
Classification of Architectural Patterns for Parallel Programming
Selection of Architectural Patterns for Parallel Programming
Architectural Patterns for Parallel Programming
The goal of the present work is to provide software designers and engineers with an overview of the common structures used for parallel software systems, and provide a guidelines on the selection of architectural patterns during the initial design stages of parallel software applications. However, as a first attempt at the creation of a more organised pattern system for parallel programming it is not complete or detailed enough to consider every issue of parallel programming. The patterns described here can be linked with other current pattern developments for concurrent, parallel and distributed systems. Work on patterns that support the design and implementation of such systems has been addressed previously by several authors [Sch95, Sch98a, Sch98b].References
Jorge Luis Ortega Arjona.