Program Slicing Notes
This commit is contained in:
parent
0eb9801b15
commit
1fe245235c
|
@ -1,5 +1,8 @@
|
|||
---
|
||||
title: CSE 662 - Languages and Runtimes for Big Data - Fall 2019
|
||||
paper_ideas:
|
||||
- name: Adaptive Functional Programming
|
||||
url: https://www.cs.cmu.edu/~guyb/papers/popl02.pdf
|
||||
---
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
title: Program Slicing
|
||||
supplements:
|
||||
- name: A Survey of Program Slicing Techniques (Frank Tip)
|
||||
url: "https://wiki.epfl.ch/provenance2011/documents/10.1.1.93.5469.pdf"
|
||||
---
|
||||
|
||||
- Announcements:
|
||||
- Progress report Thursday / Talk by Learned Index (45 min + 15 + 15)
|
||||
- Sept 25 deadline for Checkpoint 1:
|
||||
- What is the specific challenge that you will solve?
|
||||
- What metrics will you use to evaluate success?
|
||||
- What deliverables will you produce?
|
||||
- What resources have you collected / what have you learned?
|
||||
- How do you plan to approach the problem?
|
||||
|
||||
- Typo in the paper:
|
||||
- EQN defining B_C^0
|
||||
|
||||
- Overview
|
||||
- Delta query: Come up with a query that computes the difference in results given a change to the output.
|
||||
- Related: Provenance query: What inputs affected the output
|
||||
- Program slice: What instructions affected the output.
|
||||
- Background
|
||||
- Program
|
||||
- A sequence of instructions w/ flow patterns (not quite a lattice -- but could be multiple tops)
|
||||
- View 1: (As Memory) Instructions listed in order
|
||||
- View 2: (Control Flow Graph) Previous/next instruction (in some possible trace) "Predecessor", "Successor"
|
||||
- Trace
|
||||
- A sequence of instructions in execution order
|
||||
- e.g., State Trajectory in paper: Instructions + Corresponding Input State
|
||||
- Flow Dependence
|
||||
- i flows to j if
|
||||
(i) There is a variable x assigned to by i, and
|
||||
(ii) x is read from by j, and
|
||||
(iii) There is *some* path from i to j on which x is not read.
|
||||
- Post-dominance (Inverse dominator):
|
||||
- A node i in the CFG is post-dominatedby a node by j if all paths from i to STOP pass through j.
|
||||
- A node j is control dependent on a node i if
|
||||
(i) there exists a path P from i to j such that j post-dominates every node in P, excluding i and j, and
|
||||
(ii) i is not post-dominated by j. <- Q: Because of loops
|
||||
- Static Slicing:
|
||||
- Input: A pair (n, V)
|
||||
- n: A line of the program
|
||||
- V: a set of variables of interest.
|
||||
- Output: A (not minimal) subset of the program that can still compute everything in V (assuming deterministic evaluation)
|
||||
- Use cases:
|
||||
- Dead Code Elimination
|
||||
- Highlight Dependent Instructions
|
||||
- Delta Programs
|
||||
- Optimization
|
||||
- Cache/JIT compilation via hotspot prediction
|
||||
- Lazy evaluation
|
||||
- Parallel Execution
|
||||
- Weiser:
|
||||
- Delete instructions from the program that can not influence the output
|
||||
- R^0(n): "relevant" variables at a line. Start with V being relevant for the line n, and work backwards through the CFG
|
||||
- Remove variables on lines that overwrite them
|
||||
- When a variable is removed, add all variables read by the line.
|
||||
- S^0: Lines that modify a variable in the line's relevant variable set
|
||||
- B^0: Lines on which some line in S^0 has a control-dependency
|
||||
- {R, S, B}^{n>0}: Add the inputs of everything in B^n-1 to the relevant variable set, and then add lines with a dependency.
|
||||
- Information Flow Relations (Bergeretti & Carre)
|
||||
- Provenance P10 / Fig 7
|
||||
- Intraprocedural slicing:
|
||||
- Figure out which variables the code reads from / writes to.
|
||||
- Weiser’s algorithm does not take into accountwhichoutput parameters aredependent onwhichinput parameters is a source of imprecision
|
||||
- Bergeretti & Carre:
|
||||
- Dynamic Slicing:
|
||||
- Input: A triple (x, n, V) and a state trajectory/trace
|
||||
- x: program input
|
||||
- n: step in the trajectory/trace
|
||||
- V: subset of variables of interest
|
||||
- For each step, look at the dependencies:
|
||||
- DU: (Statement that used a variable, Last Statement to Modify It)
|
||||
- TC: (Statement that issues a control predicate, Statement Dependent on it)
|
||||
- IR: (Statement, Any other occurrence of the same statement in the trace)
|
||||
- Needed to capture forward dependencies.
|
||||
- Extend the trace with dependencies in the trace, then map to statements.
|
Loading…
Reference in a new issue