Research Home


Research Areas



Illinois Impact




Safe Parallel Programming Languages:
DPJ and DPC++

Participants: Vikram Adve, Sarita Adve, Marc Snir, Robert Bocchino, Danny Dig, Stephen Heumann, Rakesh Komuravelli, David Raila, Patrick Simmons, Hyojin Sung, and Mohsen Vakilian.

Executive Summary

We are developing novel language mechanisms to make it far easier for ordinary programmers to develop parallel applications, compared with the state of the art today. In particular, we wish to ensure that developers can design, develop, debug and test parallel applications without facing the huge challenges of dealing with data races, deadlocks, and the subtleties of memory models.

Goals - Extended Description

To achieve this goal, we believe that the parallel programming model must be deterministic by default: deterministic algorithms must be expressible in a style that guarantees determinism, and nondeterministic behaviors, where desired, must be requested explicitly. Enforcing such semantics simplifies composing, porting, reasoning about, debugging, and testing parallel software. We have developed Deterministic Parallel Java (DPJ), an extension to the Java programming language with typing mechanisms and parallel language constructs that provide a deterministic-by-default programming model. We have formalized the type system and proven that it is sound, which guarantees, intuitively speaking, that any well-typed program has deterministic semantics. We have also shown that the language is flexible enough to express a wide range of important parallel idioms in object-oriented programs, including both data-parallel and task-parallel, and regular and irregular algorithms. The language expresses all or nearly all the parallelism in all the benchmarks we have tested, and delivers performance close to, or better than, the performance of equivalent, "low-level" versions written to use Java threads directly. In a separate project, we are developing techniques to port existing Java programs to DPJ. We are also developing DPC++, an extension of C++ embodying the same techniques.

Additional Resources

Autotuning Gluon: Interface for
Trusted Programming
Interactive Porting Libraries Optimizations for Power
Refactoring Safe Parallel Prog. Languages Scheduling Verification & Validation