1 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ PARALLEL ¡PATTERNS ¡ REDUCE ¡& ¡SCAN ¡
2 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ Programming ¡Pa7erns ¡For ¡Parallelism ¡ • Some ¡pa7erns ¡repeat ¡in ¡many ¡different ¡contexts ¡ • e.g. ¡Search ¡an ¡element ¡in ¡an ¡array ¡ • IdenKfying ¡such ¡pa7erns ¡important ¡ ¡ • Solve ¡a ¡problem ¡once ¡and ¡reuse ¡the ¡soluKon ¡ • Split ¡a ¡hard ¡problem ¡into ¡individual ¡problems ¡ • Helps ¡define ¡interfaces ¡
3 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ We ¡Have ¡Already ¡Seen ¡Some ¡Pa7erns ¡
4 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ We ¡Have ¡Already ¡Seen ¡Some ¡Pa7erns ¡ • Divide ¡and ¡Conquer ¡ • Split ¡a ¡problem ¡into ¡n ¡sub ¡problems ¡ • Recursively ¡solve ¡the ¡sub ¡problems ¡ • And ¡merge ¡the ¡soluKon ¡ • Data ¡Parallelism ¡ • Apply ¡the ¡same ¡funcKon ¡to ¡all ¡elements ¡in ¡a ¡collecKon, ¡array ¡ • Parallel.For, ¡Parallel.ForEach ¡ • Also ¡called ¡as ¡“map” ¡in ¡funcKonal ¡programming ¡
5 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ Map ¡ • Given ¡a ¡funcKon ¡f ¡: ¡(A) ¡=> ¡B ¡ • A ¡collecKon ¡a: ¡A[] ¡ • Generates ¡a ¡collecKon ¡b: ¡B[], ¡where ¡B[i] ¡= ¡f( ¡A[i] ¡) ¡ A ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ B ¡ • Parallel.For, ¡Paralle.ForEach ¡ • Where ¡each ¡loop ¡iteraKon ¡is ¡independent ¡
6 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ Reduce ¡And ¡Scan ¡ • In ¡pracKce, ¡parallel ¡loops ¡have ¡to ¡work ¡together ¡to ¡ generate ¡an ¡answer ¡ • Reduce ¡and ¡Scan ¡pa7erns ¡capture ¡common ¡cases ¡of ¡ processing ¡results ¡of ¡Map ¡
7 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ Reduce ¡And ¡Scan ¡ • In ¡pracKce, ¡parallel ¡loops ¡have ¡to ¡work ¡together ¡to ¡ generate ¡an ¡answer ¡ • Reduce ¡and ¡Scan ¡pa7erns ¡capture ¡common ¡cases ¡of ¡ processing ¡results ¡of ¡Map ¡ • Note: ¡Map ¡and ¡Reduce ¡are ¡similar ¡to ¡but ¡not ¡the ¡same ¡ as ¡MapReduce ¡ • MapReduce ¡is ¡a ¡framework ¡for ¡distributed ¡compuKng ¡
8 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ Reduce ¡ • Given ¡a ¡funcKon ¡f: ¡(A, ¡B) ¡=> ¡B ¡ • A ¡collecKon ¡a: ¡A[] ¡ • An ¡iniKal ¡value ¡b 0 : ¡B ¡ • Generate ¡a ¡final ¡value ¡b: ¡B ¡ • Where ¡b ¡= ¡f(A[n-‑1], ¡… ¡f(A[1], ¡f(A[0], ¡b 0 )) ¡ ¡) ¡ A ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ b ¡ b 0 ¡
9 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ Reduce ¡ • Given ¡a ¡funcKon ¡f: ¡(A, ¡B) ¡=> ¡B ¡ • A ¡collecKon ¡a: ¡A[] ¡ • An ¡iniKal ¡value ¡b 0 : ¡B ¡ • Generate ¡a ¡final ¡value ¡b: ¡B ¡ • Where ¡b ¡= ¡f(A[n-‑1], ¡… ¡f(A[1], ¡f(A[0], ¡b 0 )) ¡ ¡) ¡ A ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ b ¡ b 0 ¡ • Only ¡consider ¡where ¡A ¡and ¡B ¡are ¡the ¡same ¡type ¡
10 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ Reduce ¡ B acc = b_0; for( i = 0; i < n; i++ ) { acc = f( a[i], acc ); } b = acc; A ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ b ¡ b 0 ¡
11 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ AssociaKvity ¡of ¡the ¡Reduce ¡funcKon ¡ • Reduce ¡is ¡parallelizable ¡if ¡f ¡is ¡associaKve ¡ ¡f(a, ¡f(b, ¡c)) ¡= ¡f(f(a,b), ¡c) ¡ • E.g. ¡AddiKon ¡: ¡(a ¡+ ¡b) ¡+ ¡c ¡= ¡a ¡+ ¡(b ¡+ ¡c) ¡ • Where ¡+ ¡is ¡integer ¡addiKon ¡(with ¡modulo ¡arithmeKc) ¡ • But ¡not ¡when ¡+ ¡is ¡floaKng ¡point ¡addiKon ¡
12 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ AssociaKvity ¡of ¡the ¡Reduce ¡funcKon ¡ • Reduce ¡is ¡parallelizable ¡if ¡f ¡is ¡associaKve ¡ ¡f(a, ¡f(b, ¡c)) ¡= ¡f(f(a,b), ¡c) ¡ • E.g. ¡AddiKon ¡: ¡(a ¡+ ¡b) ¡+ ¡c ¡= ¡a ¡+ ¡(b ¡+ ¡c) ¡ • Where ¡+ ¡is ¡integer ¡addiKon ¡(with ¡modulo ¡arithmeKc) ¡ • But ¡not ¡when ¡+ ¡is ¡floaKng ¡point ¡addiKon ¡ • Max, ¡min, ¡mulKply, ¡… ¡ • Set ¡union, ¡intersecKon, ¡ ¡
13 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ We ¡can ¡use ¡Divide ¡and ¡Conquer ¡ • Reduce(f, ¡A[1…n], ¡b_0) ¡ ¡= ¡f ¡( ¡ ¡Reduce(f, ¡A[1..n/2], ¡b_0), ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Reduce(f, ¡A[n/2+1…n], ¡I) ¡) ¡ ¡ ¡where ¡I ¡is ¡the ¡idenKty ¡element ¡of ¡f ¡ A ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ b 0 ¡ I ¡ f ¡ b ¡
14 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ ImplementaKon ¡OpKmizaKons ¡ • Switch ¡to ¡sequenKal ¡Reduce ¡for ¡the ¡base ¡k ¡elements ¡ • Do ¡k ¡way ¡splits ¡instead ¡of ¡two ¡way ¡splits ¡ • Maintain ¡a ¡thread-‑local ¡accumulated ¡value ¡ • A ¡task ¡updates ¡the ¡value ¡of ¡the ¡thread ¡it ¡executes ¡in ¡
15 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ ImplementaKon ¡OpKmizaKons ¡ • Switch ¡to ¡sequenKal ¡Reduce ¡for ¡the ¡base ¡k ¡elements ¡ • Do ¡k ¡way ¡splits ¡instead ¡of ¡two ¡way ¡splits ¡ • Maintain ¡a ¡thread-‑local ¡accumulated ¡value ¡ • A ¡task ¡updates ¡the ¡value ¡of ¡the ¡thread ¡it ¡executes ¡in ¡ • Requires ¡that ¡the ¡reduce ¡funcKon ¡is ¡also ¡commutaKve ¡ ¡ ¡f(a, ¡b) ¡= ¡f(b, ¡a) ¡
16 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ ImplementaKon ¡OpKmizaKons ¡ • Switch ¡to ¡sequenKal ¡Reduce ¡for ¡the ¡base ¡k ¡elements ¡ • Do ¡k ¡way ¡splits ¡instead ¡of ¡two ¡way ¡splits ¡ • Maintain ¡a ¡thread-‑local ¡accumulated ¡value ¡ • A ¡task ¡updates ¡the ¡value ¡of ¡the ¡thread ¡it ¡executes ¡in ¡ • Requires ¡that ¡the ¡reduce ¡funcKon ¡is ¡also ¡commutaKve ¡ ¡ ¡f(a, ¡b) ¡= ¡f(b, ¡a) ¡ • Thread ¡local ¡values ¡are ¡then ¡merged ¡in ¡a ¡separate ¡pass ¡
17 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ Scan ¡ • Given ¡a ¡funcKon ¡f: ¡(A, ¡B) ¡=> ¡B ¡ • A ¡collecKon ¡a: ¡A[] ¡ • An ¡iniKal ¡value ¡b 0 : ¡B ¡ • Generate ¡a ¡collecKon ¡b: ¡B[] ¡ • Where ¡b[i] ¡= ¡f(A[i-‑1], ¡… ¡f(A[1], ¡f(A[0], ¡b 0 )) ¡ ¡) ¡ A ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ b 0 ¡
18 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ Scan ¡ B acc = b_0; for( i = 0; i < n; i++ ) { acc = f( a[i], acc ); } A ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ b 0 ¡
19 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ Scan ¡is ¡Efficiently ¡Parallelizable ¡ • When ¡f ¡is ¡associaKve ¡
20 ¡ 6/16/2010 ¡ Parallel ¡Pa7erns ¡-‑ ¡Reduce ¡& ¡Scan ¡ Scan ¡is ¡Efficiently ¡Parallelizable ¡ • When ¡f ¡is ¡associaKve ¡ • Scan(f, ¡A[1..n], ¡b_0) ¡= ¡Scan(f, ¡A[1..n/2], ¡b_0), ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Scan(f, ¡A[n/2+1…n], ¡____) ¡ A ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ f ¡ b 0 ¡ ? ¡
Recommend
More recommend