Authors
Robert L Bocchino Jr, Stephen Heumann, Nima Honarmand, Rakesh Komuravelli, Jeffrey Overbey, Patrick Simmons, Hyojin Sung, Mohsen Vakilian, Sarita V Adve, Vikram S Adve, Danny Dig, Marc Snir
Description
When using today’s common shared-memory parallel programming models, subtle errors can lead to unintended nondeterministic behavior and bugs that appear only under certain thread interleavings. In contrast, we believe that a programming model should guarantee deterministic behavior unless the programmer specifically calls for nondeterminism. We describe our implementation of such a deterministic-bydefault parallel programming language. Deterministic Parallel Java (DPJ) is an extension to Java that uses a region-based type and effect system to guarantee deterministic parallel semantics through static checking. Data in the heap is partitioned into regions, so the compiler can calculate the read and write effects of each variable access in terms of regions. Methods are annotated with effect summaries, so the effects of a full program can be checked with a modular analysis. Using this system, the compiler can verify that the effects of the different operations within each parallel region are noninterfering. The DPJ type system includes several novel features to enable expressive support for widely used parallel idioms. We describe an experimental evaluation of DPJ that shows it can express a wide range of realistic parallel programs with good performance. We also describe a method for inferring method effect summaries, which can ease the burden of writing annotations. In addition, we briefly discuss several areas of ongoing and future work in the DPJ project.