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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

1.1. <strong>Parallelle</strong> algoritm<strong>en</strong> ontwerp<strong>en</strong> <strong>en</strong> analyser<strong>en</strong> 3<br />

Algoritme 1.1 Zoek<strong>en</strong> van het grootste elem<strong>en</strong>t in e<strong>en</strong> array (sequ<strong>en</strong>tieel algoritme)<br />

Input: array (a1,...,an), l<strong>en</strong>gte n<br />

Output: de waarde van het grootste elem<strong>en</strong>t in a<br />

1: Stel m ← a1<br />

2: for i from 2 to n do<br />

3: if ai > m th<strong>en</strong><br />

4: Stel m ← ai<br />

5: return m<br />

processor te lat<strong>en</strong> lop<strong>en</strong>. De beste versnelling die we kunn<strong>en</strong> verwacht<strong>en</strong> bij het gebruik van<br />

p processor<strong>en</strong> is dus e<strong>en</strong> factor p.<br />

Bij het ontwerp<strong>en</strong> van e<strong>en</strong> parallel algoritme moet e<strong>en</strong> compromis word<strong>en</strong> gezocht tuss<strong>en</strong> de twee<br />

resources hardware <strong>en</strong> uitvoeringstijd. Meer hardware gebruik<strong>en</strong> kan leid<strong>en</strong> tot e<strong>en</strong> vermindering<br />

van de uitvoeringstijd met e<strong>en</strong> factor p, voor p processor<strong>en</strong>. Wanneer uitvoeringstijd e<strong>en</strong> hoge<br />

prioriteit heeft <strong>en</strong> we de middel<strong>en</strong> voor bijkom<strong>en</strong>de hardware hebb<strong>en</strong>, dan is het nuttig naar<br />

parallelle algoritm<strong>en</strong> te zoek<strong>en</strong>.<br />

E<strong>en</strong> mogelijke b<strong>en</strong>adering bij het ontwerp<strong>en</strong> van e<strong>en</strong> parallel algoritme is te start<strong>en</strong> met e<strong>en</strong> sequ<strong>en</strong>tieel<br />

algoritme voor het probleem <strong>en</strong> te onderzoek<strong>en</strong> of dit algoritme, of gedeelt<strong>en</strong> ervan, kan<br />

word<strong>en</strong> geparallelliseerd. In het algem<strong>en</strong>e geval zull<strong>en</strong> we ge<strong>en</strong> zo’n spectaculaire versnelling<br />

als bij het printervoorbeeld kunn<strong>en</strong> bekom<strong>en</strong>.<br />

Voorbeeld 1.1.2. Als voorbeeld behandel<strong>en</strong> we het probleem van het berek<strong>en</strong><strong>en</strong> van het grootste<br />

elem<strong>en</strong>t in e<strong>en</strong> array. E<strong>en</strong> e<strong>en</strong>voudig sequ<strong>en</strong>tieel algoritme hiervoor wordt gegev<strong>en</strong> in Algoritme<br />

1.1. Merk op dat dit algoritme inher<strong>en</strong>t sequ<strong>en</strong>tieel is, want elke vergelijking hangt af van<br />

alle voorafgaande vergelijking<strong>en</strong>.<br />

Veronderstel dat we e<strong>en</strong> onbeperkt aantal processor<strong>en</strong> ter beschikking hebb<strong>en</strong>. Hoe kan Algoritme<br />

1.1 word<strong>en</strong> geparallelliseerd? In stap 1 van het algoritme gebruik<strong>en</strong> we één processor om het<br />

maximum van twee elem<strong>en</strong>t<strong>en</strong> te vind<strong>en</strong>. Gebruik mak<strong>en</strong>d van ⌊n/2⌋ processor<strong>en</strong> kunn<strong>en</strong> we<br />

van ⌊n/2⌋ par<strong>en</strong> van elem<strong>en</strong>t<strong>en</strong> de maxima bepal<strong>en</strong>. In de volg<strong>en</strong>de stap kunn<strong>en</strong> we met behulp<br />

van ⌊n/4⌋ processor<strong>en</strong> de maxima van ⌊n/4⌋ par<strong>en</strong> bepal<strong>en</strong>, <strong>en</strong>zovoort.<br />

Hoeveel tijd kost dit parallelle algoritme? In elke stap wordt het aantal elem<strong>en</strong>t<strong>en</strong> waarvan het<br />

maximum moet word<strong>en</strong> bepaald, gehalveerd. Het algoritme voert dus t<strong>en</strong> hoogste ⌈log 2 n⌉ stapp<strong>en</strong><br />

uit, hetge<strong>en</strong> e<strong>en</strong> substantiële verbetering is teg<strong>en</strong>over het Θ(n) sequ<strong>en</strong>tiële algoritme. Bov<strong>en</strong>di<strong>en</strong><br />

hebb<strong>en</strong> we <strong>en</strong>kel ⌈n/2⌉ processor<strong>en</strong> nodig om het algoritme in parallelle tijd O(logn) uit<br />

te voer<strong>en</strong>. Op het eerste gezicht ziet het algoritme er goed uit: met e<strong>en</strong> lineair aantal processor<strong>en</strong><br />

kunn<strong>en</strong> we e<strong>en</strong> probleem dat lineaire sequ<strong>en</strong>tiële tijd vereist, oploss<strong>en</strong> in logaritmische parallelle<br />

tijd. Maar er is ook duidelijke inefficiëntie in het algoritme: in de eerste stap word<strong>en</strong> ongeveer<br />

n/2 processor<strong>en</strong> effectief gebruikt, in de tweede stap nog slechts ongeveer n/4, in de k-de stap<br />

nog slechts ongeveer n/2 k . Het overgrote deel van de processor<strong>en</strong> doet dus ge<strong>en</strong> werk gedur<strong>en</strong>de<br />

het algoritme. Dit is duidelijk e<strong>en</strong> verspilling van hardware.<br />

Het bov<strong>en</strong>staande voorbeeld geeft aan dat we parallelle algoritm<strong>en</strong> niet alle<strong>en</strong> moet<strong>en</strong> beoordel<strong>en</strong><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!