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.
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