Overview Implicit Parallelism Programming Languages References
Multi-core Programming: Implicit Parallelism
Tuukka Haapasalo April 16, 2009
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Multi-core Programming: Implicit Parallelism Tuukka Haapasalo April - - PowerPoint PPT Presentation
Overview Implicit Parallelism Programming Languages References Multi-core Programming: Implicit Parallelism Tuukka Haapasalo April 16, 2009 Tuukka Haapasalo Multi-core Programming: Implicit Parallelism Overview Implicit Parallelism
Overview Implicit Parallelism Programming Languages References
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References General Concepts Examples
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References General Concepts Examples
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References General Concepts Examples
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References General Concepts Examples
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References General Concepts Examples
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Futures Evaluation Strategies
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Futures Evaluation Strategies
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Futures Evaluation Strategies
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Futures Evaluation Strategies
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Futures Evaluation Strategies
void showSearch(final String target) throws InterruptedException { Future<String> future = executor.submit(new Callable<String>() { public String call() { return searcher.search(target); }}); displayOtherThings(); // do other things while searching try { displayText(future.get()); // use future } catch (ExecutionException ex) { cleanup(); return; } }
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Futures Evaluation Strategies
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Futures Evaluation Strategies
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
main = print (quicksort ([999,998..0]::[Int])) quicksort [] = [] quicksort [x] = [x] quicksort (x:xs) = (lo ++ (x:hi)) where lo = quicksort [ y | y <- xs, y < x] hi = quicksort [ y | y <- xs, y >= x]
import Strategies main = print (quicksort ([999,998..0]::[Int])) quicksort [] = [] quicksort [x] = [x] quicksort (x:xs) = (lo ++ (x:hi)) ‘using‘ strategy where lo = quicksort [ y | y <- xs, y < x] hi = quicksort [ y | y <- xs, y >= x] strategy result = rnf lo ‘par‘ rnf hi ‘par‘ rnf result Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Fortress Code in ASCII for i <- 1#3000 do delta_X = random(2.0) - 1 delta_Y = random(2.0) - 1 rsq = delta_X^2 + delta_Y^2 if 0 < rsq < 1 then y1 = tableHeight random(1.0) y2 = y1 + nLen(delta_Y / sqrt(rsq)) (y_L, y_H) = (y1 MIN y2, y1 MAX y2) if ceiling(y_L/nLen) = floor(y_H/nLen) then atomic do hits += 1.0 end end atomic do n += 1.0 end end end Rendered Fortress Code for i ← 1#3000 do δX = random(2.0) - 1 δY = random(2.0) - 1 rsq = δ2
X + δ2 Y
if 0 < rsq < 1 then y1 = tableHeight random(1.0) y2 = y1+nLen(δY /sqrt(rsq)) (yL, yH) = (y1 MIN y2, y1 MAX y2) if ceiling(yL/ nLen) = floor(yH/ nLen) then atomic do hits += 1.0 end end atomic do n += 1.0 end end end Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
nLen = 20 numRows = 10 tableHeight = nLen numRows run(args : String ...):() = do var hits : R64 := 0.0 var n : R64 := 0.0 for i ← 1#3000 do δX = random(2.0) - 1 δY = random(2.0) - 1 rsq = δ2
X + δ2 Y
if 0 < rsq < 1 then y1 = tableHeight random(1.0) y2 = y1+nLen(δY /sqrt(rsq)) (yL, yH) = (y1 MIN y2, y1 MAX y2) if ceiling(yL/ nLen) = floor(yH/ nLen) then atomic do hits += 1.0 end end atomic do n += 1.0 end end end probability = hits/n πest = 2.0/probability print("estimated Pi = ") println(πest) end Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
fun maxT (board, alpha, beta) = if gameOver(board) then Rose ((board, boardScore board), [||]) else let val ss = successors (board, X) val t0 = minT (ss!0, alpha, beta) val alpha’ = max (alpha, treeScore t0) fun loop i = if (i = (plen ss)) then [||] else let pval ts = loop (i+1) val ti = minT (ss!i, alpha’, beta) in if (treeScore ti) >= beta then [|ti|] (* prune *) else [|ti|] |@| ts end val ch = [|t0|] |@| loop(1) val maxScore = maxP [| treeScore t | t in ch |] in Rose ((board, maxScore), ch) end Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References Glasgow Parallel Haskell Fortress Manticore MultiLisp
(defun qsort (l) (qs l nil)) (defun qs (l rest) (if (null l) rest (let ((parts (partition (car l) (cdr l)))) (qs (left-part parts) (future (cons (car l) (qs (right-part parts) rest))))))) (defun partition (sep lst) (if (null lst) (bundle-parts nil nil) (let ((cdrparts (future partition sep (cdr lst)))) (if (> sep (car lst)) (bundle-parts (cons (car lst) (future (left-part cdrparts))) (future (right-part cdrparts))) (bundle-parts (future (left-part cdrparts)) (cons (car lst) (future (right-part cdrparts)))))))) (defun bundle-parts (x y) (cons x y)) (defun left-part (p) (car p)) (defun right-part (p) (cdr p)) Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References
[1]
Implicitely-threaded parallelism in Manticore. In Proceedings of the 13th ACM SIGPLAN International Conference on Functional Programming, pages 119–130, 2008. [2] Fortress Community. Project Fortress Community Wiki. http://projectfortress.sun.com/Projects/Community/wiki, referenced on 3.4.2009. [3] Fortress Community. The Fortress Language Specification. http: //projectfortress.sun.com/Projects/Community/browser/trunk/Specification/fortress.1.0.pdf, referenced on 15.4.2009. [4]
Multilisp: A language for concurrent symbolic computation. ACM Transactions on Programming Languages and Systems, 7(4):501–538, 1985. [5] Manticore Project Team. Manticore Project Pages. http://manticore.cs.uchicago.edu/, referenced on 15.4.2009. [6] Sun. Fortress Frequently Asked Questions. http://research.sun.com/projects/plrg/faq/index.html. Referenced on 3.4.2009. Tuukka Haapasalo Multi-core Programming: Implicit Parallelism
Overview Implicit Parallelism Programming Languages References
[7]
Algorithm + strategy = parallelism. Journal of Functional Programming, 8(1):23–60, 1998. [8] Wikipedia. Explicit parallelism. http://en.wikipedia.org/wiki/Explicit_parallelism. Referenced on 3.4.2009. [9] Wikipedia. Fortress (programming language). http://en.wikipedia.org/wiki/Fortress_(programming_language). Referenced on 3.4.2009. [10] Wikipedia. Implicit parallelism. http://en.wikipedia.org/wiki/Implicit_parallelism. Referenced on 3.4.2009. [11] Wikipedia. MultiLisp. http://en.wikipedia.org/wiki/MultiLisp. Referenced on 3.4.2009. Tuukka Haapasalo Multi-core Programming: Implicit Parallelism