1 / 132

CMPUT680 - Winter 2006

CMPUT680 - Winter 2006. Topic Q: Binary Decision Diagrams José Nelson Amaral http://www.cs.ualberta.ca/~amaral/courses/680. Reading Material.

zasha
Télécharger la présentation

CMPUT680 - Winter 2006

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. CMPUT680 - Winter 2006 Topic Q: Binary Decision Diagrams José Nelson Amaral http://www.cs.ualberta.ca/~amaral/courses/680 CMPUT 680 - Compiler Design and Optimization

  2. Reading Material • Michael Huth and Mark Ryan, Logic in Computer Science: Modelling and Reasoning about Systems, 2nd Edition, Cambridge University Press, 2005 (Chapter 6). CMPUT 680 - Compiler Design and Optimization

  3. f(x,y) = x+y x y y 0 0 1 0 Binary Decision Tree Boolean Function Binary Decision Tree Truth Table CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 361

  4. x y y y 0 0 0 1 0 1 Binary Decision Tree Binary Decision Diagram x Removal of duplicate terminals. y Binary Decision Tree Binary Decision Diagram CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 362

  5. x y y y 0 0 1 1 Binary Decision Tree Binary Decision Diagram x Removal of redundant tests. Binary Decision Diagram Binary Decision Diagram CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 362

  6. z z x x x x y y y y y y y 1 1 0 0 Removal of duplicate non-terminals CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 363

  7. z x x y y y y 1 1 0 0 Removal of duplicate non-terminals z x x y CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 363

  8. z x y y 1 1 0 0 Removal of redundant decision point z x x y y CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 363

  9. Reduced BDDs • We saw three optimizations that can be performed in BDDs: • C1: Removal of duplicate terminals • C2: Removal of redundant tests • C3: Removal of duplicate non-terminals • If none of these optimizations can be applied to a BDD, the BDD is reduced. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 365

  10. Boolean Operations on BDDs • Given two BDDs Bf and Bg representing boolean functions f and g, how do we obtain a BDD for the following functions: • f • f + g • f · g CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 365

  11. Ordered BDDs • Let L = [x1, … xn] be an ordered list of variables without duplications. • A BDD B is ordered for L if • all variable labels of B occur in L; and • for every occurrence of xi followed by xj along a path in B, i < j. • An ordered BDD (OBDD) is a BDD that is ordered according to some list of variables. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 367

  12. 1 0 Example of a BDD that is not ordered z y x x y CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 368

  13. OBDDs • There cannot be multiple occurrences of any variable along a path in an OBDD. • When operations are performed on two OBDDs, they must have compatible variable ordering. • The reduced OBDD representing a given function fis unique OBDDs have a canonical form. • We can apply C1-C3 in any order. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 368

  14. x3 x4 x3 x4 0 1 OBDDs can be compact x1 x2 x2 The function feven(x1, x2, …, xn) which is 1 if there is an even number of inputs with value 1 has an OBDD representation with only 2n+1 nodes. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 370

  15. Exercise Build a reduced OBDD for the following boolean function: f(x1, x2, …, xn) = (x1+x2).(x3 + x4)….(x2n-1 + x2n); Try to select a variable ordering that minimizes the number of nodes in the OBDD. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 371

  16. x1 x3 x3 x5 x5 x5 x5 x2 x4 x2 x4 x2 x2 x6 1 0 Impact of Variable Ordering x1 x2 x3 x4 x5 x6 0 1 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 371

  17. Importance of Canonical Representation • Absence of redundant variables: • If f(x1, x2, …, xn) does not depend on xi, then any reduced OBDD of f does not contain xi. • Test for semantic equivalence: • If f(x1, x2, …, xn) and g(x1, x2, …, xn) are represented by OBDDs Bf and Bg, then to find if f and g are equivalent, reduce Bf and Bgand check if they have identical structures. • Text for validity: • f(x1, x2, …, xn) is valid (always computes 1) if its reduced OBDD is B1. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 370

  18. Importance of Canonical Representation • Test for implication: • f(x1, x2, …, xn) implies g(x1, x2, …, xn) if the OBDD for f . /g is B0. • Test for satisfiability: • f(x1, x2, …, xn) is satisfiable (computes 1 for at list one input) if its reduced OBDD is not B0. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 372

  19. The reduce algorithm • Step 1: Label each node in the OBDD • two nodes receive the same id if and only if they represent the same function. • Step 2: Traverse the OBDD bottom up • collapse all nodes with the same label onto a single node and redirect the edges. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 372

  20. The reduce algorithm • Step 1:Label • Initialization: Assign (at bottom of BDD): • label #0 to all 0-nodes; • label #1 to all 1-nodes; • Let: • lo(n): node pointed by the dashed line from node n • hi(n): node pointed by the solid line. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 372

  21. The reduce algorithm • Step 1:Label • Rules to label an internal xi-node n : • ifid(lo(n)) = id(hi(n))then id(n) = id(lo(n)); • else if there is another node m such that: • m has variable xiand • id(lo(n)) = id(lo(m))and • id(hi(n)) = id(hi(m)) • then id(n) = id(m) • elseid(n) = next unused integer. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 373

  22. The reduce algorithm(example) Rules to label an internal xi-node n : • ifid(lo(n)) = id(hi(n))then id(n) = id(lo(n)); • else if there is another node m such that: • m has variable xiand • id(lo(n)) = id(lo(m))and • id(hi(n)) = id(hi(m)) • then id(n) = id(m) • elseid(n) = next unused integer. x1 x2 x2 x3 x3 x3 x3 ? ? ? ? 0 1 0 1 #0 #1 #0 #1 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 373

  23. The reduce algorithm(example) Rules to label an internal xi-node n : • ifid(lo(n)) = id(hi(n))then id(n) = id(lo(n)); • else if there is another node m such that: • m has variable xiand • id(lo(n)) = id(lo(m))and • id(hi(n)) = id(hi(m)) • then id(n) = id(m) • elseid(n) = next unused integer. x1 x2 x2 ? ? x3 x3 x3 x3 #2 #2 #2 #3 0 1 0 1 #0 #1 #0 #1 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 373

  24. The reduce algorithm(example) Rules to label an internal xi-node n : • ifid(lo(n)) = id(hi(n))then id(n) = id(lo(n)); • else if there is another node m such that: • m has variable xiand • id(lo(n)) = id(hi(m))and • id(hi(n)) = id(hi(m)) • then id(n) = id(m) • elseid(n) = next unused integer. x1 ? x2 x2 #2 #4 x3 x3 x3 x3 #2 #2 #2 #3 0 1 0 1 #0 #1 #0 #1 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 373

  25. The reduce algorithm(example) Rules to label an internal xi-node n : • ifid(lo(n)) = id(hi(n))then id(n) = id(lo(n)); • else if there is another node m such that: • m has variable xiand • id(lo(n)) = id(lo(m))and • id(hi(n)) = id(hi(m)) • then id(n) = id(m) • elseid(n) = next unused integer. x1 #5 x2 x2 #2 #4 x3 x3 x3 x3 #2 #2 #2 #3 0 1 0 1 #0 #1 #0 #1 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 373

  26. x1 x2 x3 x3 1 0 The reduce algorithm(example) #5 x1 #5 x2 x2 #2 #4 #4 x3 x3 x3 x3 #2 #3 #2 #2 #2 #3 0 1 0 1 #0 #1 #0 #1 #1 #0 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 373

  27. The apply algorithm • Implement operations on boolean functions such as +, , , and complement. • Let f and g be represented by OBDDs Bf and Bg. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 373

  28. The apply algorithm • Let v be the highest variable in Bf or Bg. • Split the problem into two sub-problems, for v = 0 and for v = 1, and solve recursively. • At the leaves, apply the Boolean operation directly. CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 374

  29. The apply algorithm • f[0/x] and f[1/x] are restrictions of f. • f[0/x] is obtained by replacing x in f by 0. • For all functions f and all variables x: f  x  f[0/x] + x  f[1/x] CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 374

  30. The apply algorithm(Shannon expansion) f op g = xi (f[0/xi] op g[0/xi]) + xi (f[1/xi] op g[1/xi]) Let Bfand Bg be the OBDDs of f and g, we want to compute Bf op g Let rfand rg be the root node of Bf and Bg CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 374

  31. The apply algorithm • ifrf and rg are terminals with labels lf and lg, then compute lfop lg (the result is B0 or B1). • ifrf and rg are xi-nodes, then create an xi-node n with • a dashed line to apply(op, lo(rf), lo(rg)) • a solid line to apply(op, hi(rf), hi(rg)) • ifrf is an xi-nodes and (rg is a terminal node or (rj is an xj-node andj>i)) then create an xi-node n with: • A dashed line to apply(op, lo(rf), rg) • A solid line to apply(op, hi(rf), rg) CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 374

  32. A(R1,S1) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 S1 A(R1,S1) R2 + R3 S2 R4 S3 R5 R6 S4 S5 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  33. A(R1,S1) = T1 A(R2,S3) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 R2 A(R2,S3) A(R3,S2) + R3 S2 R4 S3 R5 R6 S4 S5 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  34. A(R1,S1) = T1 A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x2 R2 T2 A(R3,S2) + R3 S2 A(R4,S3) A(R3,S3) R4 S3 R5 R6 S4 S5 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  35. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R5,S4) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x2 R2 T2 A(R3,S2) + R3 S2 x4 A(R3,S3) T3 R4 S3 A(R5,S4) A(R6,S5) R5 R6 S4 S5 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  36. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R6,S5) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x2 R2 T2 A(R3,S2) + R3 S2 x4 A(R3,S3) T3 R4 S3 0 T4 A(R6,S5) R5 R6 S4 S5 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  37. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x2 R2 T2 A(R3,S2) + R3 S2 x4 A(R3,S3) T3 R4 S3 0 1 T4 T5 R5 R6 S4 S5 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  38. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R4,S3) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x2 R2 T2 A(R3,S2) + R3 S2 T6 x4 x3 T3 R4 S3 0 1 T4 T5 A(R4,S3) A(R6,S3) R5 R6 S4 S5 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  39. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x2 R2 T2 A(R3,S2) + R3 S2 T6 x4 x3 T3 R4 S3 0 1 T4 T5 A(R6,S3) R5 R6 S4 S5 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  40. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = T7 A(R6,S4) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x2 R2 T2 A(R3,S2) + R3 S2 T6 x4 x3 T3 R4 S3 0 1 x4 T4 T5 T7 R5 R6 S4 S5 A(R6,S4) A(R6,S5) CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  41. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = T7 A(R6,S5) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x2 R2 T2 A(R3,S2) + R3 S2 T6 x4 x3 T3 R4 S3 0 1 x4 T4 T5 T7 R5 R6 S4 S5 A(R6,S5) 1 T8 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  42. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = T7 A(R3,S2) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x2 R2 T2 A(R3,S2) + R3 S2 T6 x4 x3 T3 R4 S3 0 1 x4 T4 T5 T7 R5 R6 S4 S5 1 1 T8 T9 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  43. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = T7 A(R3,S2) = T10 A(R4,S3) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x3 x2 T10 R2 T2 + A(R4,S3) A(R6,S5) R3 S2 T6 x4 x3 T3 R4 S3 0 1 x4 T4 T5 T7 R5 R6 S4 S5 1 1 T8 T9 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  44. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = T7 A(R3,S2) = T10 A(R6,S5) = ? x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x3 x2 T10 R2 T2 + A(R6,S5) R3 S2 T6 x4 x3 T3 R4 S3 0 1 x4 T4 T5 T7 R5 R6 S4 S5 1 1 T8 T9 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  45. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = T7 A(R3,S2) = T10 x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x3 x2 T10 R2 T2 + 1 #1 R3 S2 T6 x4 x3 T3 R4 S3 0 1 x4 T4 T5 T7 R5 R6 S4 S5 1 1 T8 T9 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  46. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = T7 A(R3,S2) = T10 x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x3 x2 T10 R2 T2 + 1 #1 R3 S2 T6 x4 x3 T3 R4 S3 0 1 x4 #1 #0 ? T7 R5 R6 S4 S5 1 1 #1 #1 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  47. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = T7 A(R3,S2) = T10 x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x3 x2 T10 R2 T2 + 1 #1 R3 S2 T6 ? x4 x3 T3 R4 S3 0 1 x4 #1 #0 #1 R5 R6 S4 S5 1 1 #1 #1 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  48. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = T7 A(R3,S2) = T10 x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x3 x2 T10 R2 T2 + 1 #1 R3 S2 T6 x4 x3 ? #2 R4 S3 0 1 x4 #1 #0 #1 R5 R6 S4 S5 1 1 #1 #1 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  49. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = T7 A(R3,S2) = T10 x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x3 x2 T10 R2 ? T2 + 1 #1 R3 S2 #3 x4 x3 #2 R4 S3 0 1 x4 #1 #0 #1 R5 R6 S4 S5 1 1 #1 #1 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

  50. A(R1,S1) = T1 A(R2,S3) = T2 A(R4,S3) = T3 A(R3,S3) = T6 A(R6,S3) = T7 A(R3,S2) = T10 x1 x1 x2 x3 x3 x4 x4 1 1 0 0 The apply algorithm(example) R1 x1 S1 T1 x3 x2 ? T10 R2 #4 + 1 #1 R3 S2 #3 x4 x3 #2 R4 S3 0 1 x4 #1 #0 #1 R5 R6 S4 S5 1 1 #1 #1 CMPUT 680 - Compiler Design and Optimization Huth-Ryan, pp. 375

More Related