Applications and Patterns
Principal Investigators: Mihn Do, John Hart, Ralph Johnson, Klara Nahrstedt, Sanjay Patel, Dan Roth
Applications
Our applications thrust has two objectives:
- to serve as a driver for our work in parallel programming models and environments
- to apply state-of-the-art parallelization techniques to key application domains to accelerate the development of killer applications for multicore client systems.
Our focus is on applications that enhance human/human and human/computer interactions, and particularly on the underlying compute intensive algorithms that improve interface intelligence and interactivity. Our current focus is in the following broad domains:
- dynamic virtual environments
- natural language processing
- tele-immersive environments
- image-based rendering
Broadly, our approach within each domain is to develop a set of key parallelized frameworks that can be used by application developers to develop applications on a larger scale. Such frameworks will include APIs for frequently-used, compute-intensive functionality with extensibility for user-supplied kernels and data structures. The frameworks themselves will utilize technology developed in our other thrusts, such as autotuning and metaprogramming, and benefit from the parallel models and environments we are investigating. The subsequent subsections describe the individual application domains.
Patterns
Before programmers start using our programming models and tools, they must think about the parallel algorithms, data structures, and more specifically, parallel patterns to use for their applications. We believe a vocabulary of such patterns is essential to educate parallel programmers, both directly and by enabling sharing of experiences.
One of us previously co-authored a book on design patterns for object-oriented programming that many believe to be the engine that popularized sequential object-oriented programming. That effort focused on very specific patterns that programmers could directly use to translate to code. We aim to duplicate that success for parallel programming. Like the sequential patterns book, we believe that the most value in a parallel patterns catalog will come from cataloging the rich diversity of specific patterns that programmers can directly use in their code. This is in contrast to identifying a few motifs, which is useful as a characterization of important computations but has unclear value in guiding code development.
We are engaged in an effort to create an encyclopedia of parallel patterns that encompasses a broad set of programmer experiences. This is necessarily a community effort. It involves collaboration with programmers inside and outside our university and other researchers also working on parallel patterns. To facilitate this collaboration, we’re also planning a workshop series on parallel patterns, based on similar workshops we have organized in the past.
Documenting parallel programming patterns can have a big impact on parallel programming. Language designers will use them to test the expressiveness of their language. Tool developers will try to automate particular patterns. However, our main interest is in using them to teach the next generation of parallel programmers, whether they are in school or are already professional programmers. Thus, our main goal for the next few years is on discovering the patterns that are most important in parallel programming and in ensuring that they are documented in a way that is easy to understand and to use correctly.