'Learning the answer to a problem does not provide a full idea of the resolution process, since there is always a step from which several questions arises.'
George Polya, How to solve it
A parallel program is 'the specification of a set of processes executing simultaneously, and communicating among themselves in order to achieve a common objective' (see Section 2.1). This definition is obtained from the original research work on parallel programming provided by E.W. Dijkstra [Dij68], C.A.R. Hoare [Hoa78], P. Brinch-Hansen [Bri78] and many others, who established the basis for parallel programming today. The current use of parallel computers implies that parallel software is increasingly important. From clusters to supercomputers, success depends heavily on the design skills of software developers. Obtaining a parallel program from an algorithmic description is the main objective of parallel software design.
This chapter introduces a pattern-based parallel software design method, which makes use of the software patterns from Chapters 3, 4, and 5 to develop the coordination, communication and synchronization of a parallel software system. This method was used in Chapter 6 when developing the two examples. This chapter explains the method in detail, providing explanation of the steps taken when designing a parallel application. The description of the steps is complemented by the development of a further example: the Two-Dimensional Heat Equation, ...