A pattern language embodies a design methodology and provides domain-specific advice to the designer. The pattern language described here is intended for application programmers who want to design new programs for execution on parallel computers. The top-level patterns help the designer expose exploitable concurrency. The lower-level patterns guide the programmer as they decide how to take advantage of the problem's concurrency. Finally, the lowest-level patterns encode specific constructs that coordinate the execution of concurrent tasks.
Parallel programs are hard to write.
There is plenty of concurrency in common algorithms, but few programmers take advantage of it. This is unfortunate, as there are many benefits to concurrent programs. They run faster on multiprocessor systems, manage resource contention better, and can provide improved responsiveness to the end user. One answer is to provide them with a pattern language. The pattern language encodes expert knowledge about parallel programming.