'How does one invent program structure? I do it by drawing pictures of it from different viewpoints over and over again until a simple and convincing pattern emerges. Perhaps, there are more systematic ways of inventing structure – I don't know. But I do recognize a good program when I find one'.
Per Brinch-Hansen, The Architecture of Concurrent Programs (1977), p. 192.
This chapter introduces the concept of architectural for parallel programming, as the basic organizational structures commonly used in parallel programming to compose parallel software systems. Selection of architectural patterns for parallel programming is based on the partitioning proposed for algorithms and/or data. The architectural patterns for parallel programming describe the coordination of an overall parallel software system. The patterns presented here that are commonly used in parallel programming are Parallel Pipes and Filters, Parallel Layers, Communicating Sequential Elements, Manager–Workers and Shared Resource.