
The trend has been well established : parallel processors will dominate most if not every niche of computing.

After describing out pattern language, we’ll present a case study from the field of machine learning as a concrete example of how patterns are used in practice. This leads us to the ongoing project centered at UC Berkeley’s Par Lab to pull the essential set of design patterns for parallel software design into a Design Pattern Language. We will then show how design patterns provide a technology to define the reusable design elements in software engineering. In this paper, we will develop our thesis about the central role played by the architecture/design for software. This is far more important than programming models and their supporting environments, since with a good design in hand, most any programming system can be used to actually generate the program’s source code. Technology to more systematically describe such designs and reuse them between software projects is the fundamental problem facing software for terascale processors. This applies to the overall architecture of the program, but also to the lower layers in the software system where the concurrency and how it is expressed in the final program is defined. The key to writing high quality parallel software is to develop a robust software design. Kurt Keutzer (EECS UC Berkeley) and Tim Mattson (Intel)

5 Case Study: Content Based Image retrieval.3 Software architecture and design patterns.1 A Design Pattern Language for Engineering (Parallel) Software.
