a different kind of functional language
play

A different kind of functional language John Reppy University of - PowerPoint PPT Presentation

A different kind of functional language John Reppy University of Chicago / NSF November 2012 Parallel languages research I Manticore: Parallel SML (PML) I Nesl/GPU I Diderot Joint work with Gordon Kindlmann, Charisee Chiw, Lamont Samuels, Nick


  1. A different kind of functional language John Reppy University of Chicago / NSF November 2012

  2. Parallel languages research I Manticore: Parallel SML (PML) I Nesl/GPU I Diderot Joint work with Gordon Kindlmann, Charisee Chiw, Lamont Samuels, Nick Seltzer. November 2012 WG 2.8 — Diderot 2

  3. Image analysis Why image analysis is important Imaging Visualization Analysis Physical object Image data Computational representation I Scientists need software tools to extract structure from many kinds of image data. I Creating new analysis/visualization programs is part of the experimental process. I The challenge of getting knowledge from image data is getting harder. November 2012 WG 2.8 — Diderot 4

  4. Image analysis Image analysis and visualization I We are interested in a class of algorithms that compute geometric properties of objects from imaging data. I These algorithms compute over a continuous tensor field F (and its derivatives), which are reconstructed from discrete data using a separable convolution kernel h : F = V ~ h ⊛ h V F Discrete image data Continuous field November 2012 WG 2.8 — Diderot 5

  5. Image analysis Image analysis and visualization Example applications include I Direct volume rendering (requires reconstruction, derivatives). I Fiber tractography (requires tensor fields). I Particle systems (requires dynamic numbers of computational elements). These applications have a common algorithmic structure: large number of (mostly) independent computations. November 2012 WG 2.8 — Diderot 6

  6. Image analysis Image analysis and visualization Example applications include I Direct volume rendering (requires reconstruction, derivatives). I Fiber tractography (requires tensor fields). I Particle systems (requires dynamic numbers of computational elements). These applications have a common algorithmic structure: large number of (mostly) independent computations. November 2012 WG 2.8 — Diderot 6

  7. Image analysis Image analysis and visualization Example applications include I Direct volume rendering (requires reconstruction, derivatives). I Fiber tractography (requires tensor fields). I Particle systems (requires dynamic numbers of computational elements). These applications have a common algorithmic structure: large number of (mostly) independent computations. November 2012 WG 2.8 — Diderot 6

  8. Image analysis Image analysis and visualization Example applications include I Direct volume rendering (requires reconstruction, derivatives). I Fiber tractography (requires tensor fields). I Particle systems (requires dynamic numbers of computational elements). These applications have a common algorithmic structure: large number of (mostly) independent computations. November 2012 WG 2.8 — Diderot 6

  9. Diderot Diderot Diderot is a parallel DSL for image analysis and visualization algorithms. Its design models the algorithmic structure of its application domain: independent strands computing over continuous tensor fields. A DSL approach provides I Improve programmability by supporting a high-level mathematical programming notation. I Improve performance by supporting efficient execution; especially on parallel platforms. November 2012 WG 2.8 — Diderot 7

  10. Diderot Diderot parallelism model Bulk-synchronous parallel with “deterministic” semantics. new execution step stabilize global computation strand state update die idle read global computation spawn strands November 2012 WG 2.8 — Diderot 8

  11. Diderot Diderot program structure Square roots of integers using Heron’s method. // global definitions input int N = 1000; Globals are immutable , and are input real eps = 0.000001; used for program inputs and other shared globals. // strand definition strand SqRoot ( real val) { output real root = val; update { root = (root + val/root) / 2.0; if (|rootˆ2 - val|/val < eps) stabilize ; } } // initialization initially [ SqRoot( real (i)) | i in 1..N ] November 2012 WG 2.8 — Diderot 9

  12. Diderot Diderot program structure Square roots of integers using Heron’s method. // global definitions input int N = 1000; input real eps = 0.000001; Strands are the // strand definition elements of a bulk strand SqRoot ( real val) synchronous { computation. output real root = val; update { root = (root + val/root) / 2.0; if (|rootˆ2 - val|/val < eps) stabilize ; } } // initialization initially [ SqRoot( real (i)) | i in 1..N ] November 2012 WG 2.8 — Diderot 9

  13. Diderot Diderot program structure Square roots of integers using Heron’s method. // global definitions input int N = 1000; Strands have parameters that are input real eps = 0.000001; used to initialize them. // strand definition strand SqRoot ( real val) { output real root = val; Strands have state , which update { includes outputs. root = (root + val/root) / 2.0; if (|rootˆ2 - val|/val < eps) stabilize ; } } // initialization initially [ SqRoot( real (i)) | i in 1..N ] November 2012 WG 2.8 — Diderot 9

  14. Diderot Diderot program structure Square roots of integers using Heron’s method. // global definitions Strands have an update method input int N = 1000; that is invoked each super step. input real eps = 0.000001; // strand definition strand SqRoot ( real val) { output real root = val; update { root = (root + val/root) / 2.0; if (|rootˆ2 - val|/val < eps) stabilize ; } } // initialization initially [ SqRoot( real (i)) | i in 1..N ] November 2012 WG 2.8 — Diderot 9

  15. Diderot Diderot program structure Square roots of integers using Heron’s method. // global definitions Strands have an update method input int N = 1000; that is invoked each super step. input real eps = 0.000001; // strand definition strand SqRoot ( real val) { output real root = val; update { root = (root + val/root) / 2.0; if (|rootˆ2 - val|/val < eps) stabilize ; } Strands can stabilize or die } during the computation. // initialization initially [ SqRoot( real (i)) | i in 1..N ] November 2012 WG 2.8 — Diderot 9

  16. Diderot Diderot program structure Square roots of integers using Heron’s method. // global definitions input int N = 1000; input real eps = 0.000001; The initial collection of strands is created using comprehension notation . // strand definition strand SqRoot ( real val) { output real root = val; update { root = (root + val/root) / 2.0; if (|rootˆ2 - val|/val < eps) stabilize ; } } // initialization initially [ SqRoot( real (i)) | i in 1..N ] November 2012 WG 2.8 — Diderot 9

  17. Diderot Programmability: from whiteboard to code vec3 grad = - r F(pos); vec3 norm = normalize(grad); tensor [3,3] H = r ⌦ r F(pos); tensor [3,3] P = identity [3] - norm ⌦ norm; tensor [3,3] G = -(P • H • P)/|grad|; real disc = sqrt(2.0*|G|ˆ2 - trace(G)ˆ2); real k1 = (trace(G) + disc)/2.0; real k2 = (trace(G) - disc)/2.0; November 2012 WG 2.8 — Diderot 10

  18. Diderot Example — Curvature field# 2(3)[] F = bspln3 ~ image ("quad-patches.nrrd"); field# 0(2)[3] RGB = tent ~ image ("2d-bow.nrrd"); k2 (1,1) · · · strand RayCast ( int ui, int vi) { · · · update { k1 · · · vec3 grad = - r F(pos); vec3 norm = normalize(grad); tensor [3,3] H = r ⌦ r F(pos); tensor [3,3] P = identity [3] - norm ⌦ norm; (-1,-1) tensor [3,3] G = -(P • H • P)/|grad|; real disc = sqrt(2.0*|G|ˆ2 - trace(G)ˆ2); real k1 = (trace(G) + disc)/2.0; real k2 = (trace(G) - disc)/2.0; vec3 matRGB = // material RGBA RGB([max(-1.0, min(1.0, 6.0*k1)), max(-1.0, min(1.0, 6.0*k2))]); · · · } · · · } November 2012 WG 2.8 — Diderot 11

  19. Diderot Example — 2D Isosurface int stepsMax = 10; · · · strand sample ( int ui, int vi) { output vec2 pos = · · · ; // set isovalue to closest of 50, 30, or 10 real isoval = 50.0 if F(pos) >= 40.0 else 30.0 if F(pos) >= 20.0 else 10.0; int steps = 0; update { if (inside(pos, F) && steps <= stepsMax) { // delta = Newton-Raphson step vec2 delta = normalize( r F(pos)) * (F(pos) - isoval)/| r F(pos)|; if (|delta| < epsilon) stabilize ; pos = pos - delta; steps = steps + 1; } else die ; } } November 2012 WG 2.8 — Diderot 12

  20. Implementation issues Fields I Fields are functions from < d to tensors. levels of continuity field# k ( d )[ d 1 , . . . , d n ] dimension of domain shape of range where k � 0, d > 0, and the d i > 1. I Diderot provides higher-order operations on fields: r , r⌦ , etc. . I Diderot also lifts tensor operations to work on fields ( e.g. , + ). November 2012 WG 2.8 — Diderot 13

  21. Implementation issues Applying tensor fields A field application F ( x ) gets compiled down into code that maps the world-space coordinates to image space and then convolves the image values in the neighborhood of the position. ⊛ h V F n x M − 1 Discrete image data Continuous field In 2D, the reconstruction is s s X X F ( x ) = V [ n + h i , j i ] h ( f x � i ) h ( f y � j ) i = 1 � s j = 1 � s where s is the support of h , n = b M � 1 x c and f = M � 1 x � n . November 2012 WG 2.8 — Diderot 14

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend