PRAM

11
PRAM

description

PRAM. EREW CREW ERCW CRCW. SYNCHRONIZACJA I STEROWANIE procesy są ściśle zsynchronizowane testowanie warunków zakończenia pętli - za pomocą sieci sterującej lub jednoczesnego zapisu do pamięci. - PowerPoint PPT Presentation

Transcript of PRAM

Page 1: PRAM

PRAM

Page 2: PRAM

• EREW

• CREW

• ERCW

• CRCW

Page 3: PRAM

SYNCHRONIZACJA I STEROWANIE

procesy są ściśle zsynchronizowane

testowanie warunków zakończenia pętli - za pomocą sieci sterującej lub jednoczesnego zapisu do pamięci

Page 4: PRAM

USTALANIE PORZĄDKU ELEMENTÓW NA LIŚCIE

Metoda przeskakiwania (podwajania) :

DANE : n elementowa lista rekordów (pola : klucz, d, next)

WYNIK : d[i] = odległość elementu o kluczu=i od końca listy L

0 jeśli next[i] = NILd[i] : = d[next[i]]+ 1 jeśli next[i] <>NIL

Page 5: PRAM

Procedure LIST-RANK (L); { dla EREW }begin for każdy proces i in parallel do if next[i] = NIL then d[i] := 0 else d[i] := 1;

while istnieje element i w L taki, że next[i] <> NIL do for każdy proces i in parallel do if next[i] <> NIL then begin d[i] := d[i] + d[next[i]]; next[i] := next[next[i]]; end;end;

T(n) = O(lg n)

Page 6: PRAM

OBLICZENIA PREFIKSOWE NA LIŚCIE

DANE: n, X = (x1, x2, ... xn ), n 1, - binarny, łączny operator

WYNIK: Y = (y1, y2, ... , yn )

x1 jeśli k = 1 yk = yk-1 xk jeśli k > 1

OZNACZENIA :

[i,j] = xi xi+1 ... xj

Page 7: PRAM

Procedure LIST-PREFIX (L); { dla EREW }{(x1, x2, ... xn ) umieszczone w liście L (xi, yi, next) }

begin for każdy proces i in parallel do y[i] : = x[i]; while istnieje element i w L taki, że next[i] <> NIL do for każdy proces i in parallel do if next[i] <> NIL then begin y[next[i]] := y[i] y[next[i]] next[i] := next[next[i]]; end;end;

T(n) = O(lg n)

Page 8: PRAM

PROBLEM MAKSIMUM

DANE: n > 0 , x1, ... , xn, xi R;

WYNIK : max = maximum {x1, ... , xn, xi R}

Page 9: PRAM

FAST-MAX (X); { dla CRCW z jednolitym zapisem } { wykorzystuje n2 procesów }begin for i : =0 to n-1 in parallel do m[i] := TRUE;

for i := 0 to n-1, for j := 0 to n-1 in parallel do {proces dla pary (i,j) !} if X[i] < X[j] then m[i] = FALSE; { wiele procesów może pisać ale wszystkie zapisują tę samą wartość - FALSE }

for i := 0 to n-1 in parallel do if m[i] = TRUE then max := X[i] { wiele procesów może pisać ale wszystkie zapisują tę samą wartość – max } return maxend;

T(n) = O(1)

Page 10: PRAM

5 6 9 2 9 m

5 F T T F T F

6 F F T F T F

9 F F F F F T

2 T T T F T F

9 F F F F F T

X[j}X[i]

Page 11: PRAM

FIND-ROOTS(F)begin for każdy procesor i in parallel do if parent[i] = NIL then root[i] := i;

while istnieje węzeł i taki, że parent[i] <> NIL do for każdy procesor i in parallel do if parent[i] <>NIL then begin root[i] := root[parent[i]]; parent[i] := parent[parent[i]]; end;end;