You are on page 1of 3

Algoritmi si Limbaje pentru Calcul Paralel 2008

Laborator nr. 5

Comprimarea (Reducerea). Calculul prefixelor (Scan)


1. Comprimarea (Reducerea) Fie M o multime de n = 2m elemente, M = {ai | i = 1,...,n}Mr. Multimea M urmeaz a fi procesat pentru a calcula valoarea a1... an unde este o lege de compozitie asociativa definita pe Mr. Multimea de referinta Mr poate fi R iar poate fi +,min,max, etc. Pentru simplitate se presupune ca datele de intrare sunt initial memorate ntr-un tablou unidimensional A[0..n-1] iar n este de forma n = 2d . Algoritm recursiv de comprimare proc comprim_rec (A,l,l+m-1) begin if (m < 2) then return A[l] else return comprim_rec(A,l,l+m/2-1) comprim_rec(A,l+m/2,l+m-1)) end Algoritm iterativ de comprimare Initial cele n elemente a1, a2,...,an sunt memorate n locatiile A[n], A[n+1],...,A[2n-1] ale unui tablou de dimensiune 2n. proc sum (A, ) begin for k = m-1 down to 0 do for all j:2k j 2k+1 -1 par do A[j]=A[2j] A[2j+1]; end

Algoritmi si Limbaje pentru Calcul Paralel 2008 2. Calculul prefixelor (Scan) Realizai o implementare a calculului prefixelor folosind urmtorii algoritmi: Operatia admite element simetric

Laborator nr. 5

proc prefix_comp(A,B,) begin for k m -1 down to 0 do for each j : 2k j 2k +1 -1 par do A[j] A[2 j] A[2 j +1]; B[1]A[1]; for k 1 to m do for each j : 2k j 2k +1 -1 par do if bit0(j) = 1 then B [ j ] B [ j 1 / 2 ] else end; Rezultatul calculelor va fi memorarea valorilor A[n] A[n+j], cu j=0, ,n-1 n locaiile B[n+j] ale tabloului B[1..2n-1].

j B [ j ] B [ ] A [ j 1 ] ; 2

Algoritmi si Limbaje pentru Calcul Paralel 2008

Laborator nr. 5

Operatia nu admite element simetric proc calcul_prefixe_gen(A,B, ) begin for k = m-1 down to 0 do for all j:2k j 2k+1 -1 par do A[j]=A[2j]A[2j+1]; for k = 0 to m do for all j:2k j 2k+1 -1 par do if j = 2k then B[j]=A[j] else if bit0(j) = 1 then B[j]=B[[(j-1)/2]] else B[j]=B[[(j-2)/2]] A[j]; end

You might also like