Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
4.1. Pipelining / Sorter<strong>en</strong> & Priemzeef 37<br />
Algoritme 4.1 Sorter<strong>en</strong> via pipelining<br />
Input: rij van n processor<strong>en</strong> P1,...,Pn <strong>en</strong> e<strong>en</strong> master P0; processornummer i > 0; rij van n getall<strong>en</strong><br />
op P0<br />
Output: de gesorteerde rij op master P0<br />
1: receive (x, Pi−1)<br />
2: for j from 2 to n − i do<br />
3: receive (y, Pi−1)<br />
4: if y < x th<strong>en</strong><br />
5: s<strong>en</strong>d (x, Pi+1)<br />
6: Stel x ← y<br />
7: else<br />
8: s<strong>en</strong>d (y, Pi+1)<br />
9: s<strong>en</strong>d (x, Pi−1)<br />
10: for j from 2 to n − i do<br />
11: receive (y, Pi+1)<br />
12: s<strong>en</strong>d (y, Pi−1)<br />
Algoritme 4.2 Priemzeef van Eratosth<strong>en</strong>es (sequ<strong>en</strong>tieel algoritme)<br />
Input: e<strong>en</strong> positief geheel getal n<br />
Output: (p2,..., pn) met pi true als i priem, anders false<br />
1: for i from 2 to n do<br />
2: Stel pi ← true<br />
3: for i from 2 to √ n do<br />
4: if pi th<strong>en</strong><br />
5: for j from i 2 to n step i do<br />
6: Stel pi ← false<br />
4.1.3 Priemzeef via pipeling<br />
De priemzeef van Eratosth<strong>en</strong>es voor het bepal<strong>en</strong> van alle priemgetall<strong>en</strong> kleiner dan of gelijk aan n<br />
start met de rij 2,...,n. Eerst word<strong>en</strong> alle echte veelvoud<strong>en</strong> van 2 geschrapt, vervolg<strong>en</strong>s alle echte<br />
veelvoud<strong>en</strong> van 3, van 5, <strong>en</strong>z. voor alle overblijv<strong>en</strong>de getall<strong>en</strong>, tot aan √ n. Algoritme 4.2 geeft<br />
de pseudocode voor e<strong>en</strong> sequ<strong>en</strong>tiële uitwerking van dit idee. De sequ<strong>en</strong>tiële uitvoeringstijd is<br />
T(n) = O(n 2 ).<br />
Merk op dat het schrapp<strong>en</strong> van de veelvoud<strong>en</strong> iets is wat in parallel kan gebeur<strong>en</strong>, meer bepaald<br />
via pipelining. Het algoritme via pipelining werkt als volgt. Elke processor houdt het eerste<br />
binn<strong>en</strong>kom<strong>en</strong>de getal bij, verwijdert de veelvoud<strong>en</strong> hiervan uit de doorkom<strong>en</strong>de rij <strong>en</strong> stuurt de<br />
niet-veelvoud<strong>en</strong> door naar zijn rechterbuur.<br />
Anders dan bij het sorteerprobleem wet<strong>en</strong> we nu niet op voorhand hoeveel getall<strong>en</strong> elke processor<br />
zal ontvang<strong>en</strong>. Dit kunn<strong>en</strong> we oploss<strong>en</strong> door e<strong>en</strong> speciaal getal (“terminator”) aan het einde van<br />
de rij toe te voeg<strong>en</strong>, dat aangeeft dat de rij t<strong>en</strong> einde is.<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