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.
50 Hoofdstuk 5. <strong>Parallelle</strong> sorteeralgoritm<strong>en</strong><br />
5.1 Sorteernetwerk<strong>en</strong><br />
x<br />
y<br />
min(x,y)<br />
max(x,y)<br />
Figuur 5.1: E<strong>en</strong> vergelijk<strong>en</strong>de poort<br />
5.1.1 Wat zijn sorteernetwerk<strong>en</strong>?<br />
Sorteernetwerk<strong>en</strong> zijn circuits die opgebouwd zijn uit één <strong>en</strong>kel type poort, nl. de vergelijk<strong>en</strong>de<br />
poort (of comparator gate). Deze poort krijgt als input twee getall<strong>en</strong> <strong>en</strong> ze geeft als output deze<br />
getall<strong>en</strong> in volgorde terug. We tek<strong>en</strong><strong>en</strong> e<strong>en</strong> comparator als e<strong>en</strong> boog tuss<strong>en</strong> de twee lijn<strong>en</strong> die<br />
word<strong>en</strong> vergelek<strong>en</strong> (zie Figuur 5.1).<br />
E<strong>en</strong> sorteernetwerk is e<strong>en</strong> circuit van vergelijk<strong>en</strong>de poort<strong>en</strong> dat zijn input in stijg<strong>en</strong>de volgorde<br />
teruggeeft. We tek<strong>en</strong><strong>en</strong> e<strong>en</strong> sorteernetwerk als e<strong>en</strong> verzameling lijn<strong>en</strong>, één voor elke input, met<br />
de vergelijk<strong>en</strong>de poort<strong>en</strong> toegevoegd tuss<strong>en</strong> de lijn<strong>en</strong>. Vooraleer e<strong>en</strong> poort kan reager<strong>en</strong>, moet ze<br />
wacht<strong>en</strong> tot al haar inputs beschikbaar zijn. Vergelijk<strong>en</strong>de poort<strong>en</strong> waarvan de lijn<strong>en</strong> niet overlapp<strong>en</strong>,<br />
kunn<strong>en</strong> in parallel werk<strong>en</strong>. Wanneer we e<strong>en</strong> sorteernetwerk visualiser<strong>en</strong>, dan groeper<strong>en</strong><br />
we de comparator<strong>en</strong> die in parallel kunn<strong>en</strong> werk<strong>en</strong>. Ze vorm<strong>en</strong> e<strong>en</strong> laag van het netwerk. Elke<br />
laag vereist één tijdse<strong>en</strong>heid om uitgevoerd te word<strong>en</strong>, aangezi<strong>en</strong> alle poort<strong>en</strong> van e<strong>en</strong> laag in<br />
parallel kunn<strong>en</strong> werk<strong>en</strong>. Het aantal poort<strong>en</strong> in de netwerk wordt de grootte van het netwerk<br />
g<strong>en</strong>oemd. De diepte van het netwerk is het aantal stapp<strong>en</strong> dat nodig is opdat elke poort zijn<br />
vergelijking uitgevoerd heeft.<br />
Voorbeeld 5.1.1. Beschouw het netwerk uit Figuur 5.2(a). Dit heeft 5 poort<strong>en</strong> <strong>en</strong> sorteert 4 getall<strong>en</strong><br />
in 3 stapp<strong>en</strong>. Het bestaat uit 3 lag<strong>en</strong>: de eerste <strong>en</strong> de tweede laag bestaan elk uit 2 vergelijk<strong>en</strong>de<br />
poort<strong>en</strong>, terwijl de derde laag uit 1 vergelijk<strong>en</strong>de poort bestaat. Dit sorteernetwerk<br />
heeft dus grootte 5 <strong>en</strong> diepte 3, hetge<strong>en</strong> betek<strong>en</strong>t dat de input na 3 stapp<strong>en</strong> gesorteerd is. In<br />
Figuur 5.2(b) wordt het sorter<strong>en</strong> van de getall<strong>en</strong> 17, 42, 23, 7 getoond.<br />
Hoe kunn<strong>en</strong> we nu het probleem van het sorter<strong>en</strong> van n getall<strong>en</strong> algeme<strong>en</strong> oploss<strong>en</strong>? We bekijk<strong>en</strong><br />
eerst e<strong>en</strong> e<strong>en</strong>voudiger probleem, nl. het bepal<strong>en</strong> van het grootste elem<strong>en</strong>t van de inputs.<br />
Daartoe vergelijk<strong>en</strong> we eerst de eerste twee inputs, daarna het grootste hiervan met de derde<br />
input, <strong>en</strong>zovoort, telk<strong>en</strong>s het vorige resultaat vergelijk<strong>en</strong>d met de volg<strong>en</strong>de input, totdat we de<br />
laatste lijn bereikt hebb<strong>en</strong>. Voor 8 elem<strong>en</strong>t<strong>en</strong> bekom<strong>en</strong> we het netwerk van grootte <strong>en</strong> diepte 7<br />
uit Figuur 5.3.<br />
De 7 comparator<strong>en</strong> op de diagonal<strong>en</strong> garander<strong>en</strong> dat het grootste inputelem<strong>en</strong>t zijn weg vindt<br />
naar de laatste lijn, waar het moet terechtkom<strong>en</strong>. Het idee achter het odd-ev<strong>en</strong>-transposition<br />
netwerk is om vele dergelijke diagonal<strong>en</strong> te gebruik<strong>en</strong>.<br />
Voorbeeld 5.1.2. Figuur 5.4 toont het odd-ev<strong>en</strong>-transposition netwerk voor n = 10. Dit netwerk<br />
heeft diepte 10 <strong>en</strong> grootte 45.<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