Slicing concurrent programs
- 1 August 2000
- conference paper
- Published by Association for Computing Machinery (ACM)
- Vol. 25 (5) , 180-190
- https://doi.org/10.1145/347324.349121
Abstract
Slicing is a well-known program analysis technique for analyzing sequential programs and found useful in debugging, testing and reverse engineering. This paper extends the notion of slicing to concurrent programs with shared memory, interleaving semantics and mutual exclusion. Interference among concurrent threads or processes complicates the computation of slices of concurrent programs. Further, unlike slicing of sequential programs, a slicing algorithm for concurrent programs needs to differentiate between loop-independent data dependence and certain loop-carried data dependences.We show why previous methods do not give precise solutions in the presence of nested threads and loops and describe our solution that correctly and efficiently computes precise slices. Though the complexity of this algorithm is exponential on the number of threads, a number of optimizations are suggested. Using these optimizations, we are able to get near linear behavior for many practical concurrent programs.Keywords
This publication has 10 references indexed in Scilit:
- Basic compiler algorithms for parallel programsPublished by Association for Computing Machinery (ACM) ,1999
- Static slicing of threaded programsPublished by Association for Computing Machinery (ACM) ,1998
- Parallelism for freeACM Transactions on Programming Languages and Systems, 1996
- Using program slicing to simplify testingSoftware Testing, Verification and Reliability, 1995
- Debugging with dynamic slicing and backtrackingSoftware: Practice and Experience, 1993
- Using program slicing in software maintenanceIEEE Transactions on Software Engineering, 1991
- An interval-based approach to exhaustive and incremental interprocedural data-flow analysisACM Transactions on Programming Languages and Systems, 1990
- Automatic translation of FORTRAN programs to vector formACM Transactions on Programming Languages and Systems, 1987
- Program SlicingIEEE Transactions on Software Engineering, 1984
- The program dependence graph in a software development environmentPublished by Association for Computing Machinery (ACM) ,1984