Any parallel application can be regarded as an integration or assembly of software parts. The parts are independent – that is, their properties can be defined without reference to others [Par72]. A parallel application built as a collection of separable parts is called a 'parallel software system'. The parts from which it is built are usually called 'software components' [RM97].
Whenever a number of similar parallel software systems must be developed, or the number of components in such systems is large enough, they can be created as an assembly of pre-implemented components. The design problem then becomes one of selecting the right components from those available and assembling them in the right pattern.
Parallel software architecture can therefore be defined as the discipline or study of describing parallel software systems as the result of an assembly of software components. Although the emphasis is on existing parallel software components, the use of available components or those custom made for the parallel software system is not excluded.
This chapter first describes the areas that constitute parallel software architecture as a design discipline. The structure and content of this discipline should allow the communication of knowledge about software architectural work. We therefore divide parallel software architecture into three broad areas: parallel software design, parallel software theory and parallel software technology ...