1 / 75

Linear Regions Are All You Need

Linear Regions Are All You Need. Matthew Fluet Cornell University Greg Morrisett & Amal Ahmed Harvard University. Memory Management. Dynamic allocation pervasive in computation. Memory Management. Dynamic allocation pervasive in computation Region-based Memory Management

noreen
Download Presentation

Linear Regions Are All You Need

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. Linear Regions Are All You Need Matthew Fluet Cornell University Greg Morrisett & Amal Ahmed Harvard University

  2. Memory Management • Dynamic allocation pervasive in computation

  3. Memory Management • Dynamic allocation pervasive in computation • Region-based Memory Management • Memory is divided into regions • Objects are individually allocated in a region • constant-time operation • All objects in a region are deallocated together • constant-time operation

  4. Application: Cyclone • Cyclone Safe-C Project • type-safety • with the “virtues” of C • low-level interface with manifest cost model • range of memory management options • regions are an organizing principle

  5. Cyclone: Regions

  6. Application: Cyclone • MediaNET • TCP benchmark (packet forwarding) • Cyclone v.0.1 (lexical regions & garbage collector) • High water mark: 840 KB • 130 collections • Basic throughput: 50 MB/s • Cyclone v.0.5 (unique pointers & dynamic regions) • High water mark: 8 KB • 0 collections • Basic throughput: 74MB/s

  7. Application: Cyclone • MediaNET • TCP benchmark (packet forwarding) • Cyclone v.0.1 (lexical regions & garbage collector) • High water mark: 840 KB • 130 collections • Basic throughput: 50 MB/s • Cyclone v.0.5 (unique pointers & dynamic regions) • High water mark: 8 KB • 0 collections • Basic throughput: 74MB/s

  8. Cyclone: Regions Proving type safety of Cyclone is a nightmare!!

  9. Cyclone: Regions Goal: simple model where we can easily encode the key features of Cyclone in a target language witha simpler type system.

  10. Cyclone: Regions Linear RegionsAre All You Need

  11. Outline • Introduction • Monadic Type System (FRGN) [ICFP’04] • Substructural Type System (lrgnUL) • Translation Sketch • Conclusion

  12. Monadic Type System for Regions [ICFP’04] • Extend the runST “trick” to nested regions [L-PJ ’94] • Polymorphic type system ensures safety • Key insights (FRGN): • Effects map to an indexed monadic type • Region subtyping witnessed by types • Sufficient for encoding Tofte-Talpin region calculusand “core” Cyclone region features

  13. RGN monad: Types • Monadic type RGNst computations in stack of regions s returning values of type t; a “stack” transformer

  14. RGN monad: Operations • Monadic unit and bind returnRGN :: 8s,a. a!RGNsa thenRGN :: 8s,a,b. RGNsa! (a!RGNsb) !RGNsb

  15. RGN monad: Operations • Monadic unit and bind returnRGN :: 8s,a. a!RGNsa thenRGN :: 8s,a,b. RGNsa! (a!RGNsb) !RGNsb

  16. RGN monad: Operations • Monadic unit and bind returnRGN :: 8s,a. a!RGNsa thenRGN :: 8s,a,b. RGNsa! (a!RGNsb) !RGNsb

  17. RGN monad: Types • Reference type Refst values of type t allocated in region at the top of the stack of regions s

  18. RGN monad: Operations • Create and read region allocated values new :: 8s,a. a!RGNs (Refsa) read :: 8s,a. Refsa!RGNsa

  19. RGN monad: Operations • Create and read region allocated values new :: 8s,a. a!RGNs (Refsa) read :: 8s,a. Refsa!RGNsa

  20. RGN monad: Encapsulation • Encapsulate and run a monadic computation runRGN :: 8a. (8s. RGNsa) !a

  21. RGN monad: Encapsulation • Encapsulate and run a monadic computation runRGN :: 8a. (8s. RGNsa) !a

  22. RGN monad: Encapsulation • Encapsulate and run a monadic computation runRGN :: 8a. (8s. RGNsa) !a “for all stacks” )no assumptions about stack of regions

  23. RGN monad: Encapsulation • Encapsulate and run a monadic computation runRGN :: 8a. (8s. RGNsa) !a “for all stacks” )no assumptions about stack of regions

  24. RGN monad: Encapsulation • Encapsulate and run a monadic computation runRGN :: 8a. (8s. RGNsa) !a result is independent of stack )s62 frv(a) )region values don’t escape “for all stacks” )no assumptions about stack of regions

  25. RGN monad: Example runRGN ( Ls1. do a Ãnew [s1] 1 c ÃrunRGN ( Ls2. do b Ãnew [s2] 7 … z = … new [s1] z ) … c … ) r1

  26. RGN monad: Example runRGN ( Ls1. do a Ãnew [s1] 1 c ÃrunRGN ( Ls2. do b Ãnew [s2] 7 … z = … new [s1] z ) … c … ) r1 a : 1 inputallocated in first region

  27. RGN monad: Example runRGN ( Ls1. do a Ãnew [s1] 1 c ÃrunRGN ( Ls2. do b Ãnew [s2] 7 … z = … new [s1] z ) … c … ) r2 r1 a : 1 input allocated in first region

  28. RGN monad: Example temporary allocated in second region runRGN ( Ls1. do a Ãnew [s1] 1 c ÃrunRGN ( Ls2. do b Ãnew [s2] 7 … z = … new [s1] z ) … c … ) r2 b : 7 r1 a : 1 inputallocated in first region

  29. RGN monad: Example temporary allocated in second region runRGN ( Ls1. do a Ãnew [s1] 1 c ÃrunRGN ( Ls2. do b Ãnew [s2] 7 … z = … new [s1] z ) … c … ) r2 b : 7 r1 a : 1 input and outputallocated in first region c : 8

  30. RGN monad: Example temporary allocated in second region runRGN ( Ls1. do a Ãnew [s1] 1 c ÃrunRGN ( Ls2. do b Ãnew [s2] 7 … z = … new [s1] z ) … c … ) r1 a : 1 input and outputallocated in first region c : 8

  31. RGN monad: Example runRGN ( Ls1. do a Ãnew [s1] 1 c ÃrunRGN ( Ls2. do b Ãnew [s2] 7 … z = … new [s1] z ) … c … ) allocating in younger region requires RGNs2t type allocating in older region requires RGNs1t type

  32. RGN monad: Witnesses • Witness type Pf(s1·s2) – type-level proof that the stack of regions s1 is a substack of the stack of regions s2

  33. RGN monad: Witnesses • Witness operations coerceRGN :: 8s1,s2,a. Pf(s1·s2) !RGNs1a!RGNs2a transSub :: 8s1,s2,s3. Pf(s1·s2) !Pf(s2·s3) ! Pf(s1·s3)

  34. RGN monad: Regions • Regions are created and destroyedwith a lexically scoped construct letRGN :: 8s1,a. (8s2. Pf(s1·s2) !RGNs2a) !RGNs1a

  35. RGN monad: Regions • Regions are created and destroyedwith a lexically scoped construct letRGN :: 8s1,a. (8s2. Pf(s1·s2) !RGNs2a) !RGNs1a

  36. RGN monad: Example letRGN ( Ls1. lpf1. do a Ãnew [s1] 1 c ÃletRGN ( Ls2. lpf2. do b Ãnew [s2] 7 … z = … coerceRgn pf (new [s1] z )) … c … ) r2 b : 7 r1 a : 1 c : 8

  37. Limitations of LIFO Regions • Lexical scope is ill-suited for • iterative computations • Conway’s Game of Life; copying GC • CPS-based computations • event-based computations

  38. Limitations of LIFO Regions • Lexical scope is ill-suited for • iterative computations • Conway’s Game of Life; copying GC • CPS-based computations • event-based computations • But, lexical scope was ensuring that the stack of regions was used in a single-threaded manner

  39. Substructural Type Systems • Provide core mechanisms to restrict the number and order of uses of data and operations • generalization of linear type systems

  40. Substructural Type System: lUL • Qualifiers q ::= UjL • PreTypes t::= 1jt1£t2jt1!t2 j8a.tj9a.t • Types t::= qt

  41. Substructural Type System: lUL • Qualifiers q ::= UjL • PreTypes t::= 1jt1£t2jt1!t2 j8a.tj9a.t • Types t::= qt How maythe value be used?

  42. Substructural Type System: lUL • Qualifiers q ::= UjL • PreTypes t::= 1jt1£t2jt1!t2 j8a.tj9a.t • Types t::= qt How often maythe value be used? How maythe value be used?

  43. Substructural Qualifiers Linear must be “used” exactly once Unrestricted DropCopy may be “used” an arbitrary # of times

  44. Substructural Type System for Regions • Provide core mechanisms to restrict the number and order of uses of data and operations • generalization of linear type systems • Key insights (lrgnUL): • Separate region names from region liveness • Region liveness witnessed by types • Sufficient for encoding FRGN calculusand “advanced” Cyclone region features

  45. lrgnUL = lUL + Regions • PreTypes t::= … jcaprjrefrtj8r.tj9r.t “capability” for region r;mediates all access to a regionfor allocating, reading, and writing

  46. lrgnUL: Region Primitives • Regions are created and destroyedwith separate operations newrgn :: U1 ! (9r. Lcapr) freergn :: 8r. (Lcapr!U1)

  47. lrgnUL: Region Primitives • Regions are created and destroyedwith separate operations newrgn :: U1 ! (9r. Lcapr) freergn :: 8r. (Lcapr!U1) Produces a capability. Consumes a capability.

  48. lrgnUL: Region Primitives • Regions are created and destroyedwith separate operations newrgn :: U1! (9r. Lcapr) freergn :: 8r. (Lcapr!U1)

  49. lrgnUL: Region Primitives new :: 8r,a. ((Lcapr£Ua) !(Lcapr£Urefr Ua)) read :: 8r,a. ((Lcapr£Urefr Ua) ! (Lcapr£Ua))

  50. lrgnUL: Region Primitives new :: 8r,a. ((Lcapr£Ua) !(Lcapr£Urefr Ua)) read :: 8r,a. ((Lcapr£Urefr Ua) ! (Lcapr£Ua)) Requires a capability. Returns a capability.

More Related