1 / 26

Intel Concurrent Collections (for Haskell)

Intel Concurrent Collections (for Haskell). Ryan Newton, Chih -Ping Chen, Simon Marlow Software and Services Group Jul 27, 2010. Haskell means functions. As in Math… Replacing a function call with its result is safe. f(x ) = g(x ) + 1 g(y ) = 2* y. (i.e. referential transparency).

arnie
Download Presentation

Intel Concurrent Collections (for Haskell)

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. IntelConcurrent Collections (for Haskell) Ryan Newton, Chih-Ping Chen, Simon Marlow Software and Services Group Jul 27, 2010

  2. Haskell means functions • As in Math… • Replacing a function call with its result is safe. f(x) = g(x) + 1 g(y) = 2*y (i.e. referential transparency) f(3) = g(3)+1 = 2*3+1 = 7 Benefit: determinism everywhere

  3. Parallelism in Haskell • Annotate expressions that (maybe) should run in parallel These are HINTS to the compiler/runtime. f(x) = g(x)`par` h(x)

  4. Parallelism in Haskell #2 • Haskell is imperative also! • (But that part is segregated from the functional bits.) • IO Threads and Channels: do action.. writeChancmsg action.. doaction.. readChanc action.. This form of message passing sacrifices determinism.Let’s try CnC instead…

  5. Parallelism in Haskell #2 • IO Threads and Channels: • Steps, Items, and Tags do action.. writeChancmsg action.. Step1 doaction.. readChanc action.. Step2 This form of message passing sacrifices determinism.Let’s try CnC instead…

  6. Haskell / CnC Synergies • Also, Haskell CnC is a fun experiment. • We can try things like idempotent work stealing! • Most imperative threading packages don’t support that. • Can we learn things to bring back to other CnC’s?

  7. How is CnC Purely Functional? Every function maps a set (domain) to a set (range): Domain Range

  8. How is CnC Purely Functional? A set of tag/item collections A complete CnCEval Domain Range

  9. An individual “step” is a function too Updates(new tags, items) MyStep Domain Range

  10. How is CnC called from Haskell? • Haskell is LAZY (functions eval arguments only on demand) • To control par. eval granularity Haskell CnC is mostly eager. • When the result of a CnC graph is needed, the whole graph executes, in parallel, to completion. Forkworkers Par exec. Need result! Recv. result

  11. A complete CnC program in Haskell myStep items tag =doword1 <- get items "left"     word2 <- get items "right"put items "result" (word1 ++ word2 ++ show tag)cncGraph =dotags <- newTagColitems <- newItemColprescribe tags (myStep items)initialize$doput items "left" "Hello "put items "right" "World "putt tags 99finalize$doget items "result"main = putStrLn (runGraph cncGraph)

  12. Initial Results

  13. Prelude: Haskell is (kinda) fast “The Great Language Shootout”

  14. Prelude: Haskell is (kinda) fast

  15. I will show you graphs like this:

  16. Current Implementation(s) Thread per step instance. • IO based and Func. impl. • Lots of fun with schedulers! • Lightweight user threads (3) • Global work queue (4,5,6,7,10) • Continuations + Work stealing (10,11) • Haskell “spark” work stealing (8,9) • (Mechanism used by ‘par’) Step(2) Step(1) Step(0) … thr1 thr2 thr3 wrkr1 wrkr1 wrkr2 wrkr3 wrkr2 Globalworkpool Per-threadwork deques

  17. Back to graphs…

  18. Recent Results

  19. Recent Results

  20. Recent Results

  21. Conclusions from early prototype • Lightweight user threads (3) simple, predictable, but too much overhead • Global work queue (4,5,6,7,10) better scaling than expected • Work stealing (11) will win in the end, need good deques • Using Haskell “spark” work stealing (8,9) a flop (for now) No clear scheduler winners! CnC mantra - separate tuning (including scheduler selection) from application semantics.

  22. Begin:Future Work Section

  23. Future Work, Haskell CnC Specific • GHC needs a scalable garbage collector (in progress) • Much incremental scheduler improvement left. • Need more detailed profiling and better understanding of variance • Lazy evaluation and a complex runtime are a challenge!

  24. Moving forward, radical optimization • Today CnC is mostly “WYSIWYG” • A step becomes a task (but we can control the scheduler) • User is responsible for granularity • Typical of dynamically scheduled parallelism • CnC is moving to a point where profiling and graph analysis enable significant transformations. • Implemented currently: Hybrid static/dynamic scheduling • Prune space of schedules / granularity choices offline • Future: efficient selection of data structures for collections (next slide) • Vectors (dense) vs. Hashmaps (sparse) • Concurrent vs. nonconcurrent data structures

  25. Tag functions: data access analysis • How nice -- a declarative specification of data access!(mystep: i) <- [mydata: i-1], [mydata: i], [mydata: i+1] • Much less pain than traditional loop index analysis • Use this to: • Check program for correctness. • Analyze density, convert data structures • Generate precise garbage collection strategies • Extreme: full understanding of data deps. can replace control dependencies

More Related