Using generative design patterns to generate parallel code for a distributed memory environment
Proceedings of the ninth ACM SIGPLAN symposium on Principles and practice of parallel programming - PPoPP '03
A design pattern is a mechanism for encapsulating the knowledge of experienced designers into a re-usable artifact. Parallel design patterns reflect commonly occurring parallel communication and synchronization structures. Our tools, CO2P3S (Correct Object-Oriented Pattern-based Parallel Programming System) and MetaCO2P3S, use generative design patterns. A programmer selects the parallel design patterns that are appropriate for an application, and then adapts the patterns for that specific
... that specific application by selecting from a small set of code-configuration options. CO2P3S then generates a custom framework for this application that includes all of the structural code necessary for the application to run in parallel. The programmer is only required to write simple code that launches the application and to fill-in some applicationspecific sequential hook routines. We use generative design patterns to take an application specification (parallel design patterns + sequential user code) and use it to generate parallel application code that achieves good performance in shared memory and distributed memory environments. Although our implementations are for Java, the approach we describe is tool and language independent. This paper describes generalizing CO2P3S to generate distributed-memory parallel solutions.