Deterministic Parallel Java: Towards Deterministic-by-default Parallel Programming

156
Опубликовано 6 сентября 2016, 18:28
One important feature of a parallel programming model is deterministic semantics: that is, a program produces the same output on every execution with a given input, regardless of the parallel schedule chosen. Determinism makes parallel programs much easier to write, understand, debug, and maintain. Further, many (though not all) parallel programs are, in fact, intended to have deterministic semantics. However, general-purpose languages, particularly those that allow arbitrary updates to shared data, typically do not guarantee determinism, leaving the burden on the programmer to ensure that the program is correctly synchronized. In this talk, I will present Deterministic Parallel Java (DPJ), an extension of the Java programming language that guarantees deterministic semantics in the presence of aliasing and updates to shared mutable objects. An important consequence of deterministic semantics is that a working sequential program needs no further testing after parallelization with DPJ. In DPJ, the programmer partitions the heap into regions and annotates method definitions with read and write effects on those regions. The programmer also explicitly marks parallel tasks and synchronization points. The compiler checks that the method effects are correctly summarized, and that the program is correctly synchronized to ensure determinism. I will describe the core language features, illustrate them with examples, and describe the results of an initial evaluation of the language. I will also describe ongoing work, including features we plan to add to the language.
автотехномузыкадетское