Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
4.2. Gebalanceerde bom<strong>en</strong> / Prefixsomm<strong>en</strong> 41<br />
Algoritme 4.6 Berek<strong>en</strong>ing van prefixsomm<strong>en</strong> op PRAM (niet-recursieve formulering)<br />
Input: rij (a1,...,an) met n = 2 ℓ<br />
Output: tabel C: c0,k = sk = ∑ k j=1 a j (1 ≤ k ≤ n)<br />
1: for i from 1 to n pardo<br />
2: Stel b0,i ← ai<br />
3: for h from 1 to log 2 n do<br />
4: for j from 1 to n/2 h pardo<br />
5: Stel bh, j ← bh−1,2 j ⊕ bh−1,2 j+1<br />
6: for h from log 2 n to 0 do<br />
7: for j from 1 to n/2 h pardo<br />
8: case j = 1: Stel ch,0 ← bh,0<br />
9: case j ev<strong>en</strong>: Stel ch, j ← c h+1, j/2<br />
10: case j onev<strong>en</strong>: Stel ch, j ← c h+1,( j−1)/2 ⊕ bh, j<br />
Tot slot besprek<strong>en</strong> we e<strong>en</strong> niet-recursieve versie van Algoritme 4.5. Daarbij gebruik<strong>en</strong> we twee<br />
hulpvariabel<strong>en</strong> voor het bijhoud<strong>en</strong> van de gebalanceerde boom. De tabel (bh, j), met 0 ≤ h ≤<br />
log 2 n <strong>en</strong> 1 ≤ j ≤ n/2 h , wordt opgebouwd tijd<strong>en</strong>s het voorwaarts doorlop<strong>en</strong> van de boom. De<br />
tabel (ch, j) met 0 ≤ h ≤ log 2 n <strong>en</strong> 1 ≤ j < n/2 h , wordt opgebouwd tijd<strong>en</strong>s het achterwaarts<br />
doorlop<strong>en</strong> van de boom. Merk op dat deze hulpvariabel<strong>en</strong> niet echt nodig zijn <strong>en</strong> dat het algoritme<br />
in-place kan word<strong>en</strong> uitgevoerd.<br />
4.2.4 Berek<strong>en</strong><strong>en</strong> van prefixsomm<strong>en</strong> op e<strong>en</strong> rooster<br />
We veronderstell<strong>en</strong> dat de rij getall<strong>en</strong> verdeeld is over de rij<strong>en</strong> van het rooster. Dan kunn<strong>en</strong> de<br />
prefixsomm<strong>en</strong> als volgt berek<strong>en</strong>d word<strong>en</strong>. Elke rij van het rooster doet e<strong>en</strong> rijrotatie; hierdoor<br />
bevat elke rechtse processor van e<strong>en</strong> rij de som van de getall<strong>en</strong> op zijn rij. Vervolg<strong>en</strong>s doet de<br />
rechterkolom van het rooster e<strong>en</strong> kolomrotatie, hetge<strong>en</strong> ervoor zorgt dat deze processor<strong>en</strong> de<br />
correcte prefixsom bevatt<strong>en</strong>. Dan stuurt elke rechtse processor van e<strong>en</strong> rij zijn prefixsom naar<br />
zijn onderbuur. Tot slot doet elke rij (behalve de eerste) weer e<strong>en</strong> rijrotatie. Hierdoor bevat<br />
uiteindelijk elke processor de correcte prefixsom.<br />
Beschouw<strong>en</strong> we de performantie van dit algoritme. Zij p = n. De parallelle uitvoeringstijd is<br />
Tp(n) = Θ( √ p) = Θ( √ n). De kost is Cp(n) = Θ(p 3/2 ) = Θ(n 3/2 ). M.a.w. het algoritme is niet<br />
kost-optimaal.<br />
Om het algoritme te optimaliser<strong>en</strong> bepal<strong>en</strong> we de waarde van p waarvoor p 3/2 = n, of m.a.w.<br />
p = n 2/3 . Dan hebb<strong>en</strong> we e<strong>en</strong> rooster van n 1/3 × n 1/3 processor<strong>en</strong>, <strong>en</strong> elke processor verwerkt<br />
n 1/3 elem<strong>en</strong>t<strong>en</strong> sequ<strong>en</strong>tieel. De parallelle uitvoeringstijd van dit aangepaste algoritme is Tp(n) =<br />
Θ( √ p+n 1/3 ) = Θ(n 1/3 ). De kost is Cp(n) = Θ(p × n 1/3 ) = Θ(n), <strong>en</strong> het aangepaste algoritme<br />
is dus kost-optimaal.<br />
<strong>Algoritm<strong>en</strong></strong> <strong>en</strong> Datastructur<strong>en</strong> <strong>III</strong> Veerle.Fack@UG<strong>en</strong>t.be