EREW: | exclusive read, exclusive write |
CREW: | concurrent read, exclusive write |
ERCW: | exclusive read, concurrent write |
CRCW: | concurrent read, concurrent write |
z.B. | Prozessor mit größter ID setzt sich durch. |
z.B. | ein zufällig gewählter Prozessor setzt sich durch. |
z.B. | nur erlaubt, wenn alle dasselbe schreiben. |
Gegeben: VAR a: ARRAY[0..n-1] OF INTEGER; Gesucht: antwort := Maximum der n Zahlen Zur Vereinfachung sei angenommen, daß alle Zahlen verschieden sind. Offenbar beträgt die Sequentialzeit O(n) .
EREW PRAM zur Maximumsuche auf n Zahlen
Verwendet werden n/2 Prozessoren
P0,P1,...,Pn/2 - 1
d := n;
REPEAT
d := d DIV 2;
FOR ALL 0 i d - 1 DO IN PARALLEL
Pi : a[i] := maximum( a[2 * i], a[2 * i + 1] )
END
UNTIL d = 1;
antwort := a[0];
Bemerkung: Statt des Maximums kann mit dieser Methode auch die Summe gebildet werden.
Parallelzeit: | O(log n) |
Kosten: | O(n · log n) |
Speedup: | O(n/log n) |
Effizienz: | O(n/(n · logn)) = O(1/log n) |
CRCW PRAM zur Maximumsuche auf n Zahlen
Verwendet werden n 2 Prozessoren
P00,P01,P02,...,Pn - 1n - 1 .
Beim gleichzeitigen Schreiben sei nur ein einziger Wert erlaubt!
VAR sieger : ARRAY [0..n-1] OF BOOLEAN;
FOR ALL 0 i n - 1 DO IN PARALLEL
P0i : sieger[i] := TRUE
END;
FOR ALL 0 i, j n - 1 DO IN PARALLEL
Pij : IF a[i] < a [j] THEN sieger[i] := FALSE END
END;
FOR ALL 0 i n - 1 DO IN PARALLEL
P0i : IF sieger[i] THEN antwort := a[i] END
END;
Parallelzeit: | O(1) |
Kosten: | O(n 2) |
Speedup: | O(n) |
Effizienz: | O(n/n 2) = O(1/n) |
CREW PRAM zur Matrizenmultiplikation
Verwendet werden n 3 Prozessoren
P000,P001,...,Pn - 1,n - 1,n - 1 .
Gegeben: zwei n × n -Matrizen a,b . Gesucht: ihr Matrizenprodukt c mit cij = aik · bkj
VAR a,b : ARRAY [0..n-1] [0..n-1] OF REAL;
FOR ALL 0 i, j, k n - 1 DO IN PARALLEL
Pijk : tmp[i, j, k] := a[i, k] * b[k, j]
END
(* nun wird mit n 3/2 Prozessoren *)
(* das Array tmp [i, j, *] aufaddiert *)
d := n;
REPEAT
d := d DIV 2;
FOR ALL 0 k d - 1 DO IN PARALLEL
Pijk : tmp[i, j, k] := tmp[i, j, 2 * k] + tmp[i, j, 2 * k + 1]
END
UNTIL d = 1;
Das Ergebnis cij befindet sich in tmp[i, j, 0].
Sequentialzeit:
O(n 3)
Parallelzeit:
O(log n)
Speedup:
O(n 3/log n)
Effizienz:
O(n 3/n 3 · logn) = O(1/log n)