03.07.2013 Views

Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt

Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt

Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!