1 / 27

The 5th International Conference on Automatic Differentiation, Bonn, Germany, August 15, 2008

Design and Implementation of a Context-Sensitive, Flow-Sensitive Activity Analysis Algorithm for Automatic Differentiation. The 5th International Conference on Automatic Differentiation, Bonn, Germany, August 15, 2008. Outline. Activity Analysis Previous work: CSFI New CSFS Algorithm

addo
Télécharger la présentation

The 5th International Conference on Automatic Differentiation, Bonn, Germany, August 15, 2008

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Design and Implementation of a Context-Sensitive,Flow-Sensitive Activity Analysis Algorithm forAutomatic Differentiation The 5th International Conference on Automatic Differentiation,Bonn, Germany, August 15, 2008

  2. Outline • Activity Analysis • Previous work: CSFI • New CSFS Algorithm • Experimental Results • Conclusion

  3. Activity Analysis • AD is applied to a function with a set of input variables and a set of output variables. • Sometimes, we are interested in the derivatives • of a subset of the output variables  dependent • with respect to a subset of the input variables  independent • An intermediate variable is • varied if it is transitively dependent on any independent variable • useful if any dependent variable is transitively dependent on it • active if it is both varied and useful. • Partial derivatives need to be computed only for active variables. • Activity analysis is nonseparable.

  4. Activity Analysis: Given f, compute dy1/dx1 f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1) y1 = t1*2 t2 = cos(x2) y2 = t2*3 y3 = x3*t1 } f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1) dt1/dx1 = cos(x1) y1 = t1*2 dy1/dt1 = 2 t2 = cos(x2) y2 = t2*3 y3 = x3*t1 dy1/dx1 = (dy1/dt1)*(dt1/dx1) }

  5. Activity Analysis: Given f, compute dy1/dx1 f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1) y1 = t1*2 t2 = cos(x2) y2 = t2*3 y3 = x3*t1 } f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1) dt1/dx1 = cos(x1) y1 = t1*2 dy1/dt1 = 2 t2 = cos(x2) dt2/dx2 = -sin(x2) y2 = t2*3 dy2/dt2 = 3 y3 = x3*t1 dy3/dx3 = t1 dy3/dt1 = x3 dy1/dx1 = (dy1/dt1)*(dt1/dx1) dy2/dx2 = (dt2/dx2)*(dy2/dt2) dy3/dx1 = (dt1/dx1)*(dy3/dt1) }

  6. Activity Analysis: varied + useful = active f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1); y1 = t1*2; t2 = cos(x2); y2 = t2*3; y3 = x3*t1; } f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1); y1 = t1*2; t2 = cos(x2); y2 = t2*3; y3 = x3*t1; } varied active useful useful f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1); y1 = t1*2; t2 = cos(x2); y2 = t2*3; y3 = x3*t1; } f(x1, x2, x3, y1, y2, y3){ t1 =sin(x1); y1 = t1*2; t2 = cos(x2); y2 = t2*3; y3 = x3*t1; } varied

  7. Previous work: Context-Sensitive, Flow-Insensitive Activity Analysis (VDGAA) • Graph reachability problem • Variable Dependence Graph (VDG) • Two separate (color) propagations: • Forward (coloring red) for “varied” variables • Backward (coloring yellow) for “useful” variables • Context sensitivity is supported by a stack of contexts. • Run time • Very fast in practice • Small overestimations of active variables due to • the way programs are usually written • the property of activity analysis

  8. VDGAA on the run: 1. build VDGAA f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1); y1 = t1*2; t2 = cos(x2); y2 = t2*3; y3 = x3*t1; } x3 x2 t2 x1 y3 t1 y2 y1 Variable Dependence Graph (VDG)

  9. VDGAA on the run: 2. Find ‘varied’ variables f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1); y1 = t1*2; t2 = cos(x2); y2 = t2*3; y3 = x3*t1; } x3 x2 t2 x1 y3 t1 Forward propagation y2 y1

  10. VDGAA on the run: 3. Find ‘useful’ variables f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1); y1 = t1*2; t2 = cos(x2); y2 = t2*3; y3 = x3*t1; } x3 x2 t2 x1 y3 t1 Backward propagation y2 y1

  11. VDGAA on the run: Context Sensitivity call foo(x, p1); foo(a, b){ b = a; } call foo(p2, y); p2 y x p1 a b Forward propagation

  12. VDGAA on the run: Context Sensitivity call foo(x, p1); foo(a, b){ b = a; } call foo(p2, y); p2 y x p1 a b Backward propagation

  13. VDGAA : Flow Insensitivity f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1); y1 = t1*2; y3 = x3*t1; t1 = cos(x2); y2 = t1*3; } x3 x2 x1 t1 y3 Forward propagation y2 y1

  14. VDGAA : Flow Insensitivity f(x1, x2, x3, y1, y2, y3){ t1 = sin(x1); y1 = t1*2; y3 = x3*t1; t1 = cos(x2); y2 = t1*3; } x3 x2 x1 t1 y3 Backward propagation y2 y1

  15. Context-Sensitive, Flow-Sensitive Activity Analysis (DUGAA) • Graph reachability problem • Two separate (color) propagations: • Forward for “varied” variables • Backward for “useful” variables • Context sensitivity is supported by a stack of contexts. • Definition-Use Graph (DUG) • Flow sensitivity is supported by the use of reaching definitions for nodes. • Algorithm: Build a def-use graph Forward propagation Backward propagation UD-DU Chains

  16. DUGAA on the run: 1. build a DUG 1:f(x1, x2, x3, y1, y2, y3){ 2: t1 = sin(x1); 3: y1 = t1*2; 4: y3 = x3*t1; 5: t1 = cos(x2); 6: y2 = t1*3; 7:} x2@I t1@5 x3@I y2@6 y3@4 y2@O x1@I t1@2 y3@O y1@3 y1@O Def-Use Graph (DUG)

  17. DUGAA on the run: 2. Forward propagation 1:f(x1, x2, x3, y1, y2, y3){ 2: t1 = sin(x1); 3: y1 = t1*2; 4: y3 = x3*t1; 5: t1 = cos(x2); 6: y2 = t1*3; 7:} x2@I t1@5 x3@I y2@6 y3@4 y2@O x1@I t1@2 y3@O Forward propagation y1@3 y1@O

  18. DUGAA on the run: 3. Backward propagation 1:f(x1, x2, x3, y1, y2, y3){ 2: t1 = sin(x1); 3: y1 = t1*2; 4: y3 = x3*t1; 5: t1 = cos(x2); 6: y2 = t1*3; 7:} x2@I t1@5 x3@I y2@6 y3@4 y2@O x1@I t1@2 y3@O Backward propagation y1@3 y1@O

  19. Implementation OpenAnalysis Output (Fortran) Input (Fortran) VDGAA Open64 Front end OpenAD: AD Transformation Open64 Unparser DUGAA

  20. Benchmarks

  21. Slowdowns in analysis run time: DUGAA vs. VDGAA

  22. Analysis run time

  23. Analysis run-time breakdown on MITgcm

  24. Reduction in active variables

  25. Conclusion • A new context-sensitive, flow-sensitive (CSFS) activity analysis algorithm: Def-Use Graph Activity Analysis (DUGAA) • Comparison of two activity analyses: DUGAA (CSFS) vs. VDGAA (CSFI) • Slower than VDGAA for all 8 benchmarks • by a factor > 27 • but takes less than one minute for a code larger than 27k lines • Makes fewer overestimations than VDGAA for two of the eight benchmarks. • May save human effort in managing AD code. • Future work • Comparison among CIFS, CSFI, and CSFS activity analyses • Dealing with pointers and recursion

  26. PARAM Edges • Edges between formal parameters • Summarize the connectivity among formal parameters • Transitive closure is applied to the dependence matrix of local variables • Checking for connectivity through global variables: A PARAM edge is generated from formal variable node F1 to formal variable node F2 by traversing the entire graph only when • F1 has a value flow path to a global variable node AND • F2 has a value flow path from a global variable node.

  27. Context-Insensitive, Flow-Sensitive Activity Analysis (ICFGAA) • Interprocedural Control Flow Graph (ICFG) • Iterative data-flow analysis (DFA) • Two separate DFAs: • Forward for “varied” variables • Backward for “useful” variables • Long run time • Large number of iterations • Nonseparability of activity analysis: data-flow analysis values depend on other data-flow values • Large overestimation • Due to context-insensitivity • Value propagation through unrealizable control paths

More Related