Task-level analysis for a language with async/finish parallelism

The task level of a program is the maximum number of tasks that can be available (i.e., not finished nor suspended) simultaneously during its execution for any input data. Static knowledge of the task level is of utmost importance for understanding and debugging parallel programs as well as for guiding task schedulers. We present, to the best of our knowledge, the first static analysis which infers safe and precise approximations on the task level for a language with async-finish parallelism. In parallel languages, async and finish are basic constructs for, respectively, spawning tasks and waiting until they terminate. They are the core of modern, parallel, distributed languages like X10. Given a (parallel) program, our analysis returns a task-level upper bound, i.e., a function on the program's input arguments that guarantees that the task level of the program will never exceed its value along any execution. Our analysis provides a series of useful (over)-approximations, going from the total number of tasks spawned in the execution up to an accurate estimation of the task level.

[1]  Christian von Essen,et al.  Automated Termination Analysis of Java Bytecode by Term Rewriting , 2010, RTA.

[2]  K. Rustan M. Leino,et al.  BoogiePL: A typed procedural language for checking object-oriented programs , 2005 .

[3]  Manuel Fähndrich,et al.  Static Verification for Code Contracts , 2010, SAS.

[4]  Elvira Albert,et al.  COSTA: Design and Implementation of a Cost and Termination Analyzer for Java Bytecode , 2008, FMCO.

[5]  Étienne Payet,et al.  A termination analyzer for Java bytecode based on path-length , 2010, TOPL.

[6]  Scott D. Stoller,et al.  Parametric heap usage analysis for functional programs , 2009, ISMM '09.

[7]  Antoine Miné Field-sensitive value analysis of embedded C programs with union types and pointer arithmetics , 2006, LCTES '06.

[8]  Yu Chen,et al.  A New Algorithm for Identifying Loops in Decompilation , 2007, SAS.

[9]  Yanhong A. Liu,et al.  Optimized Live Heap Bound Analysis , 2002, VMCAI.

[10]  Sumit Gulwani,et al.  SPEED: precise and efficient static estimation of program computational complexity , 2009, POPL '09.

[11]  Laurie Hendren,et al.  Soot---a java optimization framework , 1999 .

[12]  Sergio Yovine,et al.  Parametric prediction of heap memory requirements , 2008, ISMM '08.

[13]  Peter Sestoft,et al.  Partial evaluation and automatic program generation , 1993, Prentice Hall international series in computer science.

[14]  Radha Jagadeesan,et al.  Concurrent Clustered Programming , 2005, CONCUR.

[15]  Martín Abadi,et al.  A model of cooperative threads , 2009, POPL '09.

[16]  Vivek Sarkar,et al.  Efficient data race detection for async-finish parallelism , 2010, Formal Methods Syst. Des..

[17]  Martin Hofmann,et al.  Type-Based Amortised Heap-Space Analysis , 2006, ESOP.

[18]  Shengchao Qin,et al.  Analysing memory resource bounds for low-level programs , 2008, ISMM '08.

[19]  Elvira Albert,et al.  Cost Analysis of Java Bytecode , 2007, ESOP.

[20]  Ben Wegbreit,et al.  Mechanical program analysis , 1975, CACM.

[21]  Vivek Sarkar,et al.  X10: an object-oriented approach to non-uniform cluster computing , 2005, OOPSLA '05.

[22]  Elvira Albert,et al.  Parametric inference of memory requirements for garbage collected languages , 2010, ISMM '10.

[23]  Elvira Albert,et al.  Closed-Form Upper Bounds in Static Cost Analysis , 2011, Journal of Automated Reasoning.

[24]  Vivek Sarkar,et al.  Automatic Verification of Determinism for Structured Parallel Programs , 2010, SAS.

[25]  Jens Palsberg,et al.  Featherweight X10: a core calculus for async-finish parallelism , 2010, PPoPP '10.

[26]  Andrew W. Appel,et al.  SSA is functional programming , 1998, SIGP.

[27]  Martin Hofmann,et al.  Amortized Resource Analysis with Polynomial Potential , 2010, ESOP.