Patterns for Parallel Software Design presents a pattern-oriented software architecture approach to parallel software design, this is, designing parallel software based on existing design knowledge (from well-known classic design knowledge to new and promising designs). A pattern-oriented approach to Parallel Software Design is not a design method in the classic sense, but a new way of managing and exploiting existing design knowledge for designing parallel programs. Using this approach leads to parallel software systems that can be considered better designed: they are modular, adaptable, understandable, evolvable, and so on. Moreover, such approaches to parallel software design aims to enhance not only build-time properties of parallel systems, but also and particularly, their run-time properties. Key features include: * Use of known solutions in concurrent and distributed programming, applied to the development of parallel programs. * Significant architectural patterns that describe how to divide an algorithm and/or data to find a suitable partition, and hence, link it with a programming structure that allows for such a division. * Explanations of design patterns to show readers how to select structures for communication between parallel components, based on actual characteristics found in the context, like memory organisation of the hardware platform and partition of the problem. * Idioms that describe synchronisation mechanisms in commonly used languages for parallel programming.