The central vision of this project is to bring parallel programming, which continues to be a daunting task to this day even for experts, to mainstream programmers. The fundamental challenge is that the concurrency semantics defined by memory models of popular parallel languages are too weak. This project is investigating solutions that span from processors to languages to enable stronger memory consistency models starting with sequential consistency, but goes far further in achieving much stronger concurrency semantics such as determinism at the language-level. The end goal is to find solutions that provide the best of both worlds: sequential semantics and parallel performance. A set of correctness and performance enhancing tools that exploit the stronger concurrency semantics are also being developed.
Advances in computing have relied on the exponential growth in processor performance. Unfortunately, unlike in the past, successive generations of processors can no longer improve sequential performance because of technology constraints. The burden has shifted to software developers who must now evolve to take advantage of parallelism in multi-core processors. Unfortunately, parallel programming continues to be a daunting task to this day even for experts. This project is developing solutions that can bring parallel programming to mainstream programmers by dramatically simplifying the process of developing, debugging, and maintaining parallel software. Programmer productivity tools developed as part of this research will be directly beneficial to students, software developers and researchers. By involving colleagues in industry, this project could serve as a catalyst to bring the software and processor industry together to solve a problem that is common to both: enabling mainstream programmers to take advantage of multi-core architectures.