Parallel programming is complicated. This complexity arises from the compounding of low-level parallelism related issues with the problems of writing good sequential code. Over the years, various approaches have been proposed to aid parallel program developers. These approaches employ a high-level model of parallel computation, thus hiding the low-level parallelism-related details from the user. Different approaches employ different abstraction techniques, such as communication libraries, macros, new parallel languages and abstract data types.
In this paper, we present a pattern-based approach to parallel application development, which uses frequently occurring structures for parallelism. A pattern (more precisely, a parallel computing pattern) is a re-usable, application-independent component providing a commonly used parallel structure. It is implemented as a re-usable code-skeleton for quick and reliable development of parallel applications. We believe that many of the parallel applications in use today are composed of at least one of these commonly-used patterns. One or more of these existing patterns can be composed, through a generic hierarchically-defined model and a textual interface, to create the entire parallel application.
The benefit is two-fold: (1) Each pattern is well documented through examples and usages, etc. This provides an user the in-depth knowledge about it. As a result, successive usages of the same pattern in different applications should reduce considerable amount of learning time. (2) The re-usable, application-independent components hide most of the low-level parallelism-related details from the user. These low-level details are often quite tedious and error-prone to implement from scratch. Thus, use of these re-usable components should reduce considerable amount of development time.
Copyright 1998 by D. Goswami, A. Singh and B. R. Preiss.