Week04 2 Parallel Two Phase Contruction

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 21

S`HH2H hrQ@S?

b2 *QMbi`m+iBQM

S`HH2H S`Q;`KKBM; BM a+H


H2FbM/` S`QFQT2+
hrQ@S?b2 *QMbi`m+iBQM

JQbi /i bi`m+im`2b +M #2 +QMbi`m+i2/ BM T`HH2H mbBM; irQ@T?b2


+QMbi`m+iBQMX
hrQ@S?b2 *QMbi`m+iBQM

JQbi /i bi`m+im`2b +M #2 +QMbi`m+i2/ BM T`HH2H mbBM; irQ@T?b2


+QMbi`m+iBQMX
h?2 BMi2`K2/Bi2 /i bi`m+im`2 Bb  /i bi`m+im`2 i?i,

! ?b M 2{+B2Mi combine K2i?Q/ Ĝ P(HQ; M + HQ; K) Q` #2ii2`


hrQ@S?b2 *QMbi`m+iBQM

JQbi /i bi`m+im`2b +M #2 +QMbi`m+i2/ BM T`HH2H mbBM; irQ@T?b2


+QMbi`m+iBQMX
h?2 BMi2`K2/Bi2 /i bi`m+im`2 Bb  /i bi`m+im`2 i?i,

! ?b M 2{+B2Mi combine K2i?Q/ Ĝ P(HQ; M + HQ; K) Q` #2ii2`


! ?b M 2{+B2Mi += K2i?Q/
hrQ@S?b2 *QMbi`m+iBQM

JQbi /i bi`m+im`2b +M #2 +QMbi`m+i2/ BM T`HH2H mbBM; irQ@T?b2


+QMbi`m+iBQMX
h?2 BMi2`K2/Bi2 /i bi`m+im`2 Bb  /i bi`m+im`2 i?i,

! ?b M 2{+B2Mi combine K2i?Q/ Ĝ P(HQ; M + HQ; K) Q` #2ii2`


! ?b M 2{+B2Mi += K2i?Q/
! +M #2 +QMp2`i2/ iQ i?2 `2bmHiBM; /i bi`m+im`2 BM P(M/S) iBK2
1tKTH2, ``v *QK#BM2`

G2iǶb BKTH2K2Mi  +QK#BM2` 7Q` ``vbX


hrQ ``vb +MMQi #2 2{+B2MiHv +QM+i2Mi2/- bQ r2 rBHH /Q  irQ@T?b2
+QMbi`m+iBQMX
1tKTH2, ``v *QK#BM2`

G2iǶb BKTH2K2Mi  +QK#BM2` 7Q` ``vbX


hrQ ``vb +MMQi #2 2{+B2MiHv +QM+i2Mi2/- bQ r2 rBHH /Q  irQ@T?b2
+QMbi`m+iBQMX

class ArrayCombiner[T <: AnyRef: ClassTag](val parallelism: Int) {


private var numElems = 0
private val buffers = new ArrayBuffer[ArrayBuffer[T]]
buffers += new ArrayBuffer[T]
1tKTH2, ``v *QK#BM2`

6B`bi- r2 BKTH2K2Mi i?2 += K2i?Q/,

def +=(x: T) = {
buffers.last += x
numElems += 1
this
}
1tKTH2, ``v *QK#BM2`

6B`bi- r2 BKTH2K2Mi i?2 += K2i?Q/,

def +=(x: T) = {
buffers.last += x
numElems += 1
this
}

KQ`iBx2/ P(1)- HQr +QMbiMi 7+iQ`b Ĝ b 2{+B2Mi b M ``v #mz2`X


1tKTH2, ``v *QK#BM2`

L2ti- r2 BKTH2K2Mi i?2 combine K2i?Q/,

def combine(that: ArrayCombiner[T]) = {


buffers ++= that.buffers
numElems += that.numElems
this
}
1tKTH2, ``v *QK#BM2`

L2ti- r2 BKTH2K2Mi i?2 combine K2i?Q/,

def combine(that: ArrayCombiner[T]) = {


buffers ++= that.buffers
numElems += that.numElems
this
}

P(S)- bbmKBM; i?i buffers +QMiBMb MQ KQ`2 i?M P(S) M2bi2/ ``v
#mz2`bX
1tKTH2, ``v *QK#BM2`

6BMHHv- r2 BKTH2K2Mi i?2 result K2i?Q/,

def result: Array[T] = {


val array = new Array[T](numElems)
val step = math.max(1, numElems / parallelism)
val starts = (0 until numElems by step) :+ numElems
val chunks = starts.zip(starts.tail)
val tasks = for ((from, end) <- chunks) yield task {
copyTo(array, from, end)
}
tasks.foreach(_.join())
array
}
"2M+?K`F

.2KQ Ĝ r2 rBHH i2bi i?2 T2`7Q`KM+2 Q7 i?2 aggregate K2i?Q/,

xs.par.aggregate(newCombiner)(_ += _, _ combine _).result


hrQ@S?b2 *QMbi`m+iBQM 7Q` ``vb

hrQ@T?b2 +QMbi`m+iBQM rQ`Fb 7Q` BM  bBKBH` rv 7Q` Qi?2` /i


bi`m+im`2bX 6B`bi- T`iBiBQM i?2 2H2K2Mib- i?2M +QMbi`m+i T`ib Q7 i?2 }MH
/i bi`m+im`2 BM T`HH2H,

RX T`iBiBQM i?2 BM/B+2b BMiQ bm#BMi2`pHb


kX BMBiBHBx2 i?2 ``v BM T`HH2H
hrQ@S?b2 *QMbi`m+iBQM 7Q` >b? h#H2b

RX T`iBiBQM i?2 ?b? +Q/2b BMiQ #m+F2ib


kX HHQ+i2 i?2 i#H2- M/ KT ?b? +Q/2b 7`QK /Bz2`2Mi #m+F2ib BMiQ
/Bz2`2Mi `2;BQMb
hrQ@S?b2 *QMbi`m+iBQM 7Q` a2`+? h`22b

RX T`iBiBQM i?2 2H2K2Mib BMiQ MQM@Qp2`HTTBM; BMi2`pHb ++Q`/BM; iQ


i?2B` Q`/2`BM;
kX +QMbi`m+i b2`+? i`22b BM T`HH2H- M/ HBMF MQM@Qp2`HTTBM; i`22b
hrQ@S?b2 *QMbi`m+iBQM 7Q` aTiBH .i ai`m+im`2b

RX bTiBHHv T`iBiBQM i?2 2H2K2Mib


kX +QMbi`m+i MQM@Qp2`HTTBM; bm#b2ib M/ HBMF i?2K
AKTH2K2MiBM; +QK#BM2`b

>Qr +M r2 BKTH2K2Mi +QK#BM2`b\


AKTH2K2MiBM; +QK#BM2`b

>Qr +M r2 BKTH2K2Mi +QK#BM2`b\

RX hrQ@T?b2 +QMbi`m+iBQM Ĝ i?2 +QK#BM2` mb2b M BMi2`K2/Bi2 /i


bi`m+im`2 rBi? M 2{+B2Mi combine K2i?Q/ iQ T`iBiBQM i?2 2H2K2MibX
q?2M result Bb +HH2/- i?2 }MH /i bi`m+im`2 Bb +QMbi`m+i2/ BM
T`HH2H 7`QK i?2 BMi2`K2/Bi2 /i bi`m+im`2X
AKTH2K2MiBM; +QK#BM2`b

>Qr +M r2 BKTH2K2Mi +QK#BM2`b\

RX hrQ@T?b2 +QMbi`m+iBQM Ĝ i?2 +QK#BM2` mb2b M BMi2`K2/Bi2 /i


bi`m+im`2 rBi? M 2{+B2Mi combine K2i?Q/ iQ T`iBiBQM i?2 2H2K2MibX
q?2M result Bb +HH2/- i?2 }MH /i bi`m+im`2 Bb +QMbi`m+i2/ BM
T`HH2H 7`QK i?2 BMi2`K2/Bi2 /i bi`m+im`2X
kX M 2{+B2Mi +QM+i2MiBQM Q` mMBQM QT2`iBQM Ĝ  T`272``2/ rv r?2M
i?2 `2bmHiBM; /i bi`m+im`2 HHQrb i?BbX
AKTH2K2MiBM; +QK#BM2`b

>Qr +M r2 BKTH2K2Mi +QK#BM2`b\

RX hrQ@T?b2 +QMbi`m+iBQM Ĝ i?2 +QK#BM2` mb2b M BMi2`K2/Bi2 /i


bi`m+im`2 rBi? M 2{+B2Mi combine K2i?Q/ iQ T`iBiBQM i?2 2H2K2MibX
q?2M result Bb +HH2/- i?2 }MH /i bi`m+im`2 Bb +QMbi`m+i2/ BM
T`HH2H 7`QK i?2 BMi2`K2/Bi2 /i bi`m+im`2X
kX M 2{+B2Mi +QM+i2MiBQM Q` mMBQM QT2`iBQM Ĝ  T`272``2/ rv r?2M
i?2 `2bmHiBM; /i bi`m+im`2 HHQrb i?BbX
jX *QM+m``2Mi /i bi`m+im`2 Ĝ /Bz2`2Mi +QK#BM2`b b?`2 i?2 bK2
mM/2`HvBM; /i bi`m+im`2- M/ `2Hv QM bvM+?`QMBxiBQM iQ +Q``2+iHv
mT/i2 i?2 /i bi`m+im`2 r?2M += Bb +HH2/X

You might also like