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.

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

Algoritme 2.4 Parallel zoek<strong>en</strong> van de positie van e<strong>en</strong> elem<strong>en</strong>t in e<strong>en</strong> niet-gesorteerde array<br />

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

Output: e<strong>en</strong> index ℓ waarvoor x = aℓ indi<strong>en</strong> deze bestaat, anders −1<br />

1: Stel ℓ ← −1<br />

2: for i from 1 to n pardo<br />

3: if x = ai th<strong>en</strong><br />

4: Stel ℓ ← i<br />

5: return ℓ<br />

• Concurr<strong>en</strong>t Write (CW): meerdere processor<strong>en</strong> kunn<strong>en</strong> gelijktijdig e<strong>en</strong> waarde naar e<strong>en</strong><br />

variabele schrijv<strong>en</strong>.<br />

Op die manier bekom<strong>en</strong> we vier verschill<strong>en</strong>de PRAM-modell<strong>en</strong>:<br />

• EREW: het meest restrictieve model;<br />

• CRCW: het minst restrictieve model;<br />

• CREW: het meest gebruikte gem<strong>en</strong>gde model;<br />

• ERCW: e<strong>en</strong> weinig gebruikt gem<strong>en</strong>gd model.<br />

Voorbeeld 2.2.3. Algoritme 2.3 is e<strong>en</strong> CRCW algoritme. Het is CR omwille van de gelijktijdige<br />

leestoegang tot x <strong>en</strong> het is CW omwille van de gelijktijdige schrijftoegang tot f .<br />

Wanneer we e<strong>en</strong> CW algoritme uitvoer<strong>en</strong>, kan het gebeur<strong>en</strong> dat verscheid<strong>en</strong>e processor<strong>en</strong> verschill<strong>en</strong>de<br />

waard<strong>en</strong> naar dezelfde variabele prober<strong>en</strong> te schrijv<strong>en</strong>.<br />

Voorbeeld 2.2.4. Veronderstel dat we Algoritme 2.3 will<strong>en</strong> aanpass<strong>en</strong> zodanig dat het ook de<br />

plaats teruggeeft waar x gevond<strong>en</strong> werd. Algoritme 2.4 geeft de pseudocode voor dit aangepaste<br />

algoritme. Wanneer x meer dan één keer voorkomt in de array, dan wordt de opdracht ℓ ← i in<br />

parallel door meerdere processor<strong>en</strong> uitgevoerd voor verschill<strong>en</strong>de waard<strong>en</strong> van i.<br />

We onderscheid<strong>en</strong> meerdere modell<strong>en</strong> voor het oploss<strong>en</strong> van schrijfconflict<strong>en</strong>:<br />

• CW in prioriteit: De processor<strong>en</strong> krijg<strong>en</strong> verschill<strong>en</strong>de prioriteit<strong>en</strong> toegek<strong>en</strong>d, <strong>en</strong> bij conflict<br />

is het de processor met de hoogste prioriteit waarvan de waarde in de variabele geschrev<strong>en</strong><br />

wordt.<br />

• CW in overe<strong>en</strong>stemming: Alle processor<strong>en</strong> die e<strong>en</strong> waarde naar e<strong>en</strong> variabele schrijv<strong>en</strong>,<br />

moet<strong>en</strong> dezelfde waarde schrijv<strong>en</strong>, anders faalt de schrijfbewerking.<br />

• willekeurig CW: E<strong>en</strong> willekeurige processor van dieg<strong>en</strong>e die e<strong>en</strong> waarde naar de variabele<br />

will<strong>en</strong> schrijv<strong>en</strong>, schrijft effectief zijn waarde naar de variabele.<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!