- Parallel Patterns Wiki
- Encyclopedia of Parallel Patterns
- ParaPLoP—Workshop on Parallel Programming Patterns
- Berkeley Pattern Language for Parallel Programming—collaboration with I2PC
To make parallel programming easier, we must improve the way we think about parallel programming. Since "clear language breeds clear thinking," we need better ways of describing and teaching parallel programming activities. Thus, in addition to teaching language features and algorithms, we should also teach patterns used in parallel programming. Expert programmers think about programs at a higher level than beginners. They see relationships between different parts of a program and understand the problems that these relationships solve. Courses and books on parallel programming have tended to focus either on parallel algorithms or on programming languages or lower-level programming models that are used to write parallel programs, but do not teach about software structure and higher-level patterns. Documenting and teaching these patterns should enable more programmers to become experts faster. The patterns can also become a vocabulary for documenting programs and for letting programmers talk about the programs they are designing. Programming languages evolve to better support the most common patterns, and sometimes libraries are designed to automate some patterns. So better understanding the patterns of parallel programming can make parallel programming easier.
Work on parallel programming patterns has been going on for some years with noteworthy efforts by Doug Lea, Mattson et al, and Phil Colella. However, much work still needs to be done. Parallelizing a sequential program often requires developing a new parallel algorithm. Programmers may need to discover opportunities for parallelism, make high-level decisions on strategies for the distribution of computation and data, and then decide how to implement the parallelism and synchronization. To be effective, the patterns effort must aid in the navigation of both the high- and low-level patterns that this process encompasses. Furthermore, although there will be a lot of patterns for parallel programming, most projects will use only a small subset since they will use a particular programming model and require only a few categories of algorithms. A key research challenge is determining how to organize the pattern catalog in a way that is meaningful to programmers and that naturally leads them to the patterns they need.
The work of documenting patterns is too big for any group to finish. Success requires a community effort that involves not only academia but also practitioners in industry and national labs and students: pattern languages evolve through a continued interaction between writers documenting patterns, experts reviewing their documentation, programmers using the patterns and students learning patterns. Writers must learn how readers misinterpret and misuse the patterns, and rewrite them to prevent these problems. It is our goal to foster such interaction and create a broad community involved in the development of parallel pattern languages through workshops, courses, and online fora.
We are working to create a body of parallel programming patterns in several ways. First, we are documenting patterns. We are focusing on patterns that are important to us and that are not well documented already. This will include low-level patterns of the technologies we use (e.g. deterministic shared memory and actors) and high-level motifs used by our applications. Second, we are working with other authors to help improve their patterns. Third, we plan to use patterns to teach parallel programming. Experience using our patterns and the patterns of other people will help us to improve the patterns. Fourth, we plan to organize workshops for authors of parallel programming patterns, similar in style to the Pattern Languages of Programming conferences held for years at Illinois. This will bring authors together, reduce duplicated effort, and help concentrate work on the most needed patterns. Fifth, we will organize events for practitioners to both teach them patterns and to get feedback on how they use the patterns. It is easier to try this out on students, but the reaction from practitioners will not be the same, so it is important for pattern authors to hear directly from practitioners.