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.

10 Hoofdstuk 2. Het gedeelde-geheug<strong>en</strong>model<br />

de som z (1) + ···+ z (r) vooraleer gegarandeerd is dat alle processor<strong>en</strong> de berek<strong>en</strong>ing van hun z (i)<br />

beëindigd hebb<strong>en</strong>. Er is m.a.w. e<strong>en</strong> expliciete synchronisatie nodig: het programma van elke<br />

processor moet e<strong>en</strong> synchronisatiepunt bevatt<strong>en</strong> na de berek<strong>en</strong>ing van z (i) = A (i) x (i) , om ervoor<br />

te zorg<strong>en</strong> dat de processor<strong>en</strong> synchroniser<strong>en</strong> vooraleer verder te gaan met de uitvoering van het<br />

programma.<br />

2.2 De Parallel Random-Access Machine (PRAM)<br />

In deze paragraaf conc<strong>en</strong>trer<strong>en</strong> we ons op de Parallel Access-Random Machine (PRAM), die<br />

zowat het standaardmodel voor parallelle algoritm<strong>en</strong> in het gedeelde-geheug<strong>en</strong>model geword<strong>en</strong><br />

is. Dit model veralgeme<strong>en</strong>t de Random-Access Machine (RAM), het model dat voor sequ<strong>en</strong>tiële<br />

algoritm<strong>en</strong> gebruikt wordt. We beschrijv<strong>en</strong> beide modell<strong>en</strong> hier, zonder echter e<strong>en</strong> precieze<br />

formele definitie te gev<strong>en</strong>.<br />

2.2.1 Het PRAM-model<br />

Het RAM-model bestaat uit e<strong>en</strong> c<strong>en</strong>trale verwerkingse<strong>en</strong>heid (CPU) met e<strong>en</strong> random-accessgeheug<strong>en</strong><br />

eraan verbond<strong>en</strong>. De CPU kan rek<strong>en</strong>kundige <strong>en</strong> logische bewerking<strong>en</strong> uitvoer<strong>en</strong> op<br />

e<strong>en</strong> set registers, waarvan de inhoud kan word<strong>en</strong> gelad<strong>en</strong> uit <strong>en</strong> geschrev<strong>en</strong> naar het geheug<strong>en</strong><br />

via random-access-adressering. Elke bewerking vereist één tijdse<strong>en</strong>heid.<br />

Het PRAM-model bestaat uit meerdere RAM-processor<strong>en</strong>, met één extra gedeeld random-accessgeheug<strong>en</strong>,<br />

waartoe alle processor<strong>en</strong> toegang hebb<strong>en</strong>. De processor<strong>en</strong> zijn gesynchroniseerd<br />

door e<strong>en</strong> globale klok, <strong>en</strong> elke processor voert één stap uit tijd<strong>en</strong>s elke klokcyclus.<br />

<strong>Algoritm<strong>en</strong></strong> ontwikkeld in het PRAM-model zijn meestal van het type single instruction multiple<br />

data (SIMD). Dit betek<strong>en</strong>t dat alle processor<strong>en</strong> hetzelfde programma uitvoer<strong>en</strong>, zodanig<br />

dat, op elke tijdse<strong>en</strong>heid, de actieve processor<strong>en</strong> dezelfde instructie uitvoer<strong>en</strong>, doorgaans wel<br />

op verschill<strong>en</strong>de data. Merk echter op dat deze beperking niet inher<strong>en</strong>t door het PRAM-model<br />

zelf opgelegd wordt. Het PRAM-model laat toe om verschill<strong>en</strong>de programma’s op verschill<strong>en</strong>de<br />

processor<strong>en</strong> uit te voer<strong>en</strong>, uiteraard op voorwaarde dat de processor<strong>en</strong> synchroon kunn<strong>en</strong> werk<strong>en</strong>.<br />

Aan de pseudocode voeg<strong>en</strong> we nu ook e<strong>en</strong> parallelle lus toe, die zal toelat<strong>en</strong> om e<strong>en</strong> blok code<br />

in parallel op meerdere processor<strong>en</strong> uit te voer<strong>en</strong>:<br />

for i from 1 to n pardo<br />

{Blok code}<br />

Hierbij wordt het aantal gebruikte processor<strong>en</strong> niet nader gespecificeerd, <strong>en</strong> wordt impliciet verondersteld<br />

dat hun aantal onbeperkt is. De parallelle tijd nodig om deze lus uit te voer<strong>en</strong> is het<br />

maximum van de tijd gebruikt in één van de n stapp<strong>en</strong> (in plaats van de som, zoals het op e<strong>en</strong><br />

sequ<strong>en</strong>tiële machine zou zijn). De kost is het aantal stapp<strong>en</strong> in de lus, maal de kost van één stap.<br />

Voorbeeld 2.2.1. Beschouw het initialiser<strong>en</strong> van elk elem<strong>en</strong>t van e<strong>en</strong> array met e<strong>en</strong> waarde. Gebruik<br />

mak<strong>en</strong>d van p = n processor<strong>en</strong> kan dit met e<strong>en</strong> factor n word<strong>en</strong> versneld:<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!